🔷 PowerShell 7+ Essentials

PS 04: Typisierung, Hashtables & PSCustomObject

Erstelle eigene strukturierte Datenobjekte, meistere .NET-Datentypen, Arrays, Hashtables und das mächtige [PSCustomObject].

💡 1. Strikte Typisierung & Variablen in PowerShell

PowerShell ist dynamisch typisiert, erlaubt aber jederzeit strikte Typ-Deklarationen zur Fehlervermeidung und Validierung:

# Dynamische Variable:
$name = "Server01"

# Strikt typisierte Variablen:
[int]$port = 8080
[bool]$isProduction = $true
[datetime]$erstelltAm = [DateTime]::UtcNow
[double]$auslastung = 84.75
[version]$toolVersion = "7.4.1"

# Typ-Konvertierung (Casting):
[int]"42"       # 42 (Integer)
[bool]1         # True
[bool]0         # False
📦 Didaktische Analogie: Typisierte Container

Eine typisierte Variable wie [int]$zahl ist wie eine präzise geformte Schablone. Versucht jemand, Text wie "abc" hineinzustecken, verweigert PowerShell sofort mit einer klaren Fehlermeldung den Dienst – noch bevor dein Skript im laufenden Betrieb Schaden anrichten kann!

📚 2. Arrays @() & Hashtables @{}

Arrays speichern geordnete Listen, Hashtables speichern Schlüssel-Wert-Paare (Key-Value):

# 1. Array definieren & erweitern:
$serverListe = @("srv-app01", "srv-db01", "srv-web01")
$serverListe += "srv-backup"  # Element anhängen

# 2. Hashtable (Wörterbuch / Key-Value):
$config = @{
    Environment = "Production"
    Port        = 443
    SSL         = $true
}

# Zugriff auf Hashtable:
$config["Port"]      # Indexer-Syntax -> 443
$config.Environment  # Dot-Property-Syntax -> "Production"
$config.Timeout = 30 # Neuen Schlüssel hinzufügen

🌟 3. Eigene strukturierte Objekte mit [PSCustomObject]

Das [PSCustomObject] ist das Herzstück für strukturierte Datenausgabe in PowerShell. Es garantiert Spalten-Reihenfolge und perfekte Pipeline-Kompatibilität:

# Modernes PSCustomObject (seit PS 3.0 Standard):
$serverInfo = [PSCustomObject]@{
    Hostname   = "srv-app01"
    IPAddress  = "192.168.1.10"
    CPUCount   = 8
    IsActive   = $true
    CreatedAt  = (Get-Date)
}

# Ausgabe formatiert tabellarisch oder als JSON:
$serverInfo | Format-Table
$serverInfo | ConvertTo-Json

📑 4. Cheat-Sheet: Datenstrukturen

Konstrukt Syntax Typischer Anwendungsfall
Array @("a", "b", "c") Geordnete Auflistungen von Elementen.
Hashtable @{ Key = "Value" } Konfigurationen, Lookup-Tabellen, Splatting.
PSCustomObject [PSCustomObject]@{ ... } Strukturierte Objekte zur Weitergabe in der Pipeline.
Typ-Annotation [int]$x = 10 Variablen-Typisierung & Validierung.

🎯 Aufgaben & Checkliste in aufgabe.ps1

💻 In Web-IDE öffnen → ← Zurück zu PS 03 Weiter zu Lehrpfad 2: PS 05 →