Powershell 是主机缓冲吗?
我有一个函数,在这里我用Powershell 是主机缓冲吗?,powershell,Powershell,我有一个函数,在这里我用和操作符调用应用程序。应用程序生成多个命令行输出,下载一些文件,并返回字符串: & "app.exe" | Out-Host $var = ... return $var 似乎只有在app.exe终止后,app.exe生成的输出才会出现在控制台上。用户没有任何正在下载的文件的实时信息。当app.exe运行时,是否有办法持续更新控制台?许多控制台应用程序缓冲其输出流(如果已知其被重定向)。事实上因此,缓冲是由app.exe完成的,因为重定向,而不是由Out主机完成
和操作符调用应用程序。应用程序生成多个命令行输出,下载一些文件,并返回字符串:
& "app.exe" | Out-Host
$var = ...
return $var
似乎只有在app.exe
终止后,app.exe
生成的输出才会出现在控制台上。用户没有任何正在下载的文件的实时信息。当app.exe
运行时,是否有办法持续更新控制台?许多控制台应用程序缓冲其输出流(如果已知其被重定向)。事实上因此,缓冲是由app.exe
完成的,因为重定向,而不是由Out主机
完成的
解决方案是不重定向app.exe的输出,即使外部命令被重定向。对于这种情况,当PowerShell不重定向控制台应用程序的输出流并将其直接链接到自己的输出流时,您应该知道,这将是交互式PowerShell.exe
会话的控制台。条件是:
命令是管道中的最后一项
命令通过管道传输到输出默认值
解决方案是将命令包装到脚本块中,并将该脚本块输送到默认值中:
& { & "app.exe" } | Out-Default
另一种解决方案是使用带有-nonewindow
和-Wait
参数的启动流程
cmdlet:
Start-Process "app.exe" -NoNewWindow -Wait
如果在CMD中运行“app.exe”| more
,它会立即显示结果吗?more
会将输出发送到标准输出吗?我正在使用Write Host
防止在返回的变量中捕获输出数据。PowerShell管道的工作方式与外部实用程序的cmd不同。它确实在等待命令完成。只需调用app.exe
,而不调用&
和主机
。我使用&
,因为app.exe
的路径在变量中,所以我使用字符串调用它。&{&“app.exe”}out Default