为什么输出[PSCustomObject]会更改执行顺序 [英] Why would outputting a [PSCustomObject] change execution order
本文介绍了为什么输出[PSCustomObject]会更改执行顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
为什么在第二对命令中,在输出对象之前处理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]的脚本现在必须完成,才能看到输出。在循环之后但在脚本完成之前进入调试器意味着看不到输出。
推荐答案
不会更改执行顺序,但管道中的项目在释放到默认输出(which is the display)之前会一直保留到命令序列结束。
证明
- 输入对
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:
这篇关于为什么输出[PSCustomObject]会更改执行顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文