首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何开始/处理/结束,以节省对前景的需求?参数还是需要的,不是吗?

如何开始/处理/结束,以节省对前景的需求?参数还是需要的,不是吗?
EN

Stack Overflow用户
提问于 2018-01-19 18:37:43
回答 1查看 749关注 0票数 6

我了解到,使用begin/ process /end,流程部分对管道中的每个对象运行多次。所以如果我有这样的功能:

代码语言:javascript
复制
function Test-BeginProcessEnd {
    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true, ValueFromPipeline=$True)]
        [string]$myName     
    )
    begin {}
    process {
        Write-Host $myName
    }
    end {}
}

我可以向它输送一个数组,就像这样,它处理每个对象:

代码语言:javascript
复制
PS C:\> @('aaa','bbb') | Test-BeginProcessEnd
aaa
bbb
PS C:\>

但是,如果我试图在命令行中使用这个参数,我只能传递它一个字符串,所以我可以:

代码语言:javascript
复制
PS C:\> Test-BeginProcessEnd -myName 'aaa'
aaa
PS C:\>

但我做不到:

代码语言:javascript
复制
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 : ParameterArgumentTransformationError,Test-BeginProcessEnd
PS C:\>

显然,我希望参数用法与通过管道使用的参数相同,因此我必须将函数更改为:

代码语言:javascript
复制
function Test-BeginProcessEnd
{
    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true, ValueFromPipeline=$True)]
        [string[]]$myNames      
    )
    begin {}
    process {
        foreach ($name in $myNames) {
            Write-Host $name
        }
    }
    end {}
}

因此,无论如何,我不得不使用foreach,而Process部分的循环功能并没有帮助我。

我错过了什么吗?我看不出它有什么用!谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2018-01-19 18:44:20

BEGIN-PROCESS-END结构用于脚本/高级函数,其中(a)您希望能够将数据输送到它,(b)在处理整个数据集之前(BEGIN)和/或(END)之后(相对于管道中的每个单独项之前或之后),您想要做的事情。如果将单个值传递给使用foreach处理数组的高级函数,则它将单个值视为一个项的数组;管道实际上是这样做的--但对于管道,它不需要重新加载每个项的cmdlet。这就是为什么您可以编写脚本/高级函数,这些脚本/高级函数可以在管道中使用,也可以作为“独立”进程使用。这并不是因为PROCESS导致循环,而是因为它能够有效地处理从管道中输入的值。如果您想处理管道以外传递给它的多个值,您需要自己管理循环--正如您已经发现的那样。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48347560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档