Kurz: status = if (punkte -ge 50) { “bestanden” } else { “durchgefallen” } # if als Ausdruck status ergebnis = $punkte -gt 50 ? “über 50” .
Teil des Kurses PowerShell
Kapitel 4 von 8 im Kurs PowerShell. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.
Bedingungen
$punkte = 78
if ($punkte -ge 90) { "sehr gut" }
elseif ($punkte -ge 75) { "gut" }
else { "weiter üben" }
$status = if ($punkte -ge 50) { "bestanden" } else { "durchgefallen" } # if als Ausdruck
$status
$ergebnis = $punkte -gt 50 ? "über 50" : "bis 50" # ternär (PowerShell 7)
$ergebnis
$name = $null
$name ?? "Gast" # Null-Coalescing (7)
$name ??= "gesetzt"; $name
switch ($punkte) {
{ $_ -ge 90 } { "A"; break }
{ $_ -ge 75 } { "B"; break }
default { "C" }
}
switch -Wildcard ("datei.txt") {
"*.txt" { "Textdatei" }
"*.md" { "Markdown" }
}
switch -Regex ("2025-03-15") { '^\d{4}-\d{2}' { "Datum erkannt" } }Ausgabe:
gut
bestanden
über 50
Gast
gesetzt
B
Textdatei
Datum erkanntSchleifen
for ($i = 1; $i -le 3; $i++) { Write-Output "i=$i" }
foreach ($f in "rot", "grün", "blau") { Write-Output $f }
$n = 3
while ($n -gt 0) { $n; $n-- }
do { $n++ } while ($n -lt 3)
$n
1..10 | ForEach-Object {
if ($_ % 2 -eq 0) { return } # in ForEach-Object wirkt return wie continue
if ($_ -gt 7) { return }
$_
}
foreach ($z in 1..10) {
if ($z % 2 -eq 0) { continue }
if ($z -gt 7) { break }
$z
}
"Quadrate: " + ((1..5 | ForEach-Object { $_ * $_ }) -join ", ")Ausgabe:
i=1
i=2
i=3
rot
grün
blau
3
2
1
3
1
3
5
7
1
3
5
7
Quadrate: 1, 4, 9, 16, 25Arrays
$z = 5, 3, 9, 1 # Komma erzeugt ein Array
$a = @(5, 3, 9, 1)
$leer = @()
$z.Length; $z[0]; $z[-1]; $z[1..2]; $z.Count
$z += 7 # erzeugt intern ein neues Array!
($z | Sort-Object) -join ","
($z | Sort-Object -Descending) -join ","
$z -contains 9; $z -join " "
($z | Where-Object { $_ -gt 4 }) -join ","
($z | Measure-Object -Sum -Average -Maximum -Minimum | ForEach-Object { "$($_.Sum) $($_.Average) $($_.Maximum) $($_.Minimum)" })
[array]::Reverse($z); $z -join ","
$z[2] = 100; $z -join ","
(1..5) -join ""
@(1, 2) + @(3, 4) -join ","
,@(1, 2) | ForEach-Object { $_.Count }
$matrix = @(@(1, 2), @(3, 4)); $matrix[1][0]
$liste = [System.Collections.Generic.List[string]]::new()
$liste.Add("a"); $liste.Add("b"); $liste.Remove("a"); $liste.Count
"a", "b", "a", "c" | Select-Object -UniqueAusgabe:
4
5
1
3
9
4
1,3,5,7,9
9,7,5,3,1
True
5 3 9 1 7
5,9,7
25 5 9 1
7,1,9,3,5
7,1,100,3,5
12345
1,2,3,4
2
3
True
1
a
b
cHinweis
+=an einem Array erzeugt jedes Mal ein neues Array: bei vielen Elementen langsam. Nutze[System.Collections.Generic.List[T]]oder sammle Ergebnisse aus einer Schleife:$ergebnis = foreach (...) { ... }.
Hashtables
$alter = @{ Mia = 17; Tom = 25; Zoe = 31 }
$alter["Ben"] = 9
$alter.Zoe
$alter.ContainsKey("Tom"); $alter.Count
$alter.Remove("Tom")
$alter.Keys | Sort-Object
($alter.GetEnumerator() | Sort-Object Name | ForEach-Object { "$($_.Name)=$($_.Value)" }) -join ", "
$geordnet = [ordered]@{ eins = 1; zwei = 2; drei = 3 }
$geordnet.Keys -join ","
$person = @{ Name = "Mia"; Hobbys = @("Lesen", "Judo") }
$person.Hobbys[1]
$obj = [pscustomobject]$person
$obj.Name
$zaehler = @{}
foreach ($c in "mississippi".ToCharArray()) { $zaehler[$c] = 1 + [int]$zaehler[$c] }
($zaehler.GetEnumerator() | Sort-Object Name | ForEach-Object { "$($_.Name):$($_.Value)" }) -join " "
@{ a = 1 }.GetType().Name
$param = @{ Year = 2025; Month = 3; Day = 15; Format = "dd.MM.yyyy" }
Get-Date @param # Splatting: Hashtable als ParameterAusgabe:
31
True
4
Ben
Mia
Zoe
Ben=9, Mia=17, Zoe=31
eins,zwei,drei
Judo
Mia
i:4 m:1 p:2 s:4
Hashtable
15.03.2025Merke
if/elseif/else,switch(mit-Wildcard,-Regex), ternär? :und??in PowerShell 7- Schleifen:
for,foreach,while,do,ForEach-Object;break/continue - Arrays
@(), Indizes ab 0,+=erzeugt neue Arrays;List[T]für viele Elemente - Hashtables
@{ Key = Wert },[ordered], Splatting@param - Skriptblock-Ergebnisse sammeln mit
$x = foreach (...) { ... }
Übungsaufgabe
Zähle die Wörter eines Satzes mit einer Hashtable und gib sie sortiert aus.
Quiz zur Selbstkontrolle
Was bewirkt $arr += 1?
- Ein neues Array mit dem zusätzlichen Element wird erzeugt (richtig)
- Das Element wird vorn eingefügt
- Alle Elemente werden um 1 erhöht
- Ein Fehler
Wie legt man eine Hashtable an?
- @{ Key = Wert } (richtig)
- { Key: Wert }
- [Key => Wert]
- dict()
Wofür ist Splatting?
- Eine Hashtable als Parameter an ein Cmdlet übergeben (richtig)
- Strings teilen
- Objekte kopieren
- Dateien suchen
Weiter im Kurs
Zurück: Die Pipeline und Objekte
Weiter: Funktionen, Parameter und Fehlerbehandlung
Alle Kapitel: PowerShell im Überblick