You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell双While循环监控脚本异常问题求助

问题分析与解决方案

问题根源

  1. 嵌套逻辑错误:Edge运行时仍会检查PowerShell脚本进程,而脚本完成打开Edge的任务后会自动退出,导致脚本被反复重启。
  2. Wait-Process -Name msedge用法错误:该命令是等待Edge进程终止,而非等待脚本启动Edge;若脚本启动Edge后自行退出,这个命令会一直阻塞到Edge关闭,破坏监控逻辑。
  3. 进程筛选不精准:未区分运行SAPTestScripting.ps1的PowerShell进程,可能误判其他无关的PowerShell窗口。

修正后的脚本

$scriptPath = "C:\Temp\SAPTestScripting.ps1"

while ($true) {
    # 检查是否有可见的Edge进程
    $hasVisibleEdge = Get-Process msedge -ErrorAction Ignore | Where-Object { $_.MainWindowTitle }

    if ($hasVisibleEdge) {
        # Edge正在运行,暂停PowerShell脚本监控,等待后重新检查
        Start-Sleep -Seconds 5
        continue
    }

    # Edge未运行,检查目标PowerShell脚本进程是否存在
    $scriptProcess = Get-Process powershell, pwsh -ErrorAction Ignore | 
        Where-Object { 
            $_.MainWindowTitle -and 
            (Get-CimInstance Win32_Process -Filter "ProcessId = $($_.Id)").CommandLine -match [regex]::Escape($scriptPath)
        }

    if (-not $scriptProcess) {
        # 启动目标脚本,并等待脚本进程执行完成
        $startedProcess = Start-Process powershell -ArgumentList "-File `"$scriptPath`"" -PassThru
        Wait-Process -Id $startedProcess.Id
    }

    Start-Sleep -Seconds 3
}

脚本逻辑说明

  1. Edge优先级监控:每次循环先检查是否有可见的Edge窗口,若存在则直接进入等待,不再处理PowerShell脚本的监控,符合「Edge运行时暂停PowerShell进程监控」的需求。
  2. 精准筛选脚本进程:通过Win32_Process获取进程的命令行参数,精准匹配运行SAPTestScripting.ps1的PowerShell/pwsh进程,避免误判其他无关PowerShell窗口。
  3. 正确的进程等待:启动脚本时通过-PassThru获取进程对象,等待该脚本进程完成(而非等待Edge),确保脚本执行完成后再进入下一轮检查。
  4. 循环逻辑闭环:Edge未运行时,若脚本进程不存在则启动并等待其完成;若脚本进程存在则继续等待,直到Edge启动或脚本进程结束。

内容的提问来源于stack exchange,提问作者LILDASHIEGRINGO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 19:45:11