Aufgaben-Python/courses/powershell/06_schleifen_und_pipeline_durchlaeufe/aufgabe.ps1

77 lines
3.1 KiB
PowerShell

<#
.SYNOPSIS
PS 06: Schleifen (foreach, while & Pipeline)
.DESCRIPTION
Schleifen-Statements, Pipeline-Streaming mit ForEach-Object, Retry-Muster und Steuerung.
#>
# 🎯 TEILZIEL 1 (TODO 1): Get-FilteredEvenSquares - Quadrate gerader Zahlen
# Nimm ein Array von ganzen Zahlen $Numbers ([int[]]).
# Durchlaufe das Array mit einer 'foreach'-Schleife:
# - Überspringe ungerade Zahlen ($n % 2 -ne 0) mit dem 'continue'-Befehl.
# - Quadriere jede gerade Zahl ($n * $n) und sammle das Ergebnis.
# Gib das Array der quadrierten geraden Zahlen zurück.
# Falls $Numbers leer oder $null ist, gib @() zurück.
function Get-FilteredEvenSquares {
param(
[int[]]$Numbers
)
# TODO: foreach-Schleife mit continue für ungerade Zahlen
return @()
}
# 🎯 TEILZIEL 2 (TODO 2): Invoke-StreamingPipelineMetrics - Pipeline-Lifecycle Blöcke
# Nimm ein Array von Zahlen $DataStream ([double[]]).
# Verarbeite die Zahlen mittels Pipeline und ForEach-Object mit -Begin, -Process und -End:
# - Begin: Initialisiere $count = 0 und $sum = 0.0
# - Process: Erhöhe $count um 1 und addiere $_ zu $sum
# - End: Berechne den Durchschnitt ($sum / $count) gerundet auf 2 Dezimalstellen
# Gib ein [PSCustomObject] mit { Count = $count; TotalSum = $sum; Average = $avg } zurück.
# Falls $DataStream leer ist, gib Count=0, TotalSum=0, Average=0 zurück.
function Invoke-StreamingPipelineMetrics {
param(
[double[]]$DataStream
)
# TODO: Pipeline-Verarbeitung mit ForEach-Object
return [PSCustomObject]@{
Count = 0
TotalSum = 0.0
Average = 0.0
}
}
# 🎯 TEILZIEL 3 (TODO 3): Invoke-RetryOperation - Wiederholungsschleife
# Simuliere einen Retry-Vorgang mit einer 'do { ... } until (...)'-Schleife:
# Parameter:
# - $MaxAttempts: Maximale Anzahl von Versuchen ([int], z.B. 3)
# - $SuccessOnAttempt: Bei welchem Versuch die Operation erfolgreich ist ([int], z.B. 2)
# Die Schleife soll in jedem Durchlauf $attempts um 1 erhöhen.
# Wenn $attempts gleich $SuccessOnAttempt ist, setze $isSuccess = $true.
# Die Schleife endet, wenn $isSuccess $true ist ODER $attempts >= $MaxAttempts erreicht ist.
# Gib ein Hashtable @{ Attempts = $attempts; IsSuccess = $isSuccess } zurück.
function Invoke-RetryOperation {
param(
[int]$MaxAttempts,
[int]$SuccessOnAttempt
)
# TODO: do..until Schleife implementieren
return @{
Attempts = 0
IsSuccess = $false
}
}
# 🎯 TEILZIEL 4 (TODO 4): Find-FirstMatchingServer - Vorzeitiger Abbruch mit break
# Nimm ein Array von Server-Namen $Servers ([string[]]) und einen Präfix-String $Prefix.
# Durchlaufe die Serverliste mit 'foreach':
# - Sobald ein Servername mit $Prefix beginnt (z.B. $server.StartsWith($Prefix) oder $server -like "$Prefix*"),
# speichere diesen Server und beende die Schleife SOFORT mit 'break'.
# Gib den gefundenen Servernamen zurück (oder $null, falls kein Server passte oder die Liste leer ist).
function Find-FirstMatchingServer {
param(
[string[]]$Servers,
[string]$Prefix
)
# TODO: foreach mit break beim ersten Treffer
return $null
}