我有一个函数,我使用&
运算符调用应用程序。该应用程序生成多行命令行输出,下载一些文件,并返回一个字符串:
& "app.exe" | Out-Host
$var = ...
return $var
似乎,在app.exe
终止后,控制台上会显示由app.exe
生成的输出。用户没有任何正在下载文件的实时信息。有没有办法在app.exe
运行时不断更新控制台?
答案 0 :(得分:2)
如果已知重定向,许多控制台应用程序会缓冲其输出流。实际上,it is standard behavior of C library。因此,由于重定向而导致app.exe
完成缓存,但不是Out-Host
。
解决方案是不重定向app.exe
的输出,即使重定向外部命令也是如此。因为您应该知道exact条件,当PowerShell不重定向控制台应用程序的输出流并将其直接链接到它们自己的输出流时,这将是交互式PowerShell.exe
会话的控制台。条件是:
Out-Default
。解决方案是将命令包装到脚本块中,并将该脚本阻塞到Out-Default
:
& { & "app.exe" } | Out-Default
另一种解决方案是将Start-Process
cmdlet与-NoNewWindow
和-Wait
参数一起使用:
Start-Process "app.exe" -NoNewWindow -Wait