Tags: Datei-Management, PowerShell
Bei der Ausgabe von Sonderzeichen wie Zeilenumbrüchen oder Tabulatoren beschreitet PowerShell eigene Wege. Das gilt auch für lange Code-Zeilen, wenn diese der besseren Darstellung wegen unterteilt werden sollen. Hier ist ein Fortsetzungszeichen nur in einigen Fällen nötig.
Während die meisten Programmiersprachen für die Ausgabe von Sonderzeichen einen Backslash '\' voranstellen, verwendet PowerShell dafür den umgekehrten Apostroph ("Backtick"). Also anstatt wie in Javascript oder PHP \n bzw. \r, verwendet man `n bzw. `r:
"Fehler " + $ErrNum + ": " + $ErrString + "`n" >> myapp.log
Dieses Beispiel könnte aus einem Code-Abschnitt stammen, der auftretende Fehler in eine Log-Datei schreibt.
Der eigentliche Zeilenvorschub besteht dabei in einem `n, allerdings kann dieses unter Umständen nicht ausreichen, je nach nachdem wo man die Ausgabedatei anschließend öffnet. So ignoriert etwa Notepad einen solchen einfachen Umbruch. Daher sollte man in diesem Fall den Zeilenvorschub mit dem Wagenrücklauf `r kombinieren:
"Fehler " + $ErrNum + ": " + $ErrString + "`r`n" > myapp.log
Neben den beiden genannten Zeichen kennt PowerShell noch weitere, die durch einen führenden umgekehrten Apostroph dargestellt werden:
`0 | Null |
`a | Alert (Klang) |
`b | Rücktaste |
`f | Seitenvorschub (für den Drucker) |
`t | Horizontaler Tabulator |
`v | Vertikaler Tabulator |
Lange Code-Zeilen umbrechen
Während etwa Javascript oder PHP kein eigenes Fortsetzungszeichen beim Umbruch von Code-Zeilen verwenden, übernimmt in PowerShell erneut der Backtick diese Aufgabe:
Compare-VM -ComputerName H2012R2-1 -Name WebServer-VM `
-DestinationHost H2012R2-2
Allerdings benötigt man den Apostroph etwa nur, wenn man eine Zeile - wie oben - zwischen den Parametern eines Cmdlets oder innerhalb eines Strings trennt:
"Das ist ein Test, " `
+ "und noch ein Test"
Hingegen kann man Code nach einer Pipe, einer Zuweisung (also "="), einem Komma oder einem Semikolon ohne Verwendung eines Fortsetzungszeichens umbrechen. Die vier genannten Zeichen verbleiben auf dem Ende der Zeile, anschließend kann man einfach mit der Eingabetaste fortsetzen:
Get-ADGroup -Filter "GroupScope -eq 'DomainLocal'" |
Get-ADGroupMember | where {$_.ObjectClass -eq "user"}
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
Weitere Links