Powershell für Anfänger

Einführung

Zu dem Thema Windows Administration hört man immer wieder das Stichwort Powershell. Aber was ist die Powershell eigentlich. Äußerlich gleicht sie der alten CMD mit dem Unterschied, dass die Powershell blau und die CMD schwarz gefärbt ist. Doch im Grunde sind das auch die einzigen Ähnlichkeiten. Denn die Powershell wurde von Microsoft von Grund auf neu entwickelt und sollte damals die CMD ablösen.

Außerdem ist die Powershell nicht nur ein Terminal um ein System zu konfigurieren oder zu steuern, sondern auch eine ausgewachsene Skriptsprache mit Objektorientierten Ansätzen. Powershell Skripte gehen also weit über die bekannten Batch Skripte der CMD hinaus.

Aufgrund dieser Skriptmöglichkeiten, gibt es im Normalfall zwei Möglichkeiten auf die Powershell zuzugreifen. Entweder über die Kommandozeile „Powershell“ oder die „Powershell ISE“. Dies ist eine einfach Programmierumgebung mit autocomplete Funktion zur schnellen Entwicklung von ausgefalleneren Skripts.

Im Folgenden werden ich mich mehr auf die Skriptmöglichkeiten der Powershell konzentrieren, aber alle Befehle und Funktionen können auch ohne Einschränkung in der normalen Powershell Kommandozeile genutzt werden.

Befehle bzw CMDlets

Die Powershell arbeitet mit CMDlets (commandlets gesprochen). Damit man sich die verschiedenen Befehle leichter merken kann, bilden sich die Namen nach einem festen Muster. Es ist immer eine Kombination aus Verb und Nomen. Dadurch ist es sehr leicht zu erkennen, was ein Befehl tut. Beginnt er mit Get- liest er irgendwelche Werte aus. Beginnt er mit Set- ändert er bestimmt Einstellungen und so weiter.

Als erstes Beispiel möchte ich den Get-Command Befehl erklären. Dieser ist immer dann nützlich, wenn man den genauen Namen eines CMDlets nicht kennt. Nutzt man Get-Command ohne einen Parameter, gibt die Powershell alle vorhandenen Befehle aus. Die zwei bekanntesten Parameter sind -Noun und -Verb. Dadurch lassen sich die ausgegebenen Befehle einschränken.

Get-Command -Verb get
# Gibt alle Befehle mit Get aus

Get-Command -Noun Network*
# Gibt alle Befehle die mit "Network" beginnen aus

Natürlich lassen sich die Parameter auch kombinieren.

Get-Command -Verb get -Nount Network*
# Gibt alle Get Befehle die mit "Network" beginnen aus

Wenn man nun den Namen eines Befehls gefunden hat, muss man auch wissen, wie man ihn nutzt. Dabei hilft der Get-Help Befehl. Dieser ist vergleichbar mit der Man-Page bei Linux.

Es kann allerdings sein, dass Get-Help beim ersten mal kein brauchbares Ergebnis ausgibt. Dann gibt es zwei Möglichkeiten. Entweder man aktualisiert die heruntergeladenen Hilfstexte mit Update-Help oder fügt den Parameter -online hinzu. Bei ersterem gleicht Powershell dann die heruntergeladenen Hilfstext mit der Microsoft Dokumentation ab und lädt gegebenenfalls die neuen Hilfstexte herunter. Bei letzterem öffnet sich die Microsoft Dokumentation in einem Browser.

Autocomplete in der Powershell

Eine weitere Möglichkeit sich von der Powershell helfen zu lassen ist die Autocomplete Funktion. Diese gibt es in zwei Ausführungen. Zum einen hat man immer die Möglichkeit ein begonnenes Wort mit Tab vervollständigen zu lassen. Dabei schaut die Powershell welche Buchstaben bereits getippt wurde und ergänzt zu dem ersten Möglichen Wort. Ist dies nicht das gesuchte Ergebnis, kann man erneut Tab drück und die zweite Möglichkeit wird an Stelle der ersten ergänzt. Sollte man einmal zu oft Tab gedrückt haben, kann man mit Shift+Tab wieder einen Schritt zurück gehen.

Umso mehr Buchstaben man tippt umso weniger Vorschläge macht die Powershell, da der gesuchte Begriff weiter eingegrenzt ist. Man muss also abwägen wann es schneller ist zu tippen oder die Autocomplete Funktion zu nutzen. Diese Funktioniert übrigens nicht nur bei Befehlen sondern auch bei Dateipfaden und Parametern.

Noch ausgefeilter ist die Autocomplete Funktion in der Powershell ISE. Dort wird nicht nur das Wort vervollständigt sondern automatisch eine List von möglichen Wörtern angezeigt. Dadurch kann man schneller den gesuchten Befehl nutzen. Außerdem werden in der ISE bei einer Variable oder einem Objekt auch gleich die Möglichen Methoden und Attribute angezeigt, wenn man darauf zu greifen möchte.

Sollte in der ISE die Autocomplete Funktion nicht von alleine funktionieren, kann man diese mit Shift+Leertaste aufrufen.

Kommentare in Powershell

Wie in jeder Programmiersprache ist es wichtig Kommentare zu schreiben. Diese dürfen natürlich bei der Ausführung nicht als Befehl interpretiert werden. Dazu nutzt Powershell das #-Zeichen.

# Dies ist ein Kommentar

<# Dies ist 
ein Kommentar
über mehrere Zeilen #>

Variablen in Powershell

Natürlich kann die Powershell auch mit Variablen arbeiten. Eine Besonderheit ist dabei, dass Variablen immer mit einem $-Zeichen beginnen müssen. Die Wertzuweisung funktioniert aber wie bei fast allen anderen Programmiersprachen auch.

$variable1 = 1
$variable2 = "Hallo ich kann etwas speichern"

Der Typ der Variable, also ob es ein Int, Double, String oder Array ist, bildet sich wie bei Python während der Wertzuweisung. Man kann sie aber auch bei der Erstellung schon festlegen.

[string]$var = "Ich kann nur ein String werden"

Natürlich beherrscht die Powershell auch Grundrechenarten.

$var1 = 5
$var2 = 4.6
$var3 = $var1 + $var2 # Ist gleich 9,6

Addiert man zwei Strings, so werden diese zu einem String zusammen gesetzt. Multipliziert man einen String mit einer Zahl, so wird er dementsprechend oft wiederholt. Wichtig ist dabei, dass der String vorne und die Zahl hinten steht. Andersherum entsteht ein Fehler.

$str1 = "Hello"
$str2 = "World"
$str3 = $str1 + $str2 #"Hello World"
$str4 = $str1 * 3 #"HelloHelloHello"

Man kann einer Variable aber nicht nur fester Werte zuweisen, sondern auch den Output eines Befehls.

$var = Get-Command -Verb get

Die Pipeline

Auch wenn man nun den richtigen Befehl gefunden hat, kann es sein, dass der Output immer noch nicht den eigenen Ansprüchen genügt. Um diesen weiter zu filtern gibt es die Pipeline. Mit dieser kann man den Output eines Befehls in einen zweiten Befehl umleiten und somit filtern. Das kann dann wie folgt aussehen.

Get-Command | Out-GridView -PassThru | Get-Help

In dem Beispiel wird mit Get-Command eine Liste aller Befehle generiert. Diese wird mit dem Out-GridView in einer anklickbaren Tabelle aufbereitet. Wählt man nun in der Tabelle ein Befehl aus, wird dieser an Get-Help weiter gegeben und zeigt dann die entsprechende Hilfe-Seite an.

Auf diese Art und Weise lass sich viele Befehle verketten um in Skripten immer nur den Output zu erhalten, den man wirklich braucht.

If und For Schleifen

Möchte man Aktionen abhängig von dem Inhalt einer Variable machen, brauch man in der Programmierung eine If Abfrage. Diese setzt sich in der Powershell ähnlich zusammen wie in C# oder Java, aber mit einem kleinen Unterschied. Man nutzt in der Powershell nicht die Verleichsoperanten <, >, == und != sondern -lt, -gt, -eq und -ne. Das sieht dann wie folgt aus

$var1 = 5
if ($var1 -lt 4)
{
    Write-Host "Kleiner als 4"
}

else if ($var1 -gt 4)
{
    Write-Host "Größer als 4"
}
-lt : less than        : kleiner als         : <
-le : less or equal    : kleiner oder gleich : <=
-eq : equal            : gleich              : ==
-ge : greater or equal : größer oder gleich  : >=
-gt : greater than     : größer als          : >
-ne : not equal        : ungleich            : !=

Möchte man eine gewisse Aktion mehrfach wiederholen, bietet sich eine For-Schleife ein. Diese besitzt ein Zähler und wird solange durchlaufen bis der Zähler den gewünschten Wert erreicht hat.

for ($i = 0; $i < 10; $i += 1)
{
    Write-Host "Hello World"
}

Möchte man eine bestimmte Aktion mit allen Elementen einer List durchführen eignet sich eine ForEach Schleife.

$var1 = 1,4,6,43,6,7,4
ForEach($number in $var1)
{
    Write-Host $number
}

Mit diesen drei Bausteinen, lassen sich viele Aufgaben automatisieren. Man kann zum Beispiel eine Datei mit Namen einlesen und dafür Benutzerkonten anlegen oder ähnliches. Dadurch kann man sich stupide und wiederholende Arbeit schnell vereinfachen.

Kommentare anzeigen

Wir nutzen Cookies

Um die Nutzung der Website zu verbessern, nutzen wir Cookies.
Desweiteren werden Google-Dienste für das schalten von Werbung verwendet. Mit der Nutzung der Website geben Sie ihr Einverständnis.
Sollte die Nutzung von Cookies abgelehnt werden, kann dies Auswirkung auf die Nutzung der Website haben.