我了解到,对于管道中的每个对象,通过开始/处理/结束,处理部分运行多次。所以如果我有一个这样的函数:
function Test-BeginProcessEnd {
[cmdletbinding()]
Param(
[Parameter(Mandatory=$true, ValueFromPipeline=$True)]
[string]$myName
)
begin {}
process {
Write-Host $myName
}
end {}
}
Run Code Online (Sandbox Code Playgroud)
我可以通过管道将数组传递给它,如下所示,它会处理每个对象:
PS C:\> @('aaa','bbb') | Test-BeginProcessEnd
aaa
bbb
PS C:\>
Run Code Online (Sandbox Code Playgroud)
但是如果我尝试在命令行中使用该参数,我只能向它传递 1 个字符串,所以我可以这样做:
PS C:\> Test-BeginProcessEnd -myName 'aaa'
aaa
PS C:\>
Run Code Online (Sandbox Code Playgroud)
但我不能这样做:
PS C:\> Test-BeginProcessEnd -myName @('aaa','bbb')
Test-BeginProcessEnd : Cannot process argument transformation on parameter 'myName'. Cannot convert value to type
System.String.
At line:1 char:30
+ Test-BeginProcessEnd -myName @('aaa','bbb')
+ ~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Test-BeginProcessEnd], ParameterBindingArgumentTransformationException
+ FullyQualifiedErrorId …Run Code Online (Sandbox Code Playgroud) powershell ×1