首先感谢您的审阅。
我基本上有一个第三方代理软件,它允许我作为LocalSystem执行PowerShell。这使我可以轻松地运行远程PowerShell命令,而无需WinRM等。
我遇到的问题是,在某些服务器上,我无法执行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窗口,它会按预期返回命令列表。
6条答案
按热度按时间shstlldc1#
这可能是因为PowerShell脚本是从PowerShell的32位示例启动的。ServerManager命令仅在PowerShell的64位版本中可用。请参阅:Can't access ServerManager module via PowerShell
--编辑-添加到jbsmith的评论---
额外的尝试:
运行Get-Command cmdlt:
它将不返回任何内容,因为ServerManager模块尚未加载。
尝试运行以下命令。它将列出所有要加载的可用模块:
另一件要尝试的事情是使用“Force”选项(重新导入模块及其成员,即使模块或其成员的访问模式为只读):
dzhpxtsq2#
Get-WindowsFeature
不再随Windows或Windows Server提供,必须通过安装 *Windows Server远程管理工具 * 单独安装。这里是下载链接,这有客户端和服务器操作系统的下载,所以只需为您的操作系统选择正确的软件包。
https://www.microsoft.com/en-us/download/details.aspx?id=45520
kiayqfof3#
问题最终是这些服务器上ServerManager的元数据是3.0,但用于调用PowerShell命令的开发exe仅为2.0版。当它试图导入模块时,返回了有关元数据的架构错误,但EXE没有将它们重定向到标准输出,因此没有响应。
oxiaedzo4#
在Windows Server 2016上,在安装ADFS作为解决方案时,我将C:\Windows\system32\WindowsPowerShell\v1.0\Modules文件夹复制到C:\Users\vagrant\Documents\WindowsPowerShell\Modules,并且它工作了!
20jt8wwn5#
我遇到了同样的问题,我的问题是我的PowerShell运行在32位而不是64位PowerShell上
在64位PowerShell上运行它工作正常。
clj7thdc6#
这可能是因为PowerShell脚本是从PowerShell的32位示例启动的。ServerManager命令仅在PowerShell的64位版本中可用。