Windows PowerShellで外部コマンドを実行する(標準出力・標準エラー出力先の指定と終了コード)

Windows PowerShellは、システム管理者や高度なユーザーが自動化タスクを実行したり、構成を管理したりするための強力なツールです。この記事では、PowerShellを使用して外部コマンドを実行する方法を詳細に説明します。特に、標準出力と標準エラー出力のリダイレクト、および終了コードの取得に焦点を当てます。これらの技術をマスターすることにより、より複雑なスクリプトや自動化ワークフローを構築することが可能になります。
Windows PowerShellで外部コマンドの実行と出力先の指定・終了コードの扱い
Windows PowerShellは、外部コマンドを実行することで、様々なタスクを自動化することができます。このセクションでは、外部コマンドの実行方法、標準出力と標準エラー出力先の指定、そして終了コードの扱いについて詳しく説明します。
外部コマンドの実行方法
Windows PowerShellで外部コマンドを実行するには、コマンド名を直接入力します。例えば、dir コマンドを実行する場合、以下のようにします。
PS C:> dir
また、フルパスを指定してコマンドを実行することもできます。以下の例では、C:WindowsSystem32ping.exe を実行しています。
PS C:> & 'C:WindowsSystem32ping.exe' -n 4 example.com
標準出力と標準エラー出力のリダイレクト
Windows PowerShellでは、外部コマンドの標準出力と標準エラー出力を別のファイルや変数にリダイレクトすることができます。例えば、標準出力をファイルに保存するには、以下のようにします。
PS C:> dir > output.txt
標準エラー出力を別のファイルにリダイレクトするには、以下のコマンドを使用します。
PS C:> dir 2> error.txt
両方の出力を同時にリダイレクトするには、以下のようにします。
PS C:> dir > alloutput.txt 2>&1
終了コードの取得
外部コマンドの実行後に、そのコマンドの終了コードを取得することができます。終了コードは通常、コマンドの成功(0)または失敗(非0)を示します。終了コードを取得するには、$LASTEXITCODE 変数を使用します。
PS C:> ping -n 4 example.com PS C:> $LASTEXITCODE 0
コマンドの実行と出力の同時処理
Windows PowerShellでは、コマンドの実行と出力の同時処理を行うことができます。これにより、出力の内容をリアルタイムで処理することができます。以下は、Start-Process コマンドレットを使用して、コマンドの出力をリアルタイムで表示する例です。
PS C:> Start-Process -FilePath 'ping' -ArgumentList '-n 4 example.com' -NoNewWindow -Wait -RedirectStandardOutput output.txt -RedirectStandardError error.txt
複数の外部コマンドの連続実行
複数の外部コマンドを連続して実行する必要がある場合、コマンド間の依存関係や失敗時の処理を考慮する必要があります。以下は、2つのコマンドを連続して実行し、それぞれの終了コードを確認する例です。
PS C:> & 'C:WindowsSystem32ping.exe' -n 4 example.com; $pingExitCode = $LASTEXITCODE PS C:> & 'C:WindowsSystem32nslookup.exe' example.com; $nslookupExitCode = $LASTEXITCODE PS C:> if ($pingExitCode -eq 0 -and $nslookupExitCode -eq 0) { > Write-Output 'Both commands succeeded.' > } else { > Write-Output 'One or both commands failed.' > }
| コマンド | 説明 | 例 |
|---|---|---|
| dir | ディレクトリの内容を表示します。 | PS C:> dir |
| ping | ネットワークの到達可能性をテストします。 | PS C:> & 'C:WindowsSystem32ping.exe' -n 4 example.com |
| $LASTEXITCODE | 直前に実行されたコマンドの終了コードを取得します。 | PS C:> ping -n 4 example.com; $LASTEXITCODE |
| Start-Process | プロセスを開始します。コマンドの出力をリアルタイムで処理できます。 | PS C:> Start-Process -FilePath 'ping' -ArgumentList '-n 4 example.com' -NoNewWindow -Wait -RedirectStandardOutput output.txt -RedirectStandardError error.txt |
| if 文 | 条件に基づいて処理を分岐します。 | PS C:> if ($pingExitCode -eq 0 -and $nslookupExitCode -eq 0) { Write-Output 'Both commands succeeded.' } else { Write-Output 'One or both commands failed.' } |
よくある疑問
Windows PowerShellで外部コマンドを実行する方法は?
Windows PowerShell で外部コマンドを実行するには、コマンド 名前 や パス を直接コマンドラインに記述します。例えば、`ping` コマンドを実行する場合は、単純に `ping www.example.com` と入力します。また、複雑なコマンドやスクリプトを実行する際には Start-Process や Invoke-Expression サンディンクを使用することができます。これらのコマンドレットは、外部コマンドの起動方法や実行環境をより詳細に制御できます。
標準出力をファイルにリダイレクトする方法は?
Windows PowerShell で外部コマンドの 標準出力 をファイルにリダイレクトするには、 `>` 演算子を使用します。例えば、`ping www.example.com > result.txt` と入力することで、`ping` コマンドの標準出力を `result.txt` ファイルに書き出します。また、複数の出力を 結合 してリダイレクトすることも可能です。`2>&1` を使用して標準エラー出力を標準出力に リダイレクト し、その結果をファイルに保存することができます。例えば、`ping www.example.com > result.txt` と入力することで、すべての出力を `result.txt` に保存します。
終了コードを取得する方法は?
Windows PowerShell で外部コマンドの 終了コード を取得するには、 `$LASTEXITCODE` 変数を使用します。この変数には、最後に実行された外部コマンドの終了コードが格納されます。例えば、`ping www.example.com` コマンドを実行した後、`$LASTEXITCODE` を確認することで、そのコマンドの終了状態を確認できます。終了コードは通常、 0 が成功を、 非ゼロ がエラーを示します。この変数を使用して、スクリプト内で 条件分岐 を行うこともできます。
標準エラー出力を別のファイルにリダイレクトする方法は?
Windows PowerShell で外部コマンドの 標準エラー出力 を別のファイルにリダイレクトするには、 `2>` 演算子を使用します。例えば、`ping www.example.com 2> error.txt` と入力することで、`ping` コマンドの標準エラー出力を `error.txt` ファイルに書き出します。また、標準出力と標準エラー出力を 別々のファイル にリダイレクトすることも可能です。例えば、`ping www.example.com > output.txt 2> error.txt` と入力することで、標準出力を `output.txt` に、標準エラー出力を `error.txt` にそれぞれ保存します。これらの方法を組み合わせることで、出力の管理をより効率的に行うことができます。

こちらもおすすめです