计算运行的脚本数量并等待它们完成

时间:2013-09-17 05:56:28

标签: powershell batch-file

我正在寻找计算当前正在运行的PowerShell脚本数量的最佳方法。

我从Windows批处理文件运行.ps1脚本。我正在处理的脚本是在从客户端收到特定电子邮件时启动的 - 但我希望这个脚本首先检查当前没有其他脚本正忙着运行,如果是,它必须等待它们在继续之前完成。

我确信有几种方法可以解决这个问题,但最安全的是什么?

请记住我还在学习,所以示例代码将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果可以从批处理文件转移到启动PowerShell,那么我建议使用Start-Process启动脚本。这样您就可以使用where-objectMeasure-Object等待流程退出,以过滤尚未完成的脚本。

所以你的脚本看起来像这样:

# create a loop 
foreach ($item in $reasontoloop) {

    $arguments = "define script names and arguments"

    # Start the powershell script
    $procs += Start-Process powershell -PassThru  -argumentlist $arguments
}

Write-Host -message "Waiting for Processes to complete" 
while( $procs | Where-Object { $_.hasExited -eq $false } )
{
    # Display progress
    $measureInfo = $procs | Where-Object { $_.hasExited -eq $true } | Measure-Object
    write-host "$($measureInfo.count) of $($procs.Length) still running" 

    Start-Sleep 1
}
Write-Host -message "Processes complete" 

如果您只是对执行的PowerShell实例数量感兴趣,那么使用Get-Process的以下一个班轮将有所帮助。

@(Get-Process | where-object {$_.ProcessName -like 'powershell'}).count