6
votes

I want to configure high trusted app for app dev in SharePoint, and to do so, i need first to insert some commands in the powershell editor like :

$publicCertPath = "C:\Certs\HighTrustSampleCert.cer" 
$certificate = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($publicCertPath)

I am using windows PowerShell on Windows Server 2012 R2 which includes Windows PowerShell 4 that includes by default the new-object cmd-let... I don't understand though, why doesn't my operating system recognize that command ... I don't stop having the following error : New-Object : The term 'New-Object' is not recognized as the name of a cmdlet.

When i open powerShell i get this :

*select :

The term 'Select-Object' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\CONFIG\POWERSHELL\Registration\SharePoint.ps1:1 char:16 + $ver = $host | select version + ~~~~~~ + CategoryInfo : ObjectNotFound: (Select-Object:String) [], Comma ndNotFoundException + FullyQualifiedErrorId : CommandNotFoundException Set-location : The term 'Set-location' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again At C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\CONFIG\POWERSHELL\Registration\SharePoint.ps1:4 char:1 + Set-location $home + ~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Set-location:String) [], Comman dNotFoundException + FullyQualifiedErrorId : CommandNotFoundException*

I thought that was normal until today... does it have any relation with the error? And here is the hole (new-object) exception stack:

New-Object : The term 'New-Object' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At line:1 char:16 + $certificate = New-Object System.Security.Cryptography.X509Certificates.X509Cert ... + ~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (New-Object:String) [], CommandN otFoundException + FullyQualifiedErrorId : CommandNotFoundException

ps: i want to mention that when i used enter-psSession and worked remotely, the command new-object was recognized but sharepoint commands (like Get-SPAuthenticationRealm) were no more recognized ... And it's like there is a problem related to the operating system.

3
You've tried Get-Command and/or Get-Help to see whether it's recognized, right. Very strange to get that error, should be available by default. - Patrick87
The New-Object cmdlet is available since PowerShell 1.0. It's also exported by the Microsoft.PowerShell.Utility module, so if you don't have that loaded in your PowerShell session, that could trigger an error like that. Does the result list of Get-Module contain this module? - PeterK
@KarouiHaythem: Yes, of course. PowerShell is modularized. Certain cmdlets like New-Object are only available if the module that implements them is loaded. New-Object, in particular is provided by the Microsoft.PowerShell.Utility module. You can verify if this module is loaded in your session by running the Get-Module cmdlet. This will give you the list of loaded modules and Microsoft.PowerShell.Utility should be in the list. This should confirm if you have New-Object available at all. - PeterK
Run Get-Module -ListAvailable' to get the list of PowerShell modules available for loading. This should include Microsoft.PowerShell.Utility. If it's in the list, you can just run Import-Module Microsoft.PowerShell.Utility` to load it. By the way this module is among the Core Modules of PowerShell so the default session should include them. If this is a just a regular PowerShell session, you may want to try repairing your PowerShell installation. - PeterK
@KarouiHaythem: Thank you. I'm not sure if I deserve the credit as you did the work, but I've posted my answer anyway for future reference. You may want to add the way you have fixed the problem eventually. Thanks. - PeterK

3 Answers

4
votes

It appears that your PowerShell installation is corrupted and needs to be repaired. The New-Object cmdlet is exported by the Microsoft.PowerShell.Utility module, which is one of the Core PowerShell modules and should be imported by default on all PowerShell installations.

1
votes

This can be because the Registry key entry for PSModulesPath is not pre-filled with the default PowerShell Modules path.

$PSModulePath = Get-ItemProperty -Path "HKLM:SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -Name "PSModulePath"

$newPSModulePath = $PSModulePath.PSModulePath + ";C:\Windows\System32\WindowsPowerShell\v1.0\Modules"

Set-ItemProperty -Path "HKLM:SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -Name "PSModulePath" -value $newPSModulePath
-2
votes

Nothing verified here, but I am advancing the hypothesis that Powershell has run into a runtime error that caused it to corrupt its process.