我正在寻找计算当前正在运行的 PowerShell 脚本数量的最佳方法。
我从 Windows 批处理文件运行 .ps1 脚本。我现在正在处理的脚本是在收到来自客户端的特定电子邮件时启动的——但我希望这个脚本首先检查当前没有其他脚本忙于运行,如果是,则必须等待它们在继续之前完成。
我敢肯定有几种方法可以解决这个问题,但最安全的方法是什么?我仍在学习。
我正在寻找计算当前正在运行的 PowerShell 脚本数量的最佳方法。
我从 Windows 批处理文件运行 .ps1 脚本。我现在正在处理的脚本是在收到来自客户端的特定电子邮件时启动的——但我希望这个脚本首先检查当前没有其他脚本忙于运行,如果是,则必须等待它们在继续之前完成。
我敢肯定有几种方法可以解决这个问题,但最安全的方法是什么?我仍在学习。
如果可以从批处理文件转移到启动 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