小编Fan*_*hou的帖子

PowerShell:ForEach-Object的神秘-RemainingScripts参数

简短的问题:任何人都有关于ForEach-Object的-RemainingScripts参数的详细信息?

长问题:

我刚从上周开始学习PowerShell,我将通过每个Cmdlet来了解更多细节.基于公共文档,我们知道ForEach-Object可以有Begin-Process-End块,如下所示:

Get-ChildItem | foreach -Begin { "block1";
    $fileCount = $directoryCount = 0} -Process { "block2";
    if ($_.PsIsContainer) {$directoryCount++} else {$fileCount++}} -End {
    "block3"; "$directoryCount directories and $fileCount files"}
Run Code Online (Sandbox Code Playgroud)

预期结果:"block1"和"block3"为1次,对于传入的每个项目重复"block2",并且dir计数/文件计数都是正确的.到现在为止还挺好.

现在,有趣的是,以下命令也起作用并给出完全相同的结果:

Get-ChildItem | foreach { "block1"
    $fileCount = $directoryCount = 0}{ "block2";
    if ($_.PsIsContainer) {$directoryCount++} else {$fileCount++}}{
    "block3"; "$directoryCount directories and $fileCount files"}
Run Code Online (Sandbox Code Playgroud)

只有3个ScriptBlocks传递给foreach.根据手册,第一个进入-Process(位置1).但剩下的2怎么样?根据手册,没有"位置2"的参数.所以我转向Trace-Command,发现后两个脚本块实际上是RemainingScripts,因为"IList with 2 elements".

BIND arg [$fileCount = $directoryCount = 0] to parameter [Process]
BIND arg [System.Management.Automation.ScriptBlock[]] to param [Process] SUCCESSFUL
BIND arg [System.Collections.ArrayList] to …
Run Code Online (Sandbox Code Playgroud)

powershell powershell-3.0

10
推荐指数
1
解决办法
2522
查看次数

标签 统计

powershell ×1

powershell-3.0 ×1