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: