Powershell:使用过程对象捕获标准输出和错误

我想从PowerShell启动Java程序并将结果打印在控制台上。

我已经按照以下问题的说明进行操作:

使用启动过程捕获标准输出和错误

但是对我来说,这不符合我的预期。我做错了什么?

这是脚本:

$psi = New-object System.Diagnostics.ProcessStartInfo

$psi.CreateNoWindow = $true

$psi.UseShellExecute = $false

$psi.RedirectStandardOutput = $true

$psi.RedirectStandardError = $true

$psi.FileName = 'java.exe'

$psi.Arguments = @("-jar","tools\compiler.jar","--compilation_level", "ADVANCED_OPTIMIZATIONS", "--js", $BuildFile, "--js_output_file", $BuildMinFile)

$process = New-Object System.Diagnostics.Process

$process.StartInfo = $psi

$process.Start() | Out-Null

$process.WaitForExit()

$output = $process.StandardOutput.ReadToEnd()

$output

$output变量始终为空(当然,控制台上不会打印任何内容)。

回答:

RedirectStandardError属性上的文档建议最好将WaitForExit()呼叫放在呼叫之后ReadToEnd()。以下内容对我来说是正确的:

$psi = New-object System.Diagnostics.ProcessStartInfo 

$psi.CreateNoWindow = $true

$psi.UseShellExecute = $false

$psi.RedirectStandardOutput = $true

$psi.RedirectStandardError = $true

$psi.FileName = 'ipconfig.exe'

$psi.Arguments = @("/a")

$process = New-Object System.Diagnostics.Process

$process.StartInfo = $psi

[void]$process.Start()

$output = $process.StandardOutput.ReadToEnd()

$process.WaitForExit()

$output

以上是 Powershell:使用过程对象捕获标准输出和错误 的全部内容, 来源链接: utcz.com/qa/402664.html

回到顶部