我目前正在处理一个问题,如果有任何帮助或意见,我将不胜感激。
我有一个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的结果(