Windows-Praxis

Workshop: In der PowerShell mit regulären Ausdrücken arbeiten

Sonder- und Escape-Zeichen und natürlich die Hochkommas

Neben der Problematik der Metazeichen, die in verschiedenen Zusammenhängen unterschiedliche Effekte hervorrufen, kommt es gerade beim Vergleich und bei der Untersuchung von Zeichenketten immer wieder zu einem anderen Problem: Die Metazeichen, die von den regulären Ausdrücken verwendet werden, tauchen häufig auch als Sonderzeichen in Zeichenketten auf und wollen dann entsprechend behandelt werden.

Grundsätzlich gilt dabei: Sollen diese Meta- oder Sonderzeichen nicht mit ihrer Funktion aufgerufen werden, so müssen sie maskiert werden. Das gelingt mit dem sogenannten "Escape"-Zeichen, das den regulären Zeichen dann mitteilt, dass sie das nächste Zeichen hinter diesem Escape-Zeichen genau so "betrachten" sollen, wie es da steht:

PS c:\> ‘Der $hell Fisch‘ -match "\$\w+"

True

Name Value

0 $hell

durch die Shell - so konnten wir hier erreichen, dass das Dollarzeichen auch als solches gesehen wird und die Shell nicht versucht, hier den Inhalt der Variablen "$hell" einzusetzen. Sie können den Unterschied leicht erkennen, wenn Sie diese Form der Eingabe ausprobieren:

PS c:\> "Der $hell Fisch" -match "\$\w+"False

Haben Sie zuvor einen anderen Aufruf mit dem -match-Operator ausgeführt, so kann es Ihnen allerdings jetzt passieren, dass Sie den vorherigen Wert in $matches finden. Besetzen Sie also sicherheitshalber diese Variable mit einem Leerstring in der folgenden Form, bevor Sie dieses Experiment ausführen:

$matches=""

Die Möglichkeiten, die Ihnen mit der PowerShell und unter Einsatz von regulären Zeichen zur Verfügung stehen, sind enorm - also haben Sie keine Scheu und probieren Sie diese mithilfe unseres Workshops einfach aus. Es gibt noch viel mehr Einzelheiten, Sonderzeichen und Tricks zu zeigen, aber das würde den Rahmen dieses Artikels deutlich sprengen.

Zum Abschluss haben wir hier noch vier praxisnahe Beispiele herausgesucht. Überlegen Sie zunächst, was diese Aufrufe wohl anzeigen werden, und probieren Sie diese aus. In unserer Bilderstrecke können Sie dann auch Aufruf und Ausführung dieser Aufrufe sehen, wie sie auf unseren Testsystemen unter Windows 7 und Windows 8 abgelaufen sind:

dir c:\windows | where {$_.name -match "\s"}

(\s vergleicht auf "Whitespaces - also Leerzeichen und so weiter)

get-process [bw]*

get-service | where {$_.name -match "\d{1}"}

HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\kb[0-9]*

In unserer Bilderstrecke können Sie dann auch Aufruf und Ausführung dieser Aufrufe sehen, wie sie auf unseren Testsystemen unter Windows 7 und Windows 8 abgelaufen sind. (mje)