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

