1. ホーム
  2. powershell

[解決済み】PowerShellに、各コマンドの終了を待って次のコマンドを開始させる方法は?

2022-04-02 01:50:06

質問

PowerShell 1.0スクリプトで、たくさんのアプリケーションを開くだけです。最初のものは仮想マシンであり、他のものは開発用アプリケーションです。 私は、残りのアプリケーションを開く前に、仮想マシンのブートを完了させたいと思います。

bashでは、次のように言うだけです。 "cmd1 && cmd2"

こんな感じです...。

C:\Applications\VirtualBox\vboxmanage startvm superdooper
    &"C:\Applications\NetBeans 6.5\bin\netbeans.exe"

解決方法は?

通常、PowerShellは内部コマンドの場合、次のコマンドを開始する前に待機します。 このルールの例外は、外部のWindowsサブシステムベースのEXEです。 最初のトリックは、パイプラインで Out-Null というように

Notepad.exe | Out-Null

PowerShellは、Notepad.exeのプロセスが終了するまで待ってから続行します。 これは便利ですが、コードを読む限りでは微妙な感じです。 また Start-Process と共に -Wait パラメータを使用します。

Start-Process <path to exe> -NoNewWindow -Wait

PowerShell Community Extensions版を使用している場合は、そうなります。

$proc = Start-Process <path to exe> -NoNewWindow -PassThru
$proc.WaitForExit()

PowerShell 2.0でのもう一つのオプションは、以下のように バックグラウンドジョブ :

$job = Start-Job { invoke command here }
Wait-Job $job
Receive-Job $job