Читать книгу PowerShell 7 und Windows PowerShell - Tobias Weltner - Страница 124
Befehle lösen Aufgaben
ОглавлениеWenn es für eine bestimmte Aufgabe einen maßgeschneiderten Befehl gibt, ist Automation unglaublich einfach: Sie rufen den Befehl auf, übergeben ihm Ihre speziellen Wünsche und führen ihn aus – Fall erledigt. Möchten Sie zum Beispiel ein ZIP-Archiv auspacken, genügt dieser eine Befehl:
PS> Expand-Archive -Path c:\temp\datei.zip -DestinationPath c:\temp\inhalte
Sie müssten bloß kurz die Angaben hinter dem Befehl an Ihre Situation anpassen und sicherstellen, dass die angegebene ZIP-Datei auch tatsächlich existiert. Den notwendigen Zielordner legt Expand-Archive selbst an, falls er noch fehlt.
Mit dem nächsten Befehl könnten Sie dann (zumindest auf Windows-Systemen) den neu angelegten Zielordner mit den Inhalten der ausgepackten ZIP-Datei im Explorer bewundern:
PS> explorer c:\temp\inhalte
Die beiden Befehle Expand-Archive und explorer unterscheiden sich ganz offensichtlich bereits in ihrer Namensgebung: Tatsächlich ist der Doppelname Expand-Archive ein Markenzeichen für einen PowerShell-Befehl (ein sogenannte Cmdlet, sprich »Commandlet«), während der Einzelname explorer eine eigenständige Anwendung repräsentiert, die auch außerhalb von Power-Shell aufrufbar ist (eine Application).
Je mehr Befehle Sie zur Verfügung haben, desto vielfältiger sind die Aufgaben, die Sie lösen können. Deshalb kombiniert PowerShell Befehle aus vier Quellen, um Ihnen ein möglichst breites Befehlsspektrum anbieten zu können:
PowerShell-Befehle (Cmdlets): Diese tragen immer einen Doppelnamen aus Verb und Nomen, lassen sich nur innerhalb der PowerShell ausführen, verfügen über eine ausführliche Hilfe und liefern hochwertige strukturierte Informationen (sogenannte Objekte). Diese Befehlsart wird Cmdlet genannt.Das »let« am Namensende von »Cmdlet« deutet an, dass diese Befehlskategorie ausschließlich innerhalb der PowerShell ausführbar ist und keinen vollständigen Befehl darstellt: Cmdlets erhalten allgemeine Funktionalitäten wie Hilfe sowie Ein- und Ausgaben zentral von PowerShell.
Anwendungen (Applications): Dies sind eigenständig auch außerhalb der PowerShell ausführbare Programme. PowerShell nennt diesen Befehlstyp Applications. Weil Applications in sich abgeschlossene Programme sind, kann hier jeder Programmierer seinen eigenen Standards folgen. Deshalb herrscht bei Namensgebung und Hilfe Wildwuchs, und Applications liefern – falls überhaupt – ausschließlich unstrukturierten Text zurück. Applications sind fast immer plattformspezifisch und aus den genannten Gründen meist lediglich zweite Wahl, aber wenn ein ähnliches Cmdlet nicht zur Verfügung steht, sind sie immerhin besser als nichts.
.NET-Befehle (Methoden): Diese Befehle werden Methoden genannt und stammen aus den Programmbibliotheken, auf denen PowerShell und alle PowerShell-Befehle basieren: dem sogenannten .NET Framework. Falls Sie kein passendes Cmdlet finden, können Sie die meisten Automationsaufgaben dennoch lösen, indem Sie direkt auf Basisbefehle des .NET Framework zugreifen.Weil Methoden eher kleingliedrigere Aufgaben erledigen und sich nicht mit Get-Command auffinden lassen, entspricht der Einsatz von .NET-Methoden eher der klassischen Programmiererarbeit und ist häufig etwas anspruchsvoller als der Einsatz von Cmdlets.
Operatoren: Solche Befehle sind anfangs gar nicht als solche zu erkennen, weil sie ungewöhnliche Namen tragen und ihre Argumente auf besonderem Weg erhalten. Operatorennamen sind häufig Symbole wie + oder kurze Wörter mit einem führenden Bindestrich wie -gt.Operatoren beziehen ihre Argumente jeweils von ihrer rechten und linken Seite. Der mathematische Operator + addiert zum Beispiel das, was rechts und links von ihm steht: 12 + 6. Der Vergleichsoperator -gt (für greater than) prüft, ob der Wert links von ihm größer ist als der Wert rechts von ihm: 8 -gt 10.
Aus diesen vier Befehlsfamilien bestehen sämtliche PowerShell-Lösungen. In der Praxis kombiniert man daraus wie aus einem Legokasten die Befehle, die die notwendigen Automationsaufgaben umsetzen können.
Vielleicht möchten Sie ja zum Abschluss einer Automationsaufgabe noch einen Piepton ausgeben. Leider gibt es dafür weder ein Cmdlet noch eine Anwendung.
Dies wäre dann also ein Einsatzgebiet für .NET-Methoden aus dem .NET Framework, die häufig auch dann noch helfen können, wenn anderweitig kein passender Befehl gefunden werden konnte. Dafür sehen Methoden etwas sonderbar aus:
PS> [Console]::Beep()
Obwohl die Schreibweise dieses Befehls etwas von der der übrigen Befehlsarten abweicht und das .NET Framework anfangs vielleicht geheimnisvoll erscheint, ist es nicht wirklich schwierig, .NET-Methoden zu benutzen: Die Argumente stehen bei ihnen nicht durch Leerzeichen getrennt hinter dem Befehl, sondern kommasepariert innerhalb seiner Klammern. Ansonsten funktionieren Methoden ganz ähnlich wie Cmdlets.
Dies würde beispielsweise einen 800-Hz-Ton für 1.200 Millisekunden ausgeben:
PS> [Console]::Beep(800, 1200)
Und ohne Klammern verrät eine .NET-Methode sogar, welche Argumente sie von Ihnen erwartet:
PS> [Console]::Beep
OverloadDefinitions
-------------------
static void Beep()
static void Beep(int frequency, int duration)
Halten wir also fest: Zur Lösung Ihrer Automationsaufgaben stehen Ihnen in PowerShell vier unterschiedliche Befehlskategorien zur Verfügung: Cmdlets, Applications, Methoden und Operatoren. Aus diesen vier Zutaten sind sämtliche PowerShell-Skripte geschmiedet.
Das wirft natürlich die Frage auf, woher man weiß, wie die einzelnen Befehle heißen und was sie alles tun können. Die Suche nach passenden Befehlen für ein bestimmtes Anliegen wird deshalb einen Schwerpunkt dieses Kapitels bilden. Mehr dazu gleich.