PowerShell 7 und Windows PowerShell. Tobias Weltner
Version Source
----------- ---- ------- ------
Function Compress-Archive 1.2.5 Microsoft.PowerShell.Archive
Function Expand-Archive 1.2.5 Microsoft.PowerShell.Archive
Sofort springt Compress-Archive ins Auge: Sie könnten damit nun Dateien in einer ZIP-Datei verpacken. Die folgenden Zeilen legen einen neuen Ordner an und packen dann alle Dateien mit der Dateierweiterung .log, die im Windows-Ordner liegen, in eine neue ZIP-Datei:
PS> New-Item -Path c:\logfiles -ItemType Directory -ErrorAction Ignore
PS> Compress-Archive -Path c:\windows\*.log -DestinationPath c:\logfiles\logdateien.zip
Nach Tätigkeit suchen (»Verb«)
Möchten Sie lieber erfahren, was Sie sonst noch alles »auspacken« könnten, orientieren Sie sich am Verb des Cmdlets: Expand-Archive packte ZIP-Dateien aus. Die Tätigkeit heißt also Expand. Suchen Sie mit Get-Command nach allen Cmdlets, die dieses Verb verwenden, wenn Sie verwandte Cmdlets finden wollen, die ebenfalls Dinge auspacken:
PS> Get-Command -Verb Expand
CommandType Name Version Source
----------- ---- ------- ------
Alias Expand-IscsiVirtualDisk 2.0.0.0 IscsiTarget
Function Expand-Archive 1.2.5 Microsoft.PowerShell.Archive
Cmdlet Expand-WindowsCustomDataImage 3.0 Dism
Cmdlet Expand-WindowsImage 3.0 Dism
Aufgelistet wird nun möglicherweise unter anderem Expand-WindowsImage, das ein Betriebssystemabbild aus einer Datei (mit der Dateierweiterung *.wim) auspackt. Extrem nützlich, falls Sie das gerade vorhatten, ansonsten einfach ein weiterer Legobaustein unter vielen in Ihrem Automationswerkzeugkasten.
Grundsätzlich kommen die meisten Cmdlets in Gruppen zu einem bestimmten Thema, und die Verben verraten dann, was die einzelnen Cmdlets der Gruppe tun. Müssen Sie beispielsweise Dienste verwalten (bei Linux Daemons genannt), schauen Sie sich das Noun Service an:
PS> Get-Command -Noun Service
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Get-Service 7.0.0.0 Microsoft.PowerShell.Management
Cmdlet New-Service 7.0.0.0 Microsoft.PowerShell.Management
Cmdlet Remove-Service 7.0.0.0 Microsoft.PowerShell.Management
Cmdlet Restart-Service 7.0.0.0 Microsoft.PowerShell.Management
Cmdlet Resume-Service 7.0.0.0 Microsoft.PowerShell.Management
Cmdlet Set-Service 7.0.0.0 Microsoft.PowerShell.Management
Cmdlet Start-Service 7.0.0.0 Microsoft.PowerShell.Management
Cmdlet Stop-Service 7.0.0.0 Microsoft.PowerShell.Management
Cmdlet Suspend-Service 7.0.0.0 Microsoft.PowerShell.Management
Wollen Sie lieber Prozesse (Programme) verwalten, nehmen Sie stattdessen das Noun Process. Sie werden auch hier eine Gruppe von Cmdlets entdecken, die alle üblichen Aufgaben rund um Prozesse abdecken.
Hinweis
In den Ergebnissen von Get-Command fällt die Spalte CommandType auf. Sie gibt an, wie Cmdlets intern programmiert sind: entweder binär kompiliert (Cmdlet) oder mit Bordmitteln aus PowerShell-Code (Function).
Streng genommen, bezeichnet der Begriff »Cmdlet« also nur einen von zwei Bautypen der PowerShellBefehle. Da sich beide Typen für den Anwender absolut identisch verhalten und ich in diesem Kapitel nicht ständig von »Cmdlets und Funktionen« sprechen möchte, hat der CommandType in der Praxis nur dann eine Bedeutung, wenn hier ausnahmsweise einmal etwas ganz anderes steht: Alias zum Beispiel:
PS> Get-Command -Verb Expand -Noun *Disk*
CommandType Name Version Source
----------- ---- ------- ------
Alias Expand-IscsiVirtualDisk 2.0.0.0 IscsiTarget
Aliase sind Zweitnamen für Befehle. Der Parameter -ShowCommandInfo liefert in diesem Fall in Definition den Namen des eigentlichen »echten« Cmdlets, das der Alias aufrufen würde:
PS> Get-Command -Name Expand-IscsiVirtualDisk -ShowCommandInfo
Name : Expand-IscsiVirtualDisk
ModuleName : IscsiTarget
Module : @{Name=IscsiTarget}
CommandType : Alias
Definition : Resize-IscsiVirtualDisk
ParameterSets : {}
Aliasnamen existieren hauptsächlich aus zwei Gründen: historisch (um den »Umstieg« von anderen Shells zu erleichtern) und aus Kompatibilitätsgründen (um bei Namensänderungen weiterhin die ursprünglichen Befehlsnamen zu unterstützen). Get-Alias liefert die Liste der gegenwärtig verfügbaren Aliase.
Beispiel: Ungefährliche Cmdlets zum Experimentieren finden
Damit bei ersten Experimenten mit neuen Cmdlets keine Unfälle passieren, suchen Sie zum Spielen am besten Cmdlets mit dem Verb Get. Dieses Verb zeigt an, dass das Cmdlet »Informationen beschafft«.
So was ist stets ungefährlich, und schlimmstenfalls begegnen Ihnen rote Fehlermeldungen (wenn Sie zum Beispiel nicht über die nötigen Berechtigungen verfügen, um eine bestimmte Information abzufragen). Wirklich beschädigen können Sie mit diesen Befehlen aber nichts:
PS> Get-Command -Verb Get
CommandType Name Version Source
----------- ---- ------- ------
Function Get-OperationValidation 1.0.1 Microsoft.PowerShell.Operation.Valida...
Cmdlet Get-Acl 7.0.0.0 Microsoft.PowerShell.Security
Cmdlet Get-Alias 7.0.0.0 Microsoft.PowerShell.Utility
Cmdlet Get-AuthenticodeSignature 7.0.0.0 Microsoft.PowerShell.Security
Cmdlet Get-ChildItem 7.0.0.0 Microsoft.PowerShell.Management
(…)
Beispiel: Netzwerkbefehle finden
Indem Sie beide Suchkriterien – Verb und Noun – kombinieren, machen Sie Ihre Suche noch spezifischer und finden im Idealfall direkt die passenden Cmdlets für Ihr Anliegen.
Möchten Sie zum Beispiel Informationen über Ihr Netzwerk erfragen, suchen Sie nach Cmdlets mit dem Verb Get (»Informationen beschaffen«) und einem Tätigkeitsbereich, der das Suchwort net enthält. Das Sternchen (*) ist ein Platzhalter und steht für beliebige andere Zeichen.
PS> Get-Command -Verb Get -Noun *net*
CommandType Name Version Source
----------- ---- ------- ------
Function Get-BCNetworkConfiguration 1.0.0.0 BranchCache
Function Get-DANetworkLocationServer 3.0.0.0 RemoteAccess
Function Get-DnsServerClientSubnet 2.0.0.0 DnsServer
Function Get-DnsServerZoneTransferPolicy 2.0.0.0 DnsServer
Function Get-DtcNetworkSetting 1.0.0.0 MsDtc
Function