【发布时间】:2017-10-02 17:46:28
【问题描述】:
我正在尝试通过运行 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)
【问题讨论】:
-
在 PowerShell ISE 中试用。它应该按照你想要的方式工作。
-
@PetSerAl:这两种方法中的哪一种,为什么在 ISE 中运行会有所不同?
-
@mklement0 第一个。因为 ISE 没有控制台。
标签: powershell stdout stderr