PowerShell脚本异常:关闭Edge后按顺序循环启动指定用户邮箱页问题
脚本修正方案
原脚本的问题在于:外层while循环会持续遍历用户集合,当Edge浏览器未关闭时,脚本会跳过当前用户继续遍历后续项;当Edge关闭时,恰好遍历到集合中的某个用户就会启动,导致看起来像是随机选取用户。
要实现关闭上一个用户的浏览器后再启动下一个,循环往复的需求,需要调整逻辑为:启动当前用户的Edge后,等待所有Edge进程退出,再处理下一个用户。
修正后的脚本:
while ($true) { $collection = "aap","noot","mies" foreach ($item in $collection) { # 启动Edge并打开目标链接 Start-Process -FilePath msedge "https://outlook.office.com/mail/$item/junkemail" Write-Host "已启动用户 $item 的Edge浏览器,请关闭后继续..." # 等待当前会话中的所有Edge进程退出 do { Start-Sleep -Seconds 1 $currentSessionEdgeProcs = Get-Process msedge -ErrorAction SilentlyContinue | Where-Object {$_.SessionId -eq (Get-Process -PID $PID).SessionId} } while ($currentSessionEdgeProcs.Count -gt 0) } Write-Host "一轮用户处理完成,即将开始下一轮循环`n" }
关键调整说明:
- 移除原脚本中仅在无Edge进程时才启动的判断,改为按顺序主动启动每个用户的Edge
- 添加
do-while循环,持续检查当前会话中的Edge进程,直到所有Edge进程关闭后才进入下一个用户的处理 - 加入
Start-Sleep -Seconds 1降低进程查询频率,减少系统资源占用
内容的提问来源于stack exchange,提问作者Jeroen Ruijter
相关产品推荐
相关产品推荐

