Modern IT - Modern Workplace - Modern Collaboration

Allgemein

PowerShell – Grundlagen

Nachdem wir in unserem vorherigen Beitrag geklärt haben, was PowerShell ist und wofür wir es einsetzen können, sollten wir uns mit den Basics auseinander setzen.

Hier ist der Einstiegspunkt für jeden, der Tools anstatt Skripte schreiben möchte.


Tools vs Skripte

Mithilfe von Google und ein paar Bespielen kann jeder Skripte schreiben. Problem – Diese Skripte sind meist nicht:

  1. Gut lesbar
  2. Einfach auf andere Systeme zu übertragen
  3. Schnell Out-Of-Date

Was kann man dagegen tun? – Aufteilen, Isolieren, Kommentieren.

So wird aus einem Skript ein wiederverwendbares Tool, welches jeder einsetzen und sogar weiter entwickeln kann.


Syntax

Die PowerShell Syntax ist sehr simpel aufgebaut. Im Lernprozess erkennt man Ähnlichkeiten zu anderen Skripting- als auch Programmiersprachen.

Aber fangen wir klein an:

Variablen

$Text = "Hello World!"

Variablen werden mit einem $ gebildet. Sie müssen nicht deklariert werden. Welchen Datentyp eine Variable hält, wird automatisch durch den zugewiesenen Wert festgelegt. Im Beispiel erkennt PowerShell, dass der Wert in Anführungszeichen steht und teilt deswegen der Variablen mit, dass sie einen String enthält.

Nach  selbem Prinzip kann man auch Variablen mit den Datentypen Integer, Double, DateTime, Boolean anlegen. Aber PowerShell bringt auch andere Datentypen mit, unter anderem byte, char, xml. Alle Datentypen finden Sie hier:

https://ss64.com/ps/syntax-datatypes.html

Jede Variable hat Methoden und Eigenschaften. Diese nutzt man, indem man hinter der Variable einen “.” setzt.

VariableMethods

Hier sieht man die Eigenschaft “Length” und eine Auswahl von Methoden. Wichtig: Erst nachdem eine Variable einen Wert hat, sind Eigenschaften und Methoden verfügbar.

Funktionen

Der Hauptbestandteil von PowerShell sind Funktionen. Write-Host, Get-Date, Get-Content, New-Item, Install-Module – um einen minimalen Bruchteil zu nennen.

Alle Funktionen von PowerShell folgen dem Verb-Nomen-Prinzip.

Get-Verb zeigt eine Liste von genehmigten Verben an. Wieso? Jeder kann seine Funktionen veröffentlichen. Um den Code und seine Benutzung zu normalisieren, hat Microsoft sprechende Verben festgelegt. Allerdings können auch Funktionen mit nicht genehmigten Verben veröffentlicht werden, man sollte aber darauf achten.

Die Nomen in Funktionsnamen sind dagegen komplett ohne Vorgaben.

Um eine Funktion zu erstellen beginnen wir mit dem Schlüsselwort function und vergeben dahinter den Funktionsnamen nach Verb-Nomen-Prinzip:

function Copy-GitRepository
{

}

Ob man die geschweiften Klammern nun hinter den Funktionsnamen setzt oder eine Zeile darunter ist einem selbst überlassen. Dies ist eine Schreibweise, die ich mir angewöhnt habe.

In einem der nächsten Artikel gehe ich genauer auf Funktionen ein und zeige unter anderem die Parameterübergabe, Synopsis und Rückgabe von Werten.

Klammern

Ähnlich wie bei Variablen, kann man auch bei Funktionen auf Eigenschaften und Methoden zugreifen. Beispiel:

PS C:\WINDOWS\system32> Get-Date

Mittwoch, 3. Oktober 2018 13:34:20
PS C:\WINDOWS\system32> (Get-Date).Hour

13

Tipp: Steht der Cursor hinter dem Punkt, kann per STRG + LEER auf die Intellisense zugegriffen werden. So sieht man alle verfügbaren Methoden und Eigenschaften.

Pipe

Ein sehr wichtiges Feature der PowerShell ist die Pipe. Diese erlaubt es, mehrere Zeilen Code in eine einzige zu bringen. Beispiel:

$Processes = Get-Process 
New-Item -Path "C:\Temp\Process.txt" -Value $Processes
Get-Process | Out-File -FilePath  "C:\Temp\Process.txt"

Beide Codebeispiele holen sich eine Liste der aktuell laufenden Prozesse und speichern diese in einer Textdatei. Auch wenn es kein gravierender Unterschied ist, ob nun 1 Zeile oder 2 Zeilen Code benötigt werden, gibt es Situationen in denen die Pipe ein Skript im Punkt Lesbarkeit aufwerten kann.

Wie funktioniert die Pipe?

Die Pipe nimmt den Output des Objektes vor der Pipe und leitet ihn weiter an alles was hinter der Pipe steht. Dabei kann sie diesen Output auch verändern. Zum Beispiel so:

Get-Process | Sort-Object -Property Name -Descending

Während der Output von Get-Process standardmäßig absteigend nach Namen sortiert wird, können wir das ganze umdrehen.

Allerdings kann nicht jede Funktion hinter einer Pipe genutzt werden. Das muss innerhalb der Funktion extra definiert werden.


In weiteren Beiträgen werde ich all diese Punkte kombinieren um Beispiele zu geben. Auch Schleifen sollen ein Thema sein.

%d bloggers like this: