PowerShell Strings erklärt anhand vieler Beispiele

PowerShell Strings

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

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

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert