Das Arbeiten mit Texten bzw. mit Strings ist ein häufiger Anwendungsfall in PowerShell Skripten. Zu verstehen, wie Strings konvertiert, verbindet, in Variablen speichert etc. ist deswegen eine grundlegende Fähigkeit, die man haben sollte, um schnell Skripte erstellen zu können.
In diesem Artikel habe ich mich auf die Suche nach den häufigsten Aufgaben gemacht, die man mit PowerShell Strings hat. Anhand von kurzen Beispielen zeige ich Lösungen für die Probleme.
Ich lerne selber noch, deswegen scheut euch nicht, mir bessere Lösungen mitzuteilen. Das hilft mir und weiteren Lesern.
- PowerShell Strings Grundlagen
- Konkatenieren von Strings
- Strings in PowerShell vergleichen
- String Arrays
- String manipulation / Formatting Strings
- Varibalen in Strings
- Zeilenumbruch in Strings
- Teilstrings extrahieren
- Leerzeichen und andere Zeichen am Anfang und Ende entfernen
- Großbuchstaben und kleine Buchstaben umwandeln
- Strings in Strings ersetzen
- Escape Zeichen in Strings
- Ersetzen oder entfernen von Anführungszeichen in Strings
- String in ein int konvertieren
- String in einen Hex String konvertieren
PowerShell Strings Grundlagen
Erstellen einer String Variable
Um einen String in einer PowerShell Variable zu speichern, nutze einfach das Gleichzeichen, wie im Beispiel.
$myVar = "my string"
$myVar # has the value "my string"
Skriptverzeichnis
Es kommt immer mal wieder vor, dass man andere Dateien relativ zum Verzeichnis des eigenen Skriptes referenzieren muss. Um das aktuelle Verzeichnis des Skriptes zu nutzen, gibt es die variable $PSScriptRoot.
$PSScriptRoot
Strings in eine Datei schreiben
So einfach erzeugst du eine Textdatei ‚myText.txt‘ mit dem Inhalt „Hello!“
"Hello!" | Out-File -FilePath ./myText.txt
Konkatenieren von Strings
Es gibt mehrere Möglichkeiten in PowerShell Strings miteinander zu verknüpfen.
Strings addieren
Ein Weg Strings zu verbinden, ist sie mit dem +-Zeichen zu verbinden.
$str1 = "123"
$str2 = "456"
$str1 + $str2 # is "123456"
$str1 + $str2 + "789" # is "123456789"
Write-Host $str1 + $str2 # writes 123 + 456
Write-Host ($str1 + $str2) # writes 123456
Konkatenieren mit der Concat-Methode
Alternativ zum +-Zeichen kann man auch die Concat-Methode verwenden.
$str1= "123"
$str2= "456"
[string]::Concat($str1, $str2,"789") # 123456789
Strings in PowerShell vergleichen
Zu prüfen, ob zwei Strings gleich sind oder ob ein String einen anderen enthält, wird jeder früher oder später tun müssen. Hier findet ihr, wie man es in PowerShell umsetzen kann.
Auf Gleichheit prüfen
Um zu prüfen, ob zwei Strings inhaltlich identisch sind, nutze ‚-eq‘ oder die Equals-Methode.
"abc" -eq "abc" # returns True
"abc" -eq "xyz" # returns False
"abc".Equals("abc") # returns True
"abc".Equals("xyz") # returns False
Prüfen, ob Strings unterschiedlich sind
Um zu prüfen, ob zwei Strings unterschiedlich sind, nutze -ne oder negeiere einen Equals Vergleich mit einem Ausrufezeichen.
"abc" -ne "abc" # returns False
"abc" -ne "xyz" # returns True
!"abc".Equals("abc") # returns False
!"abc".Equals("xyz") # returns True
Prüfen, ob ein String einen anderen enthält
Mit der Contains-Methode kann man herausfinden, ob ein String einen anderen enthält.
"Robert".Contains("ber") # True
!"Robert".Contains("Joe") # True - Robert does not contain Joe
In Strings suchen
Mit like lässt es sich in Strings suchen. Anhand der Beispiele siehst du, wie like funktioniert.
"PowerShell is nice" -like "Pow*" # True
"PowerShell is nice" -like "Pow" # False
"PowerShell is nice" -like "nice" # False
"PowerShell is nice" -like "*nice" # True
String Arrays
Einen String Array erstellen
$fruits = @("orange","banana","apple")
# or
$fruits = "orange","banana","apple"
Über einen String Array iterieren
$fruits = @("orange","banana","apple")
foreach ($fruit in $fruits){
Write-Host $fruit
}
# Writes:
# orange
# banana
# apple
$fruits| % { write-host $_ } # does the same as foreach
Einen Array in einen String umwandeln
$fruits = "orange","banana","apple"
$fruits -join ',' # orange,banana,apple
[system.String]::Join(",", $fruits) # orange,banana,apple
Einen String in einen Array umwandeln
"john,doe".Split(",") # seperator ','
# john
# doe
Einen String Array nach Elementen mit einem Suchstring durchsuchen
$fruits = "orange","banana","apple"
$fruits -match "an"
# orange
# banana
$fruits -notmatch "an"
# apple
Sortieren eines String Arrays
$fruits = "orange","banana","apple","strawberry"
$fruits | sort # apple,banana,orange,strawberry
$fruits | sort -descending # strawberry,orange,banana,apple
Duplikate aus einem String Array entfernen
$fruits = "orange","banana","apple","orange" # 2x orange
$fruits | select -Unique # orange, banana, apple
String manipulation / Formatting Strings
Varibalen in Strings
$firstname = "James"
$lastname = "Bond"
"My name is $firstname $lastname." # My name is James Bond.
'My name is {0} {1}.' -f $firstname, $lastname # My name is James Bond.
Zeilenumbruch in Strings
"Bond,`nJames Bond!"
# Bond,
# James Bond!
Teilstrings extrahieren
$string = '12345'
$string.Substring(0,3) # 123
$string.Substring(0,$string.Length-2) # 123
$string.Substring(1,2) # 23
Leerzeichen und andere Zeichen am Anfang und Ende entfernen
$string = ' 123 '
"-"+$string.Trim() +"-" # '-123-'
"-"+$string.TrimStart()+"-" # '-123 -'
"-"+$string.TrimEnd()+"-" # '- 123-'
$leadingZero = "007"
$leadingZero.TrimStart("0") #7
Großbuchstaben und kleine Buchstaben umwandeln
Mit toUpper() oder toLower(), kann man Großbuchstaben mit kleinen Buchtsaben austauschen bzw. umgekehrt.
"hello".ToUpper() # HELLO
"HELLO".ToLower() # hello
Strings in Strings ersetzen
Mit replace kannst du ein Zeichen oder einen String definierern, der durch ein anderes Zeichen oder einen String ersetzt wird.
$a = "I'm John. Cheers John"
$a -replace "John", "Paul" # I'm Paul. Cheers Paul
Escape Zeichen in Strings
Um einen String zu erstellen, der Zeichen enthält, die eine syntakische Bedeutung in Strings haben, braucht man einen Escape Character. Ein Zeichen das die syntaktische Bedeutung außer Kraft setzt. Für PowerShell Strings kann ein Apostroph dafür genutzt werden.
"She said `"yes`"." # She said "yes".
Ersetzen oder entfernen von Anführungszeichen in Strings
Mit replace kannst du Zeichen ersetzen. Zum Entfernen nutze einfach einen leeren String. Im Beispiel ersetzen wir doppelte Anführungszeichen mit einfachen.
'She said "yes".' -replace '"',"'" # She said 'yes'.
String in ein int konvertieren
Häufig hat man eine Zahl als String und will die Zahl aber als int verwenden, um zum Beispiel weiterzuverarbeiten.
Unten siehst du, wie du mit PowerShell den String in ein int umwandeln kannst.
$number = [int]"123" # int of 123
$number.GetType() # Name = Int32
String in einen Hex String konvertieren
Wenn du einen String in einen Hex String mit PowerShell konvertieren willst, kannst du dich an dem Beispiel orientieren.
$string = "hello"
foreach ($char in $string.ToCharArray()) {
$hexString = $hexString + " " + [System.String]::Format("{0:X}", [System.Convert]::ToUInt32($char))
}
$hexString # 68 65 6C 6C 6F