小编Rud*_*ram的帖子

Powershell 标准输出缓冲区对于外部命令来说太小

提前一些有用的信息。我试图做的是使用 powershell start-process 和 System.diagnostics.ProcessStartInfo 读取外部命令(特别是 steamcmd)的输出。

我遇到的是 RedirectStandardOutput 缓冲区限制为 4096 字节。我从 steamcmd 获得的输出超出了该缓冲区,因此我只获得了我需要的一部分。除了调用 steamcmd 之外,我没有其他方法来获取此数据。

如果您有 steamcmd(免费)并运行它,您也可以看到输出。

steamcmd +login anonymous +app_info_update 1 +app_info_print 443030 +quit
Run Code Online (Sandbox Code Playgroud)

这将下载有关该 appid 的所有清单信息。

我尝试重定向到一个文件和一个变量,两者都按预期工作,只是它被缓冲区缩短了。System.Diagnostics.Process 中似乎也没有 powershell 方法来等待 OutputDataReceived 事件。

使用的代码(从另一个 STackOverflow 问题中窃取)

$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
Run Code Online (Sandbox Code Playgroud)

我认为实际的问题是 …

powershell stdout streamreader redirectstandardoutput

5
推荐指数
1
解决办法
1898
查看次数