<# .SYNOPSIS PS 10: REST-APIs, JSON, CSV & XML Datenpipelines .DESCRIPTION Lerne moderne Datenverarbeitung und Web-APIs in PowerShell 7+: - Invoke-RestMethod mit Headern & Bearer-Authentifizierung - ConvertFrom-Json und ConvertTo-Json mit -Depth - Export-Csv / ConvertTo-Csv ohne Typ-Header - XML-Verarbeitung mit dem [xml]-Typbeschleuniger #> # 🎯 TEILZIEL 1 (TODO 1): Get-RestApiData <# .DESCRIPTION Führt einen REST-API Request mit `Invoke-RestMethod` aus. Unterstützt HTTP-Methoden (GET, POST, etc.) und optionale Bearer-Token Authentifizierung. .OUTPUTS Das von Invoke-RestMethod deserialisierte Objekt #> function Get-RestApiData { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$Uri, [Parameter()] [ValidateSet('GET', 'POST', 'PUT', 'DELETE', 'PATCH')] [string]$Method = 'GET', [Parameter()] [string]$BearerToken = $null, [Parameter()] [hashtable]$Body = $null ) # TODO: # 1. Erstelle eine Header-Hashtable mit 'Content-Type' = 'application/json'. # 2. Füge 'Authorization' = "Bearer $BearerToken" hinzu, falls $BearerToken gesetzt ist. # 3. Führe Invoke-RestMethod aus (mit -Body ($Body | ConvertTo-Json) falls $Body übergeben wurde). # 4. Gib das Ergebnis zurück. return $null } # 🎯 TEILZIEL 2 (TODO 2): Convert-JsonToCsvReport <# .DESCRIPTION Nimmt einen JSON-String entgegen, filtert bestimmte Eigenschaften und erzeugt einen wohlgeformten CSV-String (ohne #TYPE Metadaten-Zeile). .OUTPUTS [string[]] Die CSV-Zeilen #> function Convert-JsonToCsvReport { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$JsonString, [Parameter()] [string[]]$SelectedProperties = @(), [Parameter()] [string]$Delimiter = ';' ) # TODO: # 1. Konvertiere $JsonString mit ConvertFrom-Json in Objekte. # 2. Wähle mit Select-Object $SelectedProperties aus (falls übergeben). # 3. Konvertiere in CSV mit ConvertTo-Csv -NoTypeInformation -Delimiter $Delimiter. return @() } # 🎯 TEILZIEL 3 (TODO 3): Format-DeepNestedConfig <# .DESCRIPTION Konvertiert ein tief verschachteltes Konfigurationsobjekt verlustfrei in JSON unter expliziter Angabe von -Depth (verhindert das Abschneiden tiefer Ebenen). .OUTPUTS [PSCustomObject]@{ JsonString = [string] ParsedBack = [object] IsValid = [bool] } #> function Format-DeepNestedConfig { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [object]$ConfigObject, [Parameter()] [ValidateRange(2, 50)] [int]$Depth = 10 ) # TODO: # 1. Serialisiere $ConfigObject zu JSON mit ConvertTo-Json -Depth $Depth. # 2. Deserialisiere den JSON-String wieder mit ConvertFrom-Json. # 3. Gib ein [PSCustomObject] mit JsonString, ParsedBack und IsValid ($true) zurück. return $null } # 🎯 TEILZIEL 4 (TODO 4): Parse-XmlServerManifest <# .DESCRIPTION Parst ein XML-Manifest mit Serverdefinitionen und extrahiert strukturierte PSCustomObjects. Beispiel XML: 443 5432 .OUTPUTS Array von [PSCustomObject] mit Eigenschaften: Name, Role, Port ([int]), Environment #> function Parse-XmlServerManifest { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$XmlContent ) # TODO: # 1. Konvertiere $XmlContent in ein [xml]-Dokument. # 2. Ermittle das Environment-Attribut aus dem Root-Element. # 3. Iteriere über alle -Knoten und erzeuge für jeden ein [PSCustomObject]@{ # Name = ...; Role = ...; Port = [int]...; Environment = ... # } return @() }