为什么此powershell命令不产生任何输出?

时间:2019-05-06 23:08:45

标签: powershell

让我们考虑a.ps1:

[pscustomobject]@{date=(Get-Date);id="test"}
exit 0

以及执行它的以下两个命令:

命令1:powershell -noprofile -ex unrestricted "& './a.ps1'; exit $lastexitcode"-无输出。

命令2:powershell -noprofile -ex unrestricted "& './a.ps1'; $lastexitcode",输出:

date               id
----               --
07-May-19 11:04:54 test
0

您能解释一下为什么第一个命令不产生输出吗?我希望它能用dateid打印出与第二个命令打印出来的对象相同的对象(但显然不是退出代码)。

注意:我通过cmd.exe和powershell控制台分别使用powershell 5和powershell 6对此进行了测试。在所有情况下,结果都是相同的。

1 个答案:

答案 0 :(得分:2)

最可能的原因是PS强制执行输出处理中的固有延迟。

所有输出都会延迟大约300毫秒,以便在渲染输出时正确显示格式中可变宽度项目的列宽。例如,在Get-ChildItem输出中,您必须能够获得很好的有用表格格式,而标题不会出现在每一行中

如果在输出后不久调用exit,将不会显示输出,因为结果必须经过的输出管道将在数据到达那里之前被解构。要绕过此操作,请在调用Out-String | Write-Host之前强制将结果通过管道传递到Out-Host或仅通过exit强制结果在子进程实际退出之前到达主机。

说明/解释其中一部分的链接:

我本以为有一个内置的帮助主题,但是从about_*主题的粗略浏览中我看不到它。