微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

重用进程块

如何解决重用进程块

是否可以重用process块中的end块?
我有一个(复杂的)脚本,我想在其中处理 end 块中的一些其他项目,就像处理所有其他管道项目一样,例如:

function Test {
    [CmdletBinding()] param(
        [Parameter(ValueFromPipeLine = $True)]$InputObject
    )
    begin {
        $Index = 0
    }
    process {
        write-host ($Index++) $InputObject
    }
    end {
        'd'..'f' | Process # Wishful thinking,but obvIoUsly not allowed
    }
}

'a'..'c' | Test

此示例的预期输出

0 a
1 b
2 c
3 d
4 e
5 f

Afaik,不可能从 process调用 end 块。 为了解决这个问题,我在 begin 块中创建了一个辅助函数

function Test {
    [CmdletBinding()] param(
        [Parameter(ValueFromPipeLine = $True)]$InputObject
    )
    begin {
        $Index = 0
        function ProcessItem($Item) {
            write-host ($Index++) $Item
        }
    }
    process {
        ProcessItem $InputObject
    }
    end {
        'd'..'f' |% { ProcessItem $_ }
    }
}

问题在于函数中的所有变量(如上例中的 $Index)现在将在不同的(函数)范围内运行,这意味着我必须更改所有应该通常在脚本范围内运行类似于:write-host ($Script:Value++) $Itemwrite-host (([ref]$Index).Value++) $Item内容,这不太清楚且更难以维护。

有没有办法调用process块中的end块?
如果没有,解决此问题的正确方法是什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。