Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 是主机缓冲吗?_Powershell - Fatal编程技术网

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