PowerShell 7 und Windows PowerShell. Tobias Weltner

PowerShell 7 und Windows PowerShell - Tobias Weltner


Скачать книгу

       Kommentare

      Kommentare sind zwar eigentlich keine Literale, denn sie dienen dazu, Anmerkungen und Notizen in Ihren Code einzufügen, und werden von PowerShell normalerweise ignoriert. Trotzdem sollen sie gleich zu Anfang besprochen werden. Spätestens wenn Sie nämlich Code speichern und ein paar Tage (oder Monate) später noch verstehen wollen, was Sie da eigentlich gemacht haben, sind ein paar erklärende Kommentare als Gedächtnisstütze Gold wert.

      # verwandelt alles Folgende bis zum nächsten Zeilenumbruch zum Kommentar.

      <# leitet einen (beliebig langen) Kommentar ein, der mit #> abgeschlossen wird. Hier können Sie also selbst bestimmen, wo der Kommentar enden soll. Ein Skript könnte mit einem mehrzeiligen Blockkommentar zum Beispiel wichtige Hinweise zu Autor und Historie geben:

      <#

      Autor: Tobias Weltner

      Version: 1.2

      12.12.2020: Version 1.0 - erstes Proof-of-Konzept

      31.12.2020: Version 1.1 - Variablennamen bereinigt

      10.01.2021: Version 1.2 - Rechtschreibfehler behoben

      #>

      Möglich sind aber auch Kommentare innerhalb einer Zeile, zum Beispiel um bestimmte Teile des Befehls vorübergehend »auszukommentieren«:

      PS> Get-ChildItem -Path $home <#$home = Benutzerprofil#> -Recurse <#inkl. Unterordnern#>

       Besondere Kommentare

      Einige Kommentare sind nicht bloß persönliche Notizen, die von PowerShell höflich ignoriert werden, sondern entfalten – je nachdem, in welchem Kontext Sie sie einsetzen – erstaunliche Wirkungen:

       Interaktive Konsole

      Alle Zeilen, die Sie in interaktive PowerShell-Konsolen eingeben und mit image abschließen, werden in einer versteckten Befehlshistorie gespeichert, die mit Get-History sichtbar gemacht wird. Diese Liste kann in Kombination mit dem Kommentarzeichen viel Tipparbeit sparen.

      Um einen früher bereits eingegebenen Befehl erneut zu verwenden, können Sie entweder image drücken und sich einzeln durch die gespeicherte Befehlshistorie bewegen, oder aber Sie geben in der Konsole # gefolgt von einem beliebigen Begriff ein, der in der gesuchten Befehlszeile vorkommt. Dann drücken Sie die Autovervollständigungstaste image so oft, bis die richtige Zeile angezeigt wird.

       Gespeichertes Skript

      Haben Sie PowerShell-Code in einer Datei gespeichert und führen diese Datei aus, legt der Kommentar #requires am Anfang des Skripts die Voraussetzungen fest, die erfüllt sein müssen, um dieses Skript erfolgreich ausführen zu können. Sind diese Voraussetzungen nicht erfüllt, startet PowerShell das Skript erst gar nicht.

      Benötigt ein Skript zum Beispiel Administratorrechte, verhindert der folgende Kommentar am Beginn eines Skripts, dass dieses Skript ohne Administratorrechte ausgeführt wird:

      #requires -RunAsAdministrator

      Auch eine bestimmte PowerShell-Mindestversion (hier 5.1) sowie die Verfügbarkeit eines bestimmten Moduls kann verlangt werden (Modulnamen können bei mehreren Modulen als kommaseparierte Liste angegeben werden). Sind die Voraussetzungen nicht erfüllt, startet das Skript nicht:

      #requires -Version 5.1 -Modules PrintManagement

       Editoren

      Spezialisierte PowerShell-Editoren wie ISE oder VSCode nutzen Kommentare für Regionsdefinitionen (siehe Abbildung 2.1). Regionen lassen sich einklappen und dienen dazu, schnell die Grundstruktur (den »Blick aufs Wesentliche«) eines Skripts sichtbar zu machen, indem der Detailcode innerhalb der Regionen eingeklappt wird.

       Abbildung 2.1: Ein- und ausklappbare Regionen in PowerShell-Editoren

       Cmdlets: die PowerShell-Befehle

      Wenn Sie Aufgaben automatisieren möchten, sind Cmdlets Ihr erster Anlaufpunkt, weil solche Befehle die Möglichkeiten der PowerShell am besten ausnutzen. Einige Cmdlets sind Ihnen bereits begegnet:

      Expand-Archive # Entpackt eine ZIP-Datei.

      Get-ChildItem # Listet einen Ordnerinhalt auf.

      Get-Variable # Listet alle Variablen auf.

      Get-History # Listet die Befehlshistorie der Konsole auf.

      Get-Date # Listet ein Datum auf.

      Dabei springen syntaktische Gemeinsamkeiten ins Auge: PowerShell-Befehle tragen immer einen Doppelnamen, der aus genau zwei Wortteilen besteht: einem Verb (Tätigkeit) und einem Nomen (Tätigkeitsbereich, engl. Noun), beide in Englisch und in der Einzahl (Singular), getrennt durch einen Bindestrich.

      Dank dieser Systematik lassen sich PowerShell-Befehle mit Get-Command leicht aufspüren, und das ist auch nötig, denn PowerShell bietet Ihnen Tausende von Befehlen:

      PS> (Get-Command -Verb * -Noun *).Count

      3091

       Hinweis

      Runde Klammern funktionieren bei PowerShell wie in der Mathematik: Sie fassen zusammen, was darinsteht, und arbeiten mit dem Ergebnis weiter: in diesem Fall das Ergebnis des Befehls Get-Command.

      Dieses Ergebnis ist eine Liste von Befehlen (ein sogenanntes Array). Die Größe solcher Listen kann man in PowerShell stets mit Count abfragen. Und weil das ein weiteres Grundprinzip ist, könnten Sie auf diese Weise auch die Anzahl vieler weiterer Dinge feststellen:

      PS> (Get-Service).Count

      292

      PS> (Get-Process).Count

      252

      PS> (Get-Process -Name p*).Count

      7

      PS> (Get-ChildItem -Path c:\windows -Filter *.log).Count

      8

      Wenn Sie mit PowerShell künftig eine Aufgabe lösen möchten, überlegen Sie sich, was das gesuchte Cmdlet eigentlich genau für Sie tun soll, getrennt nach Tätigkeit (Verb) und Tätigkeitsbereich (Noun).

      Dabei können Sie sich an Befehlsnamen orientieren, die Sie vielleicht schon kennen. In der Einleitung haben Sie Expand-Archive kennengelernt, mit dem man ZIP-Archive auspacken kann. Wie könnte man wohl umgekehrt Dateien in ein neues ZIP-Archiv verpacken?

       Nach Tätigkeitsbereich suchen (»Noun«)

      Expand-Archive nutzt als zweiten Namensteil das Noun Archive. Um ähnliche Cmdlets zu finden, die auch etwas mit »Archiven« zu tun haben, suchen Sie mit Get-Command nach Cmdlets, die dieses Noun ebenfalls verwenden:

      PS> Get-Command -Noun Archive


Скачать книгу