web-dev-qa-db-ja.com

PowerShell Add-WindowsFeatureが認識されません

これをレビューしていただきありがとうございます。

基本的に、PowerShellをLocalSystemとして実行できるサードパーティのエージェントソフトウェアがあります。これにより、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に最も精通している人です。

これらのコマンドレットを読み込むために特別に必要なことはありますか?奇妙なことに、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ウィンドウでは期待どおりにコマンドリストが返されます。

17
BeastianSTi

問題は、これらのサーバーでServerManagerのメタデータが3.0であったにもかかわらず、PowerShellコマンドを呼び出すために開発されたexeがバージョン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
1
BeastianSTi

これは、おそらくPowerShellスクリプトがPowerShellの32ビットインスタンスから起動されているためです。 ServerManagerコマンドは、64ビットバージョンのPowerShellからのみ使用できます。参照: PowerShell経由でServerManagerモジュールにアクセスできない

-編集-jbsmithのコメントに追加するには---

試すべきその他のこと:

Get-Command cmdltを実行したとき:

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

ServerManagerモジュールがロードされていないため、何も返されません。

代わりにこれを実行してみてください。ロード可能なすべてのモジュールがリストされます。

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

もう1つ試すことは、「強制」オプションを使用することです(モジュールまたはそのメンバーに読み取り専用のアクセスモードがある場合でも、モジュールとそのメンバーを再インポートします)。

Import-Module ServerManager -Force;
Get-WindowsFeature;
14
HAL9256