问题描述
是否可以重用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 (将#修改为@)