1
我有一個函數,我用&
運算符調用一個應用程序。該應用程序會產生幾個行命令行輸出,下載一些文件,並返回一個字符串:是主機緩衝嗎?
& "app.exe" | Out-Host
$var = ...
return $var
看來,該控制檯後纔會app.exe
終止出現由app.exe
產生的輸出。用戶沒有任何正在下載文件的實時信息。當app.exe
正在運行時,有沒有辦法持續更新控制檯?
我有一個函數,我用&
運算符調用一個應用程序。該應用程序會產生幾個行命令行輸出,下載一些文件,並返回一個字符串:是主機緩衝嗎?
& "app.exe" | Out-Host
$var = ...
return $var
看來,該控制檯後纔會app.exe
終止出現由app.exe
產生的輸出。用戶沒有任何正在下載文件的實時信息。當app.exe
正在運行時,有沒有辦法持續更新控制檯?
許多控制檯應用程序緩衝他們的輸出流,如果它知道被重定向。其實,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
如果您運行'「app.exe」|,該怎麼辦? CMD中的「更多」,是否立即顯示結果? – PetSerAl
'more'將輸出發送到標準輸出嗎?我正在使用'Write-Host'來防止輸出數據被捕獲到返回的變量中。 – robert
對於外部實用程序,PowerShell管道不能像cmd一樣工作。它確實等待命令完成。只需調用沒有'&'和'out-host'的'app.exe'。 – wOxxOm