PowerShell で各コマンドが終了するのを待つ
-
PowerShell で
Out
コマンドを使用して各コマンドが終了するのを待つ -
PowerShell で
Start-Process
コマンドレットを使用して各コマンドが終了するのを待つ - PowerShell でバックグラウンドジョブを使用して各コマンドが終了するのを待つ
-
PowerShell で
Wait-Process
コマンドレットを使用して、各コマンドが終了するのを待つ -
PowerShell で
[Diagnostics.Process]
クラスを使用して各コマンドが終了するのを待つ
通常、Windows PowerShell は、次のコマンドを開始する前に内部コマンドを待機します。
この規則の 1つの例外は、外部の Windows サブシステムベースの EXE です。さらに、Windows PowerShell は、実行可能プログラムの実行時にコマンドが終了するのを待ちません。
この記事では、Windows PowerShell 環境で、実行可能ファイルを含むコマンドが終了するのを待ってから、次のコマンドに移動する方法を説明します。
PowerShell で Out
コマンドを使用して各コマンドが終了するのを待つ
前述のように、実行可能ファイルを実行すると、コマンドが終了するのを待たずに、次のコマンドに直接移動します。特にアプリケーションを順番に実行するスクリプトを作成する場合は、これを回避する必要があるかもしれません。
気の利いたトリックの 1つは、Out-Null
のような Out
コマンドの 1つを使用することです。アプリケーションを実行するときに、Out-Null
コマンドレットをパイプ処理すると、Windows PowerShell がだまされて、実行中のアプリケーション上で基になるコマンドレットが実行されます。
コマンドレット Out-Null
はコンソールに何も表示しないため、標準で実行されているアプリケーションのように見えることに注意してください。唯一の違いは、コマンドライン全体が実行されるのを待つことです。
サンプルコード:
Notepad.exe | Out-Null
使用できる Out
コマンドの他の例は次のとおりです。
Out-Default
- 出力をデフォルトのフォーマット環境とデフォルトの出力コマンドレットに送信します。Out-File
- 出力をファイルに送信します。Out-GridView
- 別のウィンドウのインタラクティブテーブルに出力を送信します。Out-Host
- 出力をコマンドラインに送信します。Out-Printer
- 出力をプリンターに送信します。Out-String
- オブジェクトを一連の文字列としてホストに送信します。
PowerShell で Start-Process
コマンドレットを使用して各コマンドが終了するのを待つ
コマンドラインが終了するまで Windows PowerShell を待機させるもう 1つの方法は、Start-Process
コマンドレットです。
たとえば、Start-Process
コマンドレットの -Wait
パラメーターを使用すると、Windows PowerShell はプロセスが終了するのを待ってから、次のコマンドラインを実行します。
Start-Process notepad.exe -NoNewWindow -Wait
-NoNewWindow
パラメーターは、新しいコンソールウィンドウを開かずに現在のプロセスを開始します。PowerShell コミュニティ拡張バージョンを使用して、新しいオブジェクトが最初に作成されます。オブジェクトが作成されると、WaitForExit()
関数が呼び出されます。
$proc = Start-Process notepad.exe -NoNewWindow -PassThru
$proc.WaitForExit()
PowerShell でバックグラウンドジョブを使用して各コマンドが終了するのを待つ
コマンドラインが終了するまで Windows PowerShell を待機させる別の方法は、バックグラウンドジョブを使用することです。
バックグラウンドジョブは、ローカルマシンの別のプロセスで実行されるコマンドまたはコマンドのセットです。バックグラウンドジョブの構文例を以下に示します。
$job = Start-Job { notepad.exe }
Wait-Job $job
Receive-Job $job
Wait-Job
コマンドレットを呼び出すと、コマンドラインで Receive-Job
が呼び出されるまでプロセスが待機します。
PowerShell で Wait-Process
コマンドレットを使用して、各コマンドが終了するのを待つ
Windows PowerShell にコマンドラインの終了を待機させるもう 1つの方法は、Wait-Process
コマンドレットです。
最初の例のように、これを実行可能ファイルにパイプして、コマンドラインが終了するのを待つことができます。ただし、このコマンドレットの使用は、Windows PowerShell バージョン 5.1 以下でのみ機能し、最新の PowerShell(Core)7 では機能しません。
Notepad.exe | Wait-Process
PowerShell で [Diagnostics.Process]
クラスを使用して各コマンドが終了するのを待つ
システムに .NET
ライブラリがインストールされている場合は、[Diagnostics.Process]
クラスを使用して、プロセスが終了するのを待ってから、次のコマンドラインに移動できます。
ただし、これを使用することはお勧めしません。他のより単純なコマンドレットが Windows PowerShell 内で利用可能であり、十分に活用できるためです。PowerShell コマンドが使用できない場合にのみ、.NET
ライブラリを使用してください。
[Diagnostics.Process]::Start('notepad.exe').WaitForExit()
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn