Tags: PowerShell, Scripts
Zu den häufigen Aufgaben beim Schreiben von Scripts gehört das Ersetzen von Zeichenketten, wobei meistens nur ein Teil des Strings ausgetauscht werden soll. PowerShell sieht dafür zwei Varianten vor, nämlich replace als Methode und als Operator. Erstere lässt sich einfacher nutzen, wogegen der Operator mächtiger ist.
Egal ob es um die Auswertung von Log-Files oder um die Umbenennung von Dateien geht, das Ersetzen von Zeichenketten ist eine häufig genutzte Operation.
Replace-Methode
Wenn man einen String durch eine konstante Zeichenkette ersetzen möchte, dann bietet sich die Methode replace() an, über die jedes String-Objekt verfügt. Als ersten Parameter übergibt man ihr die Zeichenkette, die ersetzt werden soll, und als zweiten jene, der an ihre Stelle treten soll:
"Arbeiten mit PowerShell".Replace('Arbeiten', 'Spaß')
Dieses Beispiel ersetzt "Arbeiten" durch "Spaß", und entsprechend ist das Ergebnis "Spaß mit PowerShell".
Wie man hier erkennen kann, muss man die ursprüngliche Zeichenkette nicht in einer Variablen speichern, vielmehr ist die Methode direkt für den String verfügbar. Folgende Fleißaufgabe kann man sich also sparen:
$s = "Arbeiten mit PowerShell"
$s.Replace('Arbeiten','Spaß')
Möchte man einen Teil-String löschen, dann ersetzt man diesen einfach durch die leere Zeichenkette:
"Arbeiten mit PowerShell".Replace('Arbeiten mit ', '')
Bei diesem Aufruf bliebe nur mehr "PowerShell" übrig.
Möchte man mehrere Abschnitte in einem String ersetzen, dann kann man replace() in einem Ausdruck mehrfach hintereinander aufrufen:
"Arbeiten mit PowerShell".Replace('Arbeiten','Spaß').Replace('PowerShell', VBScript')
Das Ergebnis lautet in diesem Fall erwartungsgemäß "Spaß mit VBScript".
Replace-Operator
Wie gesehen, ist die Replace-Methode sehr einfach zu nutzen, aber sie unterstützt keine Wildcards oder reguläre Ausdrücke. Benötigt man diese, dann muss man zum Operator greifen.
Anstatt des doppelten Aufrufs der Methode wie im letzten Beispiel oben könnte man sich mit einem regulären Ausdruck so behelfen:
"Arbeiten mit PowerShell" `
-Replace 'Arbeiten(\w+)PowerShell', 'Spaß $1 VBScript'
Man beachte hier, dass der reguläre Ausdruck in einfachen Anführungszeichen stehen muss, weil sonst bereits die Shell $1 expandieren würde und die Regex-Engine nur mehr eine leere Zeichenkette zu sehen bekäme.
Zur Verwendung von RegEx in PowerShell siehe auch diesen Beitrag.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- WhatIf, Confirm und Force: Ausführung von PowerShell-Cmdlets steuern
- ScriptRunner Portal Edition R5: Konfiguration von Abfragen, OpenID-Support, Web-API statt IIS
- ScriptRunner Portal Edition R4: Support für Microsoft Graph, überarbeitetes Portal, zentrale Execution-Policy
- Microsoft Graph: Einheitliches (PowerShell)-API für Microsofts Cloud-Dienste
- PowerShell 7: Preview 7.1, Update für Secret Management und Visual Studio Code
Weitere Links