重用进程块

问题描述

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