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 erkannt
Schleifen
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, 25
Arrays
$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 c
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.2025
Merke
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 (...) { ... }
Aufgabe
Zähle die Wörter eines Satzes mit einer Hashtable und gib sie sortiert aus.