В PowerShell добавить-WindowsFeature, введенного непризнанных

прежде всего, спасибо за обзор этого.

у меня в основном есть стороннее программное обеспечение агента, которое позволяет мне выполнять PowerShell как LocalSystem. Это позволяет мне легко запускать удаленные команды 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 здесь.

есть что-то особенное, что мне нужно сделать, чтобы загрузить эти командлеты? Get-Module ничего не показывает, как ни странно.

спасибо!


в ответ на JBSmith:

Да - выглядит как 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 он возвращает список команд, как ожидалось.

2 ответов


Это, вероятно, потому, что сценарий PowerShell запускается из 32-разрядного экземпляра PowerShell. Команды ServerManager доступны только в 64-разрядной версии PowerShell. См.: не удается получить доступ к модулю ServerManager через PowerShell

-- Edit-добавить в комментарии jbsmith - - -

дополнительные вещи, чтобы попробовать:

при запуске командлета Get-команда командлет:

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

Он ничего не вернет, потому что модуль ServerManager не был загружен.

попробуйте запустить это вместо этого. В нем будут перечислены все доступные модули для загрузки:

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

другое, что нужно попробовать, это использовать опцию" Force " (повторно импортирует модуль и его члены, даже если модуль или его члены имеют режим доступа только для чтения):

Import-Module ServerManager -Force;
Get-WindowsFeature;

проблема заключалась в том, что метаданные для ServerManager были 3.0 на этих серверах, но разработанный exe для вызова команд PowerShell был только версией 2.0. Когда он попытался импортировать модули, были возвращены ошибки схемы о метаданных, но EXE не перенаправил их в stdout, следовательно, никакого ответа.

Import-Module : The 'C:\Windows\system32\WindowsPowerShell\v1.0\Modules\ServerM
anager\ServerManager.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:\Windows\syst...verManager.psd1:
   String) [Import-Module], InvalidOperationException
    + FullyQualifiedErrorId : Modules_InvalidManifestMember,Microsoft.PowerShe
   ll.Commands.ImportModuleCommand