如何在子级生成的powershell脚本完成后继续执行powershell脚本



我目前正在处理一个问题,如果有任何帮助或意见,我将不胜感激。

我有一个powershell脚本,在执行过程中,它会生成其他运行各种命令的powershell脚本。所有这些生成的powershell脚本都会在命令执行后自动退出。

我要做的是,在所有这些派生的powershell实例退出后,在初始powershell脚本中运行另一个命令。基本上等待所有生成的powershell实例退出,然后运行命令。

关于如何实现这一点,有什么想法吗?

感谢

编辑:生成powershell脚本的代码如下所示:

foreach ($var in $filters){
start-process powershell.exe -Verb Runas -argument "-nologo -noprofile -command .$var"}

您可以使用等待过程。使用-PassThru开关返回已启动的进程。这应该有效:

$processes = foreach ($var in $filters) {
Start-Process powershell.exe -PassThru -Verb RunAs -Arg "-nologo -noprofile -command .$var"
}
# wait for processes to finish
$processes | Wait-Process
# now, run your other commands
# ...

您也可以使用这样的后台作业(使用$PWD自动变量(:

# run all scripts as background jobs
$jobs = foreach ($var in $filters) {
Start-Job -FilePath "$PWD$var"
}
# wait for all jobs to finish
$jobs | Wait-Job
# now, run your other commands
# ...

或者在一行中:

$filters | foreach { Start-Job -FilePath "$PWD$_" } | Wait-Job

您可以使用powershell作业来尝试此操作,如@jeorenmostert所说的

$j=$filters|%{
start-job -filepath "$($_)"
}
$j|wait-job
  • 这里首先使用ForEach 的%别名对$filters进行迭代

  • 则开始每个作业($_(是流水线变量

  • 将它们放入$j变量

  • $j作业管道传输到wait-job以等待作业完成(您也可以管道传输receive-job以获得类似passthrough的结果(

最新更新