小编abe*_*gus的帖子

begin/process/end 如何省去 foreach 的需要?仍然需要参数不是吗?

我了解到,对于管道中的每个对象,通过开始/处理/结束,处理部分运行多次。所以如果我有一个这样的函数:

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

8
推荐指数
1
解决办法
1195
查看次数

标签 统计

powershell ×1