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

PowerShell脚本故障:未运行的游戏进程仍向Uptime Kuma推送通知

修复PowerShell进程检测与Uptime Kuma推送脚本

脚本存在的核心问题

  • 变量初始化位置错误:$satisfactory仅在脚本启动时执行一次Get-Process,循环内不会重新检测进程状态,后续判断永远基于初始值,无法反映进程的实时变化。
  • 判断逻辑完全颠倒:当前条件!$satisfactory.started是在进程未启动时推送「正常(up)」状态,与需求完全相反;且如果进程不存在,$satisfactory变量未定义,会触发运行时错误。
  • 未处理进程不存在的异常:当目标进程未运行时,Get-Process会抛出终止性错误,直接中断脚本执行。

修正后的脚本

# 注意补充Uptime Kuma的主机IP/域名,比如http://192.168.1.100:3001...
$uptimeKumaBaseUrl = "http://:3001/api/push/3xlVsB4AVr"
$targetProcessName = "UnrealServer-Win64-Shipping"

while ($true) {
    # 每次循环重新检测进程,忽略进程不存在时的错误
    $runningProcess = Get-Process -Name $targetProcessName -ErrorAction SilentlyContinue

    if ($runningProcess) {
        # 进程运行时,推送正常状态
        $pingTimestamp = (Get-Date).ToString("yyyy-MM-ddTHH:mm:ss.fffZ")
        $pushUrl = "$uptimeKumaBaseUrl?status=up&msg=游戏进程运行正常&ping=$pingTimestamp"
        Invoke-WebRequest -Uri $pushUrl -UseBasicParsing
    }
    else {
        # 进程未运行时,推送异常状态
        $pingTimestamp = (Get-Date).ToString("yyyy-MM-ddTHH:mm:ss.fffZ")
        $pushUrl = "$uptimeKumaBaseUrl?status=down&msg=游戏进程已停止&ping=$pingTimestamp"
        Invoke-WebRequest -Uri $pushUrl -UseBasicParsing
    }

    # 间隔60秒再次检测
    Start-Sleep -Seconds 60
}

关键修正说明

  1. 将进程检测逻辑移入循环内部,确保每次循环都获取最新的进程状态。
  2. 使用-ErrorAction SilentlyContinue抑制进程不存在时的错误,通过$runningProcess是否为$null判断进程运行状态。
  3. 修正状态推送逻辑:进程存在时推送up,不存在时推送down,匹配Uptime Kuma的状态预期。
  4. 添加-UseBasicParsing参数,避免PowerShell调用IE组件的警告(适用于PowerShell 5及以上版本)。
  5. 拆分URL为基础地址与参数拼接,提升脚本可维护性;同时需补充Uptime Kuma服务的实际主机地址(原URL中http://:3001缺少主机IP/域名)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 09:20:06