PowerShell Add-WindowsFeature无法识别

soat7uwm  于 2023-04-12  发布在  Shell
关注(0)|答案(6)|浏览(545)

首先感谢您的审阅。
我基本上有一个第三方代理软件,它允许我作为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窗口,它会按预期返回命令列表。

shstlldc

shstlldc1#

这可能是因为PowerShell脚本是从PowerShell的32位示例启动的。ServerManager命令仅在PowerShell的64位版本中可用。请参阅:Can't access ServerManager module via PowerShell
--编辑-添加到jbsmith的评论---
额外的尝试:
运行Get-Command cmdlt:

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

它将不返回任何内容,因为ServerManager模块尚未加载。
尝试运行以下命令。它将列出所有要加载的可用模块:

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

另一件要尝试的事情是使用“Force”选项(重新导入模块及其成员,即使模块或其成员的访问模式为只读):

Import-Module ServerManager -Force;
Get-WindowsFeature;
dzhpxtsq

dzhpxtsq2#

Get-WindowsFeature不再随Windows或Windows Server提供,必须通过安装 *Windows Server远程管理工具 * 单独安装。
这里是下载链接,这有客户端和服务器操作系统的下载,所以只需为您的操作系统选择正确的软件包。
https://www.microsoft.com/en-us/download/details.aspx?id=45520

kiayqfof

kiayqfof3#

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

Import-Module : The 'C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Serveranager\ServerManager.psd1' module cannot be imported because its manifest contins one or more members that are not valid. The valid manifest members are ('ModuleToProcess', 'NestedModules', 'GUID', 'Author', 'CompanyName', 'Copyright', 'ModuleVersion', 'Description', 'PowerShellVersion', 'PowerShellHostName', 'PowerShellHostVersion', 'CLRVersion', 'DotNetFrameworkVersion', 'ProcessorArchitecture', 'RequiredModules', 'TypesToProcess', 'FormatsToProcess', 'ScriptsToProcess', 'PrivateData', 'RequiredAssemblies', 'ModuleList', 'FileList', 'FunctionsToExport', 'VariablesToExport', 'AliasesToExport', 'CmdletsToExport'). Remove the members that are not valid ('HelpInfoUri', 'RootModule'), then try to importthe module again.
    At line:1 char:14
    + Import-Module <<<<  ServerManager; Get-Module
        + CategoryInfo          : InvalidData: (C:\Windows\syst...verManager.psd1:String) [Import-Module], InvalidOperationException
        + FullyQualifiedErrorId : Modules_InvalidManifestMember,Microsoft.PowerShell.Commands.ImportModuleCommand
oxiaedzo

oxiaedzo4#

在Windows Server 2016上,在安装ADFS作为解决方案时,我将C:\Windows\system32\WindowsPowerShell\v1.0\Modules文件夹复制到C:\Users\vagrant\Documents\WindowsPowerShell\Modules,并且它工作了!

20jt8wwn

20jt8wwn5#

我遇到了同样的问题,我的问题是我的PowerShell运行在32位而不是64位PowerShell上
在64位PowerShell上运行它工作正常。

clj7thdc

clj7thdc6#

这可能是因为PowerShell脚本是从PowerShell的32位示例启动的。ServerManager命令仅在PowerShell的64位版本中可用。

相关问题