新对象:New-Object不被识别为cmdlet的名称

6
我希望为SharePoint应用程序开发配置“高信任应用程序”,为此,我需要首先在PowerShell编辑器中插入一些命令,例如:
$publicCertPath = "C:\Certs\HighTrustSampleCert.cer" 
$certificate = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($publicCertPath)

我正在使用Windows Server 2012 R2上的Windows PowerShell,其中包括Windows PowerShell 4,默认情况下包含新的对象 cmd-let。但是我不明白,为什么我的操作系统无法识别该命令...我始终遇到以下错误:New-Object:未将“New-Object”识别为cmdlet名称。
当我打开PowerShell时,会出现以下内容:
*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."
我以为这是正常的,直到今天...它与错误有任何关系吗?下面是整个(new-object)异常堆栈:
"New-Object:未将“New-Object”识别为cmdlet名称、函数、脚本文件或可操作程序的名称。检查名称的拼写,或者如果包括路径,请验证路径是否正确,然后重试。 在第1行字符16处: +$certificate = New-Object System.Security.Cryptography.X509Certificates.X509Cert ... +~~~~~~~~~~ + CategoryInfo: ObjectNotFound:(New-Object:String) [],CommandNo tFoundException + FullyQualifiedErrorId: CommandNotFoundException" ps:我想提到,当我使用enter-psSession并远程工作时,new-object命令被识别,但是SharePoint命令(例如Get-SPAuthenticationRealm)不再被识别...似乎存在与操作系统相关的问题。

2
你已经尝试过 Get-Command 和/或 Get-Help 命令来查看是否被识别了,对吧。出现这种错误非常奇怪,应该默认可用。 - Patrick87
1
New-Object 命令自 PowerShell 1.0 版本起可用。它也被 Microsoft.PowerShell.Utility 模块导出,因此如果您的 PowerShell 会话中没有加载该模块,可能会触发类似的错误。请问 Get-Module 的结果列表中是否包含此模块? - PeterK
1
@KarouiHaythem:是的,当然。PowerShell是模块化的。某些cmdlet(如New-Object)仅在加载实现它们的模块时才可用。特别是,New-ObjectMicrosoft.PowerShell.Utility模块提供。您可以通过运行Get-Module cmdlet来验证此模块是否已在会话中加载。这将为您提供已加载模块的列表,其中应包括Microsoft.PowerShell.Utility。这应该确认您是否完全具备New-Object - PeterK
2
运行 Get-Module -ListAvailable 命令以获取可加载的 PowerShell 模块列表。其中应该包括 Microsoft.PowerShell.Utility。如果它在列表中,您可以直接运行 Import-Module Microsoft.PowerShell.Utility 来加载它。顺便说一下,这个模块是 PowerShell 的核心模块之一,所以默认会话应该包含它们。如果这只是一个普通的 PowerShell 会话,您可能需要尝试修复您的 PowerShell 安装。 - PeterK
1
@KarouiHaythem:谢谢。我不确定是否应该归功于我,因为你做了这项工作,但我已经发布了我的答案,供将来参考。最终您可能希望添加您解决问题的方式。谢谢。 - PeterK
显示剩余10条评论
3个回答

4

看起来你的PowerShell安装已经损坏,需要修复。 New-Object cmdlet是由Microsoft.PowerShell.Utility模块导出的,该模块是核心PowerShell模块之一,并且应该在所有PowerShell安装中默认导入。


1
这可能是因为PSModulesPath的注册表键条目未预填默认的PowerShell模块路径。
$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

-3

这里没有得到任何验证,但我提出了一个假设:Powershell遇到了运行时错误,导致它损坏了其进程。


3
你读过评论了吗?问题出在安装上,彼得帮我找到解决方法... 我看不出有任何怀疑的理由。 - Haithem KAROUI

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接