====== ValueFromPipeline ====== class person{ [string]$Name [int]$Age } function Test-Person{ [CmdletBinding()] param( [Parameter(Mandatory=$true, ValueFromPipeline=$true)][person[]]$InputObject ) begin{} process{ foreach($item in $InputObject){ $item.Name "" } } end{} } $a = New-Object -TypeName person $a.Name = "Hello" $b = New-Object -TypeName person $b.Name = "World" $c = @($a, $b) $c | Test-Person Test-Person -InputObject $c Test-Person -InputObject $a Wird der Parameter per Pipeline übergeben, handelt Powershell jedes Object einzeln in der Process-Schleife ab. Die foreach-Schleife läuft in diesem Fall nur ein einziges Mal pro Aufruf. Wird der Parameter InputObject direkt übergeben, greift die foreach-Schleife, die in diesem Fall das Array abläuft. Wichtig: Der Ablauf in der Funktion sieht so aus: - Parameterübergabe (param-Block) - Einmalige Ausführung zu Beginn der Funktion (begin-Block) - Mehrmalige Ausführung, falls per Pipeline mehrere Objekte übergeben wurden (process-Block) - Abschließende Ausführung, zu Ende der Funktion (end-Block) [[https://stackoverflow.com/questions/35289705/how-does-inputobject-parameter-of-the-sort-object-cmdlet-work|Quelle]] {{tag>[Powershell ValueFromPipeline Class]}}