为什么在第二对命令中,在对象输出之前处理Read-Host ?
PS > (1..3).ForEach{ @{ a=$_ } }; Read-Host 'pause1'
Name Value
---- -----
a 1
a 2
a 3
pause1:
PS > (1..3).ForEach{ [PSCustomObject]@{ a=$_ } }; Read-Host 'pause2'
pause2:
a
-
1
2
3
我肯定这一切才刚刚开始。输出[PSCustomObject]的脚本现在必须在看到输出之前完成。在循环之后但在脚本完成之前进入调试器意味着看不到输出。
不改变执行顺序,但管道中的项保持到命令序列完成后才被释放到默认输出(即显示)。
是
- 输入对
Read-Host 'pause2'
cmdlet的响应,并注意该响应添加在管道的末尾:
pause2: Test
a
-
1
2
3
Test
- 为测试添加一些时间戳:
(1..3).ForEach{ [PSCustomObject]@{ a=(Get-Date).ToString('HH:mm:ss.fffffff') } } ; Read-Host (Get-Date).ToString('HH:mm:ss.fffffff')
15:41:29.1931049:
a
-
15:41:29.1916159
15:41:29.1918194
15:41:29.1919053
解决方案通过使用特定的Write-Host
cmdlet显式强制立即显示管道项:
(1..3).ForEach{ [PSCustomObject]@{ a=$_ } } |Write-Host; Read-Host 'pause2'
@{a=1}
@{a=2}
@{a=3}
pause2: