为什么输出[PSCustomObject]会更改执行顺序 [英] Why would outputting a [PSCustomObject] change execution order

查看:28
本文介绍了为什么输出[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)之前会一直保留到命令序列结束。

证明

  1. 输入对Read-Host 'pause2'cmdlet的响应,请注意,响应将添加到管道末尾:
pause2: Test
a
-
1
2
3
Test
  1. 向测试添加一些时间戳:
(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-Hostcmdlet:

显式强制立即显示管道项目
(1..3).ForEach{ [PSCustomObject]@{ a=$_ } } |Write-Host; Read-Host 'pause2'
@{a=1}
@{a=2}
@{a=3}
pause2:

这篇关于为什么输出[PSCustomObject]会更改执行顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆