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

PowerShell脚本需求:Edge关闭后自动重启指定脚本

问题分析与解决方案

核心问题诊断

你的脚本存在两个关键问题:

  • $edge 变量仅在循环外部初始化一次,循环内不会重新检测Edge进程的实时状态,导致一旦初始未检测到进程,就会无限重复启动目标脚本
  • 缺少启动后的状态跟踪逻辑,无法避免重复触发启动操作

完整解决方案脚本

以下脚本同时实现开机自启设置和Edge进程监控重启功能,且能避免重复启动实例:

# 1. 设置当前脚本为开机启动项(添加到当前用户的注册表启动项)
$scriptPath = $MyInvocation.MyCommand.Path
$regPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run"
Set-ItemProperty -Path $regPath -Name "EdgeMonitorScript" -Value "powershell.exe -WindowStyle Hidden -File `"$scriptPath`""

# 2. 进程监控与重启逻辑
$targetScript = "C:\Temp\SAPTestScripting.ps1"
$isRestarting = $false  # 标记是否正在启动Edge,避免重复触发

while ($true) {
    # 每次循环重新检测带窗口的Edge进程
    $edgeProcess = Get-Process msedge -ErrorAction SilentlyContinue | Where-Object { $_.MainWindowTitle -ne "" }

    if (-not $edgeProcess -and -not $isRestarting) {
        $isRestarting = $true
        Write-Host "未检测到Edge进程,启动目标脚本..."
        # 启动目标脚本并等待其启动Edge(可根据实际情况调整等待逻辑)
        Start-Process powershell.exe -ArgumentList "-WindowStyle Hidden -File `"$targetScript`"" -Wait
        # 等待Edge进程加载完成(可选,根据Edge启动速度调整时长)
        Start-Sleep -Seconds 3
        $isRestarting = $false
    }
    # 每隔5秒执行一次进程检测
    Start-Sleep -Seconds 5
}

关键改进点说明

  • 开机启动设置:通过修改当前用户注册表启动项实现开机自启,-WindowStyle Hidden 参数让PowerShell后台静默运行
  • 实时进程检测:每次循环重新调用Get-Process获取最新的Edge进程状态,确保判断逻辑准确
  • 重复启动防护:用$isRestarting变量标记启动状态,避免在启动过程中重复触发启动操作
  • 启动完成等待:使用-Wait参数等待目标脚本执行完成,再重置标记,防止短时间内多次启动

额外注意事项

  • 若目标脚本SAPTestScripting.ps1启动Edge后会持续运行,可移除-Wait参数并调整等待逻辑
  • 如需管理员权限的开机启动,可将注册表路径改为HKLM:\Software\Microsoft\Windows\CurrentVersion\Run,但需以管理员身份运行脚本
  • 停止开机自启可执行:Remove-ItemProperty -Path $regPath -Name "EdgeMonitorScript"

内容的提问来源于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:18:17