PowerShell 7 und Windows PowerShell. Tobias Weltner

Читать онлайн.
Название PowerShell 7 und Windows PowerShell
Автор произведения Tobias Weltner
Жанр Математика
Серия
Издательство Математика
Год выпуска 0
isbn 9783960104803



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

       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.

       Literale

      Bevor Sie weitere Befehle aus den vier großen Befehlskategorien von eben kennenlernen, lassen Sie uns kurz über sogenannte Literale sprechen. Diese benötigen Sie nämlich, wenn Sie Befehle aufrufen oder Skripte schreiben möchten. Sie haben sie sogar eben schon eingesetzt.

      Literale sind laut Definition »feste Werte im Quellcode«. Fast immer, wenn Sie einem Befehl weitere Informationen übergeben wollen, verwenden Sie Literale.

      Hier sind die Befehle von eben, und die Literale darin sind fett hervorgehoben:

      Expand-Archive -Path c:\temp\datei.zip -DestinationPath c:\temp\inhalte

      explorer c:\temp\inhalte

      [Console]::Beep(800, 1200)

      Literale sind also unveränderliche Informationen – wie Texte, Zahlen und Datumsinformationen –, die Sie in den Quellcode oder Befehlsaufruf fest hineingeschrieben haben.

       Hinweis

      Wenn eine Codezeile mit einem Befehl beginnt, schaltet PowerShell in den sogenannten Argument Mode und erlaubt nun vieles, was sonst verboten wäre. Zum Beispiel müssen Sie im Argument Mode Literale nicht eindeutig kennzeichnen und dürfen also Zahlen und Text bunt mischen.

      PowerShell schaut in diesem Fall nach, was für Informationen ein Befehl vom Anwender verlangt, und wandelt die Argumente hinter dem Befehl automatisch in die passenden Datentypen um. Schön für den Einsteiger, der sich dadurch anfangs nicht mit Datentypen zu beschäftigen braucht.

      Besser ist es allerdings, von vornherein Literale eindeutig zu kennzeichnen, damit jeder weiß, was Sie meinen: einen Text, eine Zahl oder einen Befehl. Sie brauchen diese Kennzeichnung ohnehin früher oder später und spätestens dann, wenn Angaben missverständlich werden, Sonder- oder Leerzeichen enthalten oder wenn Sie damit beginnen, PowerShell-Skripte zu verfassen.

      Die Befehle oben müssten streng genommen folgendermaßen gekennzeichnet sein:

      Expand-Archive -Path 'c:\temp\datei.zip' -DestinationPath 'c:\temp\inhalte'

      explorer 'c:\temp\inhalte'

      [Console]::Beep(800, 1200)

      Halten wir also fest: Text gehört in Anführungszeichen. Zahlen nicht.

       Text

      Texte werden mit Anführungszeichen markiert. Das unterscheidet sie von Befehlen, wie Sie hier sehen können:

      PS> WhoAmI image

      dell7390\tobias

      PS> 'WhoAmI' image

      WhoAmI

      Im ersten Fall wird der Befehl whoami ausgeführt (offensichtlich eine Application, weil der Befehlsname nicht aus zwei Namensteilen besteht, und damit ein plattformspezifischer Befehl, der in diesem Fall nur auf Windows verfügbar ist).

      Im zweiten Fall wird der Text »WhoAmI« ausgegeben.

      Als Standardtextbegrenzung werden einfache Anführungszeichen (') verwendet.

       Texte mit eingebetteten Variablen

      Doppelte Anführungszeichen (") können dazu führen, dass PowerShell den Text nachträglich ändert und er danach ganz anders aussieht, als ursprünglich angegeben:

      PS> "Benutzer: $env:username`r`nComputer: $env:computername`r`n$home" image

      Benutzer: tobias

      Computer: DELL7390

      Die Textausgabe entspricht ganz eindeutig nicht dem Text in den Anführungszeichen! Was hat sich geändert?

       Variablen: Variablen beginnen immer mit $ und enthalten Informationen. In einem Text mit doppelten Anführungszeichen tauscht PowerShell alle Variablen gegen ihre Inhalte aus. So also sind Benutzer- und Computernamen in den Text geraten.

       Sonderzeichen: Durch die beiden Sonderzeichen `r`n wurde ein Zeilenumbruch eingefügt, der Text also mehrzeilig ausgegeben. Das Schwierigste an den Sonderzeichen ist wahrscheinlich, sie einzugeben: Das »`« ist der französische Accent grave, den man auf deutschen Tastaturen erhält, indem man festhält, dann die Taste rechts neben dem »ß« drückt und noch ein folgen lässt.

      Jetzt wird vielleicht verständlich, warum das einfache Anführungszeichen bei PowerShell das Standardanführungszeichen sein sollte: Wer im Text ohnehin keine Variableninhalte oder Sonderzeichen auflösen will, erspart PowerShell damit den Mehraufwand, den Textinhalt zu prüfen und gegebenenfalls