事先提供了一些有用的信息。我試圖做的是使用powershell start-process和System.diagnostics.ProcessStartInfo讀取外部命令的輸出,特別是steamcmd。Powershell StandardOutput緩衝區對於外部命令太小
我正在運行的是RedirectStandardOutput緩衝區限制爲4096字節。我從steamcmd獲得的輸出超過了緩衝區,所以我只能得到我需要的一部分。除了調用steamcmd,我沒有其他方法可以獲取這些數據。
如果你有steamcmd(它是免費的)並運行它,你可以看到輸出。
steamcmd +login anonymous +app_info_update 1 +app_info_print 443030 +quit
這將下載所有有關的appid清單信息。
我試着重定向到一個文件,也是一個變量,兩者都按預期工作,只是它被緩衝區縮短了。在System.Diagnostics.Process中也沒有看到等待OutputDataReceived事件的PowerShell方法。
$psi = New-object System.Diagnostics.ProcessStartInfo
$psi.CreateNoWindow = $true
$psi.UseShellExecute = $false
$psi.RedirectStandardOutput = $true
$psi.RedirectStandardError = $true
$psi.FileName = "C:\Path\to\SteamCMD.exe"
$psi.Arguments = "+login anonymous +app_info_update 1 +app_info_print 443030 +quit"
$process = New-Object System.Diagnostics.Process
$process.StartInfo = $psi
[void]$process.Start()
$output = $process.StandardOutput.ReadToEnd()
$process.WaitForExit()
$output
使用
代碼(從另一個StackOverflow的問題,被盜),我認爲實際的問題是,steamCMD只是輸出在一個大的寫入,而不是一行行。我想一個更好的問題是,如何增加Start-Process或System.Diagnostics.Process的標準輸出緩衝區大小。
注意:運行steamcmd> somefile.txt會導致相同的緩衝區限制。
這仍然不會因爲標準輸出緩衝區限制工作。它全部在4096緩衝區上運行,找到一種方法來抓取更多或控制它,以便在steamcmd退出之前逐行讀取它。 –
我沒有在我的機器上做這個錯誤。 PS版本5.1.14393.693。將輸出保存到一個文件中,它的長度爲269行,大小爲13KB。 –
當我在PS 4.0中進行時,無論方法或文件輸出如何,我的地雷都停在221行和5k處。當我通過直接cmd和> tofile.txt完成時,它是221行。當我運行它沒有重定向輸出在CMD中,並手動將所有文本複製到文件我得到327行和15K大小。編輯:也嘗試與從portableapps.com便攜式命令提示,相同的221行/ 5K限制。 –