我正在寻找计算当前正在运行的PowerShell脚本数量的最佳方法。
我从Windows批处理文件运行.ps1脚本。我正在处理的脚本是在从客户端收到特定电子邮件时启动的 - 但我希望这个脚本首先检查当前没有其他脚本正忙着运行,如果是,它必须等待它们在继续之前完成。
我确信有几种方法可以解决这个问题,但最安全的是什么?
请记住我还在学习,所以示例代码将不胜感激。
答案 0 :(得分:0)
如果可以从批处理文件转移到启动PowerShell,那么我建议使用Start-Process启动脚本。这样您就可以使用where-object和Measure-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