
をプレフィックスとして付けた場合にのみ実行できるコマンドがいくつかあります&
。
それらはすべて非同期で実行されます。
スクリプトの例:
& 'C:\Program Files\SomeApp\SomeAppUninstall.exe'/silent
& 'C:\Users\bob\Downloads\SomeApp.exe' /silent
& 'C:\Program Files\someApp.exe' /openGui
ここで何が起こるかというと、最後のコマンドが最も高速であり、プログラムがまだインストールされているため、最初に実行され、最初の 2 つのコマンドが同時に実行され、競合が発生します。
当然ながら、それらを順番に実行する必要があります。
何らかの理由で、これらのコマンドは、 がプレフィックスとして付いている場合にのみ機能し&
、そうでない場合はエラーが発生します。これは、スイッチがあるためだと思われます。
これを回避するにはどうすればいいでしょうか?
答え1
数年前、私はあなたと同じ、または少なくとも似たような要件があったため、Powershell 関数を作成しました。私の記憶が正しければ、この関数は私にとって非常に役立ちました。ただし、一度説明できない問題が発生したと思います。したがって、自己責任で使用してください。
function wait-for-process {
param (
[string] $exe,
[string] $arguments
)
$process = new-object System.Diagnostics.Process
$process.StartInfo = new-object System.Diagnostics.ProcessStartInfo
$process.StartInfo.FileName = $exe
$process.StartInfo.Arguments = $arguments
if (-not $process.Start()) {
"Could not start $exe $arguments!"
return
}
$process.WaitForExit()
if ($process.ExitCode) {
"Exit code for $exe $arguments is $($process.ExitCode)"
}
}
答え2
私が示した例は非常に単純で、実際のケースはもう少し複雑ですが、私のケースではすべて 1 つの引数のみを使用します。
私は次のような簡単な関数を書きました:
function Await($path, $arg) {
Start-Process `
-Wait `
-FilePath $path `
-ArgumentList /$arg
}