246

一連のアプリケーションを開くだけの PowerShell 1.0 スクリプトがあります。1 つ目は仮想マシンで、残りは開発アプリケーションです。残りのアプリケーションが開かれる前に、仮想マシンの起動を完了させたいです。

bashでは、私はただ言うことができました"cmd1 && cmd2"

これは私が持っているものです...

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

8 に答える 8

421

通常、内部コマンドの場合、PowerShell は次のコマンドを開始する前に待機します。この規則の 1 つの例外は、外部 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 のもう 1 つのオプションは、バックグラウンド ジョブを使用することです。

$job = Start-Job { invoke command here }
Wait-Job $job
Receive-Job $job
于 2009-11-16T15:08:04.630 に答える
15

「待機プロセス」を使用するだけです:

"notepad","calc","wmplayer" | ForEach-Object {Start-Process $_} | Wait-Process ;dir

仕事は終わった

于 2014-06-26T20:00:14.787 に答える
8

使用する場合Start-Process <path to exe> -NoNewWindow -Wait

このオプションを使用して、-PassThru出力をエコーすることもできます。

于 2013-02-20T16:02:04.633 に答える
3

オプションを含めると-NoNewWindow、エラーが発生します。Start-Process : This command cannot be executed due to the error: Access is denied.

私がそれを機能させる唯一の方法は、次のように呼び出すことでした:

Start-Process <path to exe> -Wait
于 2014-12-31T00:54:44.930 に答える
0

常にcmdがあります。

cmd /c start /wait notepad

または

notepad | out-host
于 2019-12-10T15:19:26.083 に答える
0

さらに進めると、オンザフライで解析することもできます

例えば

& "my.exe" | %{
    if ($_ -match 'OK')
    { Write-Host $_ -f Green }
    else if ($_ -match 'FAIL|ERROR')
    { Write-Host $_ -f Red }
    else 
    { Write-Host $_ }
}
于 2018-04-11T14:09:09.663 に答える