在 PowerShell 中,管道中 cmdlet 的执行顺序似乎没有以明显的方式执行。似乎不是每个 cmdlet 执行然后将结果传递给管道中的下一个 cmdlet,而是在执行前一个 cmdlet 完成之前将 cmdlet 的各个输出对象传递给下一个 cmdlet 的输入。以下证实了这种行为:
1..5 | %{ Write-Host $_; $_ } | %{ Write-Host ([char]($_ + 64)) }
印刷
1
A
2
B
3
C
4
D
5
E
似乎正在发生的事情是ForEach-Object
cmdlet 的每次执行都将在迭代之前执行其脚本块和其管道中的每个后续命令。
这是实际发生的情况吗?这种行为是否记录在任何地方?对于所有迭代 cmdlet ForEach-Object
(例如Where-Object
,等),都是这种情况吗?
(1..5 | %{ Write-Host $_; $_ }) | %{ Write-Host ([char]($_ + 64)) }
我知道我可以将片段包装在表达式 (整个集合到管道中的下一个命令?