【发布时间】:2021-08-09 05:41:26
【问题描述】:
为什么在第二对命令中,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] 的脚本现在必须在看到输出之前完成。在循环之后但在脚本完成之前进入调试器意味着看不到输出。
【问题讨论】:
-
执行顺序没有改变,但是管道中的项目在被释放到默认输出(即显示)之前一直保持到命令行完成。您可以使用特定的
Write-Hostcmdlet 强制显示它们:(1..3).ForEach{ [PSCustomObject]@{ a=$_ } } |Write-Host; Read-Host 'pause2' -
好的,所以不是执行顺序,但是你的回答并没有解决问题,即对象没有被输出到主机,或者解释为什么当对象时行为不同是一个简单的哈希表。另外,如果它是一个不支持管道 ForEach($i in (1..3)){ [PSCustomObject]@{ a=$_ } } |Write-Host; 的 foreach 循环怎么办?读取主机“pause2”?如果您在循环内有一个断点并希望在整个循环完成之前查看每个对象怎么办?
标签: powershell output