首页 > 解决方案 > Select-Object -Property 参数防止在循环中获取对象

问题描述

请帮助我理解为什么我不能在循环中Select-Object使用参数输出对象。-Property

这是示例:

$GPjob = Start-Job -ScriptBlock {Get-Process | Select-Object -First 1}

for ($i = 0 ; $i -lt 200000 ; $i++) {
    if (($GPjob.State -eq 'Completed') -and ($GPjob.HasMoreData)) {
        "Step 1: $(Get-Date) : `$i=$i"
        Receive-Job $GPjob | Select-Object -Property Name
        "Step 2: $(Get-Date) : `$i=$i"
    }
}

步骤 1和步骤 2 行应在其中一个循环Receive-Job内一一执行。$i所以我应该一次看到所有三个输出。Receive-Job但实际上,直到整个循环结束,我才看到步骤 2 的输出。

但是,如果我不使用-Property参数 for Receive-Job,一切都会按预期进行:我会同时看到所有三个输出。

标签: powershell-5.0

解决方案


这种方式出来得更快,但我无法解释为什么。也许这就是 Out-Default 的工作方式。我用 &{ for () } 和 foreach-object 得到了相同的结果。在ise 调试器中,如果我在receive-job 行上设置断点,则在我越过“Step 2”行后立即输出输出。

Receive-Job $GPjob | Select-Object -ExpandProperty Name

推荐阅读