🔷 PowerShell 7+ Essentials

PS 02: Die Objekt-Pipeline & Get-Member

Verstehe den fundamentalen Unterschied zwischen Unix-Text-Streams und der modernen .NET-Objekt-Pipeline in PowerShell.

💡 1. Das .NET-Objekt-Paradigma: Schluss mit Text-Parsing

In klassischen Shells (Bash, CMD) transportiert die Pipeline (|) unstrukturierten Text. Um Informationen herauszufiltern, muss man grep, awk oder sed einsetzen.

PowerShell revolutioniert dies: In der PowerShell-Pipeline fließen echte .NET-Objekte! Jedes Objekt besitzt strukturierte Eigenschaften (Properties) und ausführbare Methoden (Methods).

# Bash (Textfluss - fehleranfällig):
# ps aux | grep nginx | awk '{print $2}'

# PowerShell (Objektfluss - typensicher & strukturiert):
Get-Process -Name "nginx" | Select-Object -Property Id, CPU, WorkingSet64
🏭 Didaktische Analogie: Fließband mit Werkstücken statt Papierstreifen

Stell dir ein Industrie-Fließband vor: Auf einem Unix-Fließband liegt ein langer, bedruckter Papierstreifen, aus dem du mit der Schere Wörter herausschneiden musst. Auf dem PowerShell-Fließband fährt ein präzises Bauteil mit Typenschild, Drehknöpfen (Methoden) und Messuhren (Eigenschaften). Du kannst direkt jeden Messwert ablesen, ohne den Text parsen zu müssen!

🔬 2. Der Röntgenblick: Get-Member (Alias: gm)

Mit dem Cmdlet Get-Member kannst du jedes Objekt zur Laufzeit inspizieren, um herauszufinden, welcher .NET-Klasse es angehört und welche Fähigkeiten es besitzt:

# Untersuche das Prozess-Objekt:
Get-Process | Get-Member

# Nur Eigenschaften (Properties) anzeigen:
Get-Process | Get-Member -MemberType Property

# Nur Methoden anzeigen:
Get-Date | Get-Member -MemberType Method

⚙️ 3. .NET-Methoden & Statische Klassen

Da alles auf dem modernen .NET Core Runtime basiert, kannst du direkt Methoden auf Objekten aufrufen oder statische .NET-Klassen nutzen:

# Instanz-Methoden (auf einem Objekt):
$text = "   PowerShell 7 Core   "
$sauber = $text.Trim().ToUpper().Replace(" ", "_") # "POWERSHELL_7_CORE"

# Statische Methoden über doppelte Doppelpunkte [Klasse]::Methode():
[Math]::Round(123.4567, 2)     # 123.46
[DateTime]::UtcNow              # Aktuelle UTC-Zeit
[System.IO.Path]::GetExtension("config.json") # ".json"

# Integrierte PowerShell Byte-Multiplikatoren:
# 1KB, 1MB, 1GB, 1TB, 1PB
$memoryMB = [Math]::Round(104857600 / 1MB, 2) # 100 MB

📑 4. Cheat-Sheet: Objekt-Inspektion & Pipeline

Befehl / Syntax Beispiel Zweck
Get-Member $var | Get-Member Zeigt Typ, Properties und Methoden an.
.GetType() $var.GetType().FullName Liefert den exakten .NET Typnamen.
.PSObject.Properties $obj.PSObject.Properties.Name Metadaten-Zugriff auf alle Objekteigenschaften.
[Math]::Round() [Math]::Round($bytes / 1MB, 2) Statische Rundungsmethode der .NET Math-Klasse.
Member-Enumeration (Get-Process).Name Direktes Auslesen einer Eigenschaft über eine ganze Collection.

🎯 Aufgaben & Checkliste in aufgabe.ps1

💻 In Web-IDE öffnen → ← Zurück zu PS 01 Weiter zu PS 03 →