堆栈溢出

首先感谢您阅读本文。

我基本上有一个第三方代理软件,它允许我以LocalSystem的身份执行PowerShell。 这使我可以在没有WinRM的情况下轻松运行远程PowerShell命令。

我遇到的问题是,在某些服务器上,我无法执行get-WindowsFeature或Add-WindowsFeature。

我试图做到这一点的一个例子是:

Import-Module ServerManager;
Get-WindowsFeature;

输出结果如下:

The term 'Get-WindowsFeature' 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.

如果我在PowerShell窗口中输入相同的命令,或者直接调用PowerShell.exe,它将返回。 我试图弄清楚我们在应用程序中没有做什么,但我是PowerShell最熟悉的人。

我需要做些什么来加载这些cmdlet? Get-Module奇怪地没有显示任何东西。

谢谢!


作为对JBSmith的回应:

Yessir - 看起来像2.0。 这里是你提到的命令的结果

>Name                           Value                                            
>----                           -----                                            
>CLRVersion                     2.0.50727.6407                                   
>BuildVersion                   6.1.7600.16385                                   
>PSVersion                      2.0                                              
>WSManStackVersion              2.0                                              
>PSCompatibleVersions           {1.0, 2.0}                                       
>SerializationVersion           1.1.0.1                                          
>PSRemotingProtocolVersion      2.1                                              
>
>Name : AppLocker
>Name : Appx
>Name : BestPractices
>Name : BitsTransfer
>Name : BranchCache
>Name : CimCmdlets
>Name : DirectAccessClientComponents
>Name : Dism
>Name : DnsClient
>Name : International
>Name : iSCSI
>Name : IscsiTarget
>Name : ISE
>Name : Kds
>Name : Microsoft.PowerShell.Diagnostics
>Name : Microsoft.PowerShell.Host
>Name : Microsoft.PowerShell.Management
>Name : Microsoft.PowerShell.Security
>Name : Microsoft.PowerShell.Utility
>Name : Microsoft.WSMan.Management
>Name : MMAgent
>Name : MsDtc
>Name : NetAdapter
>Name : NetConnection
>Name : NetLbfo
>Name : NetQos
>Name : NetSecurity
>Name : NetSwitchTeam
>Name : NetTCPIP
>Name : NetworkConnectivityStatus
>Name : NetworkTransition
>Name : MSFT_NfsMappedIdentity
>Name : NFS
>Name : PKI
>Name : PrintManagement
>Name : PSDiagnostics
>Name : PSScheduledJob
>Name : PSWorkflow
>Name : PSWorkflowUtility
>Name : RemoteDesktop
>Name : ScheduledTasks
>Name : SecureBoot
>Name : ServerCore
>Name : ServerManager
>Name : ServerManagerTasks
>Name : SmbShare
>Name : SmbWitness
>Name : Storage
>Name : TroubleshootingPack
>Name : TrustedPlatformModule
>Name : UserAccessLogging
>Name : VpnClient
>Name : Wdac
>Name : Whea
>Name : WindowsDeveloperLicense
>Name : WindowsErrorReporting
>Name : AWSPowerShell

我也注意到了GCM | ? {$ _。ModuleName -eq'ServerManager'}在我通过它运行时不会返回任何内容,但通过普通的PS窗口,它会按照预期返回命令列表。


这可能是因为PowerShell脚本是从32位PowerShell实例启动的。 ServerManager命令仅适用于64位版本的PowerShell。 请参阅:无法通过PowerShell访问ServerManager模块

- 编辑 - 添加到jbsmith的评论---

额外的事情尝试:

当您运行Get-Command cmdlt时:

gcm | ? { $_.ModuleName -eq 'ServerManager' }

它不会返回任何内容,因为ServerManager模块尚未加载。

尝试运行此代替。 它将列出要加载的所有可用模块:

Get-Module -ListAvailable | ? { $_.Name -eq 'ServerManager' }

另一个要尝试的是使用“强制”选项(即使模块或其成员具有只读访问模式,也要重新导入模块及其成员):

Import-Module ServerManager -Force;
Get-WindowsFeature;

问题最终导致ServerManager的元数据在这些服务器上是3.0,但是用于调用PowerShell命令的开发的exe只有2.0版本。 当它试图导入模块时,返回了关于元数据的模式错误,但EXE没有将它们重定向到stdout,因此没有响应。

Import-Module : The 'C:Windowssystem32WindowsPowerShellv1.0ModulesServerM
anagerServerManager.psd1' module cannot be imported because its manifest conta
ins one or more members that are not valid. The valid manifest members are ('Mo
duleToProcess', 'NestedModules', 'GUID', 'Author', 'CompanyName', 'Copyright',
'ModuleVersion', 'Description', 'PowerShellVersion', 'PowerShellHostName', 'Pow
erShellHostVersion', 'CLRVersion', 'DotNetFrameworkVersion', 'ProcessorArchitec
ture', 'RequiredModules', 'TypesToProcess', 'FormatsToProcess', 'ScriptsToProce
ss', 'PrivateData', 'RequiredAssemblies', 'ModuleList', 'FileList', 'FunctionsT
oExport', 'VariablesToExport', 'AliasesToExport', 'CmdletsToExport'). Remove th
e members that are not valid ('HelpInfoUri', 'RootModule'), then try to import
the module again.
At line:1 char:14
+ Import-Module <<<<  ServerManager; Get-Module
    + CategoryInfo          : InvalidData: (C:Windowssyst...verManager.psd1:
   String) [Import-Module], InvalidOperationException
    + FullyQualifiedErrorId : Modules_InvalidManifestMember,Microsoft.PowerShe
   ll.Commands.ImportModuleCommand
链接地址: http://www.djcxy.com/p/76171.html

上一篇: Stack Overflow

下一篇: Using the "final" modifier whenever applicable in Java