EMZETT.
Login

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 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 -Unique

Ausgabe:

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

Hinweis

+= 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 Parameter

Ausgabe:

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 (...) { ... }

Übungsaufgabe

Zähle die Wörter eines Satzes mit einer Hashtable und gib sie sortiert aus.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Die Pipeline und Objekte

Weiter: Funktionen, Parameter und Fehlerbehandlung

Alle Kapitel: PowerShell im Überblick