这个
process
根据管道中的每个值调用块,逐个传递并处理每个项。当您将数组绑定到参数时,情况并非如此。如果您想平等地处理这两种情况,即从管道绑定和参数绑定,则需要在参数上进行循环。另请参阅
process
from about Functions Advanced Methods
.
Function foo {
[CmdletBinding()]
Param(
[Parameter(ValueFromPipeline, ValueFromPipelineByPropertyName)]
[array] $path
)
Begin {
'---begin---' ; $path
}
Process {
foreach ($item in $path) {
'---Process---' ; $item
}
}
End {
'---End---' ; $path
}
}
顺便说一句,在不使用管道时,值不会被视为多行字符串,它们总是被视为参数的类型,在这种情况下是数组。你总是需要一个循环,无论它是否来自管道。
function foo {
[CmdletBinding()]
Param(
[Parameter(ValueFromPipeline)]
[array] $path
)
Process {
$path.GetType()
}
}
foo 1, 2, 3
1, 2, 3 | foo