Windows-Praxis
Workshop: In der PowerShell mit regulären Ausdrücken arbeiten
Nicht nur Einsteiger in Programmier- und Script-Sprachen, sondern auch viele "gestandene Administratoren" schütteln nur verzweifelt den Kopf, wenn die Rede auf die regulären Ausdrücke kommt. Zu verwirrend scheinen die Hieroglyphen, die schon altgediente Unix-Administratoren einsetzten, um ihren Anwendern zu demonstrieren, wie mächtig das berüchtigte grep-Kommando sein kann - wenn es richtig einsetzt wird. Aber nicht nur bei den Unix-/Linux-Shell-Programmen, sondern auch bei der modernen PowerShell, die fester Bestandteil aller aktuellen Windows-Client- und Server-Betriebssysteme ist, kann mit den regulären Ausdrücken effizient gearbeitet werden. Die PowerShell unterstützt dabei den gesamten Umfang der regulären Ausdrücke, der vom .NET-Framework bereitgestellt wird.
- Reguläre Ausdrücke
Grundsätzlich kein Unterschied: Diese Art von Aufruf bringt das gleiche Ergebnis, unabhängig davon ob der „-like“- oder „-match“- Operator verwendet wird. Erst der Einsatz der regulären Ausdrücke macht einen Unterschied. - Reguläre Ausdrücke
Gezieltere Ausgabe erreicht: Diese Art des Aufrufs macht es möglich, dass nur die Prozesse angezeigt werden, deren Namen mit dem Buchstaben „A“ beginnt. Der „-like“-Operator kann das nicht. - Reguläre Ausdrücke
. Vergleich auf „Wortzeichen“: Die PowerShell kann mit den Zeichenklassen arbeiten, wie sie auch vom Microsoft Framework bereitgestellt und verwendet werden. - Reguläre Ausdrücke
Direkt nach den Ziffern in einer Zeichenkette suchen: Hier zeigt, welchen Unterschied es macht, ob nur nach einem oder mehreren Zeichen gesucht wird, die dem Suchmuster entsprechen. - Reguläre Ausdrücke
Ein eher praxisnahes Beispiel: Durch den Einsatz der regulären Ausdrücke kann eine Eingabe daraufhin überprüft werden, dass nur bestimmte Zeichen/Ziffern und so weiter erlaubt sind. - Reguläre Ausdrücke
Mit den eckigen Klammern können bestimmte Bereiche abgefragt werden: Es ist zu beachten, dass auch hier die Überprüfung stoppt, sobald die erste Übereinstimmung gefunden wurde. - Reguläre Ausdrücke
Grundsätzlich leider nicht case-sensitiv: Wer die Eingaben auch in Bezug auf Groß- und Kleinschreibung untersuchen möchte, der sollte den Operator „-cmatch“ verwenden. - Reguläre Ausdrücke
. Kann durchaus verwirrend sein: Der „Accent Circumflex“ hat unterschiedliche Auswirkung, je nachdem wo er eingesetzt wird. In diesem Fall negiert er das Suchmuster. - Reguläre Ausdrücke
Einige Beispiele aus der Praxis, die zeigen, dass der Administrator unter Einsatz der regulären Ausdrücke sehr viel gezieltere und genauere Ausgaben erhält. - Reguläre Ausdrücke
Auch hier können die regulären Ausdrücke verwendet werden: Ein bestimmter Zweig der Registry („uninstall“ bei der Microsoft Software) wird direkt durchsucht und das entsprechend gefilterte Ergebnis ausgegeben.
Wir erläutern in diesem Beitrag die Grundlagen und zeigen anhand einer ganzen Reihe von Beispielen, dass diese kryptischen Zeichen sehr gut in der Praxis eingesetzt werden können.
Das Arbeitsfeld der regulären Ausdrücke: Vergleichen und Ersetzen
Die regulären Ausdrücke kommen hauptsächlich dann zum Einsatz, wenn es darum geht, Vergleiche durchzuführen oder etwa auch Werte und Zeichen zu ersetzen. Neben den Operatoren zum direkten Vergleich von Werten wie "-eq" (equal) oder -gt (greater than) gehören der sogenannte Ähnlichkeitsoperator "-like" (und "-unlike") sowie der Ersetzungsoperator "-replace" und die Übereinstimmungsoperatoren "-match" und "-unmatch" zur Kategorie der Vergleichsoperatoren.
Von ihnen können sowohl "-replace" als auch "-match" und "-unmatch" mit den regulären Zeichen umgehen, während der "-like"-Operator nur mit dem Wildcard-Zeichen "*" zusammenarbeitet, das für eine beliebige Anzahl von Zeichen steht. So bringen dann auch die folgenden beiden Aufrufe die genau gleiche Ausgabe auf den Bildschirm:
Get-Service | where {$_.status -like "running"}
Get-Service | where {$_.status -match "running"}
Beide Aufrufe zeigen alle auf dem jeweiligen System aktiven (running) Prozesse an. Der Unterschied liegt darin, dass die Vergleiche beim Einsatz von "-match" und den regulären Zeichen weitaus genauer und zielgerichteter durchgeführt werden können. Ein Hinweis ist in diesem Zusammenhang noch wichtig: Diese Art der Abfrage ist nicht Case-Sensitive - das bedeutet, dass hierbei nicht zwischen Groß- und Kleinschreibung unterschieden wird und beide Aufrufe sowohl Prozesse finden, die als "running" gekennzeichnet sind, als auch solche, die beispielsweise als "Running" ausgegeben werden.