Как последовательно запускать команды Powershell

Как последовательно запускать команды Powershell

У меня есть некоторые команды, которые можно запустить только с префиксом &.

Все они работают асинхронно.

Пример сценария:

& 'C:\Program Files\SomeApp\SomeAppUninstall.exe'/silent
& 'C:\Users\bob\Downloads\SomeApp.exe' /silent
& 'C:\Program Files\someApp.exe' /openGui

В данном случае происходит следующее: последняя команда будет выполнена первой, так как она самая быстрая, а программа все еще установлена; первые две команды будут выполнены одновременно, что приведет к конфликту.

Мне, очевидно, нужно, чтобы они запускались последовательно.

По какой-то причине эти команды работают только с префиксом &, иначе я получаю ошибку. Подозреваю, что это из-за того, что у них есть переключатели.

Как это обойти?

решение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

Приведенный мной пример был очень простым, реальные случаи немного сложнее, но во всех моих случаях используется только один аргумент.

Я написал эту простую функцию:

function Await($path, $arg) {
    Start-Process     `
      -Wait           `      
      -FilePath $path `
      -ArgumentList /$arg 
}

Связанный контент