💡 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
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. |