如何按顺序运行 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

我给出的例子非常简单,实际的情况要复杂一些,但我的案例都只使用 1 个参数。

我写了这个简单的函数:

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

相关内容