it-swarm.com.de

PowerShell Add-WindowsFeature nicht erkannt

Vielen Dank zunächst für die Überprüfung.

Ich habe im Grunde eine Agentensoftware eines Drittanbieters, mit der ich PowerShell als LocalSystem ausführen kann. Dadurch kann ich Remote-PowerShell-Befehle ohne WinRM usw. problemlos ausführen.

Das Problem, auf das ich stoße, ist, dass ich auf einigen Servern keine get-WindowsFeature oder Add-WindowsFeature ausführen kann.

Ein Beispiel, wie ich dies erreichen möchte, ist hier:

Import-Module ServerManager;
Get-WindowsFeature;

Die Ausgabe ist als solche:

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.

Wenn ich dieselben Befehle in ein PowerShell-Fenster eingebe oder direkt PowerShell.exe anrufe, wird es zurückgegeben. Ich versuche herauszufinden, was wir in der Anwendung nicht richtig machen, aber ich bin die bekannteste Person mit PowerShell hier. 

Muss ich etwas Besonderes tun, um diese Cmdlets zu laden? Get-Module zeigt nichts seltsam an.

Vielen Dank!


In Antwort auf JBSmith:

Yessir - sieht aus wie 2.0. Hier sind die Ergebnisse der von Ihnen erwähnten Befehle

>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

Mir ist auch aufgefallen, dass GCM | ? {$ _. ModuleName -eq 'ServerManager'} gibt nichts zurück, wenn ich es dort durchführe. Durch ein normales PS-Fenster wird jedoch wie erwartet eine Befehlsliste zurückgegeben.

12
BeastianSTi

Das Problem bestand schließlich darin, dass die Metadaten für ServerManager 3.0 auf diesen Servern waren. Das entwickelte Exe für den Aufruf von PowerShell-Befehlen war jedoch nur Version 2.0. Beim Versuch, die Module zu importieren, wurden Schemafehler in Bezug auf die Metadaten zurückgegeben, aber die EXE-Datei leitete sie nicht in stdout um, daher keine Antwort.

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
0
BeastianSTi

Dies liegt wahrscheinlich daran, dass das PowerShell-Skript von einer 32-Bit-Instanz von PowerShell gestartet wird. Die ServerManager-Befehle sind nur in der 64-Bit-Version von PowerShell verfügbar. Siehe: Kein Zugriff auf das ServerManager-Modul über PowerShell

- Bearbeiten - Zu jbsmiths Kommentaren hinzufügen ---

Zusätzliche Dinge zum Ausprobieren:

Wenn Sie den Befehl Get-Command ausgeführt haben:

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

Es wird nichts zurückgegeben, da das ServerManager-Modul nicht geladen wurde.

Versuchen Sie es stattdessen. Es werden alle verfügbaren Module aufgelistet, die geladen werden sollen:

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

Die andere Möglichkeit ist, die Option "Erzwingen" zu verwenden (importiert ein Modul und seine Mitglieder erneut, auch wenn das Modul oder seine Mitglieder über einen schreibgeschützten Zugriffsmodus verfügen):

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