如何解决重用进程块
是否可以重用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++) $Item
或 write-host (([ref]$Index).Value++) $Item
的内容,这不太清楚且更难以维护。
有没有办法调用process
块中的end
块?
如果没有,解决此问题的正确方法是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。