我试图获取运行Java进程的
stdout
和stderr
,看到了一种看起来很简单、很酷的方法,但它没有起作用:$command = "java -jar secretserver-jconsole.jar -s 123456 Password"
Invoke-Expression $command -OutVariable output -ErrorVariable errors
Write-Host "stdout: $output"
Write-Host "stderr: $errors"
$output
和$errors
没有显示任何内容。
我现在正在使用:
$output = cmd /c $command
这段代码确实可以输出 stdout
,但是我想要的是错误信息 $error
。
我尝试了一个复杂的方法,但好像并没有执行该进程,因为返回的时间几乎是立即的,而正常进程需要几秒钟的时间。它也没有显示任何输出或错误:
$psi = New-object System.Diagnostics.ProcessStartInfo
$psi.CreateNoWindow = $true
$psi.UseShellExecute = $false
$psi.RedirectStandardOutput = $true
$psi.RedirectStandardError = $true
$psi.FileName = 'java'
$psi.Arguments = @("-jar","secretserver-jconsole.jar","-
s","123456","Password")
$process = New-Object System.Diagnostics.Process
$process.StartInfo = $psi
[void]$process.Start()
$output = $process.StandardOutput.ReadToEnd()
$process.WaitForExit()
Write-Host "stdout: $output"
(tried: adding:
do
$process.StandardOutput.ReadLine()
}
while (!$process.HasExited)