22

PowerShell から Java プログラムを開始し、結果をコンソールに出力したいと考えています。

この質問の指示に従いました: Start-Process で標準出力とエラーをキャプチャする

しかし、私にとっては、これは期待どおりに機能していません。私が間違っていることは何ですか?

これはスクリプトです:

$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もちろん、コンソールには何も表示されません)。

4

3 に答える 3

42

プロパティのドキュメントは、呼び出しの後に呼び出し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
于 2012-07-18T20:32:11.607 に答える
18

必要に応じて出力を選択的に印刷できるように、小さなバリエーション。エラーまたは警告メッセージだけを探しているかのように、ところでキースはあなたの応答で私のベーコンを保存しました...

$psi = New-object System.Diagnostics.ProcessStartInfo 
$psi.CreateNoWindow = $true 
$psi.UseShellExecute = $false 
$psi.RedirectStandardOutput = $true 
$psi.RedirectStandardError = $true 
$psi.FileName = 'robocopy' 
$psi.Arguments = @("$HomeDirectory $NewHomeDirectory /MIR /XF desktop.ini /XD VDI /R:0 /W:0 /s /v /np") 
$process = New-Object System.Diagnostics.Process 
$process.StartInfo = $psi 
[void]$process.Start()
do
{
   $process.StandardOutput.ReadLine()
}
while (!$process.HasExited)
于 2012-12-27T21:25:02.533 に答える