1. ホーム
  2. powershell

[解決済み] Start-Processで標準出力と誤差を捕捉する

2022-06-03 21:36:33

質問

PowerShellの Start-Process コマンドにアクセスする際に StandardErrorStandardOutput のプロパティは?

を実行しても何も出力されません。

$process = Start-Process -FilePath ping -ArgumentList localhost -NoNewWindow -PassThru -Wait
$process.StandardOutput
$process.StandardError

しかし、出力をファイルにリダイレクトすると、期待通りの結果が得られます。

$process = Start-Process -FilePath ping -ArgumentList localhost -NoNewWindow -PassThru -Wait -RedirectStandardOutput stdout.txt -RedirectStandardError stderr.txt

どのように解決するのですか?

それは Start-Process は何らかの理由で設計されたものです。ファイルに送信せずに取得する方法を紹介します。

$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = "ping.exe"
$pinfo.RedirectStandardError = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.Arguments = "localhost"
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
$p.WaitForExit()
$stdout = $p.StandardOutput.ReadToEnd()
$stderr = $p.StandardError.ReadToEnd()
Write-Host "stdout: $stdout"
Write-Host "stderr: $stderr"
Write-Host "exit code: " + $p.ExitCode