请帮助我理解为什么我在循环时不能使用-Property参数输出Select-Object对象。
下面是一个例子:
$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、Receive-Job和步骤2行应该在一个$i周期内逐一执行。所以我应该一次看到所有三个输出。但实际上,在整个循环结束之前,我看不到Receive-Job和Step 2的输出。
但是,如果我不对Receive-Job使用-Property参数,一切都会按预期进行:我会同时看到所有三个输出。
发布于 2019-08-25 07:41:01
这种方式出来得更快,但我不能解释为什么。也许这就是Out-Default的工作原理。我用&{ for () }和foreach-object得到了相同的结果。在ise调试器中,如果我在接收作业行上放置了一个断点,那么输出会在我跳过“步骤2”行之后立即输出。
Receive-Job $GPjob | Select-Object -ExpandProperty Name发布于 2019-08-26 01:12:23
我仍然没有找到答案,但我找到了一个变通办法。Format-Table修复了这个迷宫。因此,下一段代码就像预期的那样工作:
$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 | ft
"Step 2: $(Get-Date) : `$i=$i"
}
}https://stackoverflow.com/questions/57642058
复制相似问题