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

PRTG Monitor:多级目录文件老化监控问题求助

解决PRTG自定义传感器监控Send目录旧文件的PE132错误

问题背景

需监控服务器D:\AS2\data目录下所有子文件夹中的Send子目录,若存在超过1小时的文件则触发PRTG告警。原脚本通过返回exitCode判断状态,但使用EXE/Script或EXE/Script Advanced传感器时,始终报错Response not well-formed: "( )" (code: PE132)。

原脚本核心问题

原脚本用Write-Host输出信息,仅返回exitCode,但PRTG的自定义传感器要求输出特定格式的文本内容(如状态码:描述消息),仅靠exitCode无法被PRTG正确解析。

修改后脚本的错误点

修改后的脚本存在两处致命问题:

  1. 变量名错误:使用未定义的$errorCode而非$exitCode
  2. 逻辑错误:遍历子文件夹时,只要有一个Send目录无旧文件就重置状态,会覆盖之前检测到的错误

正确脚本实现

修正变量、调整逻辑,确保PRTG能正确解析输出:

$rootFolder = "D:\AS2\data"
$subfolders = Get-ChildItem -Path $rootFolder -Directory
$maxFileAge = (Get-Date).AddMinutes(-60)
$oldFileFolders = @()

foreach ($subfolder in $subfolders) {
    $sendFolder = Join-Path -Path $subfolder.FullName -ChildPath "Send"
    # 先判断Send目录是否存在,避免目录不存在时抛出错误
    if (Test-Path -Path $sendFolder -PathType Container) {
        $oldFiles = Get-ChildItem -Path $sendFolder -File | Where-Object { $_.LastWriteTime -lt $maxFileAge }
        if ($oldFiles.Count -gt 0) {
            $oldFileFolders += $sendFolder
        }
    }
}

if ($oldFileFolders.Count -gt 0) {
    # PRTG标准格式:状态码:告警消息
    Write-Output "1:发现超过1小时的文件,涉及目录:$($oldFileFolders -join ', ')"
    exit 1
} else {
    # PRTG标准格式:状态码:正常消息
    Write-Output "0:所有Send目录无超过1小时的文件"
    exit 0
}

传感器设置建议

  • 选择EXE/Script Advanced传感器,关联修改后的PowerShell脚本
  • 确保脚本参数留空(无需动态传参时)
  • 勾选Use Windows Credentials of Parent Device,保证PRTG有目标目录的访问权限
  • 传感器超时时间设置为30秒以上,避免遍历大量文件时超时

关键修正说明

  • 增加Test-Path判断Send目录是否存在,避免目录不存在时的错误输出干扰PRTG解析
  • 收集所有存在旧文件的目录,统一输出告警信息,避免多次输出导致格式混乱
  • 严格遵循PRTG输出格式:状态码:描述消息,状态码0代表正常,1代表告警
  • 修正变量名错误,调整逻辑:只要有一个目录存在旧文件,就保持告警状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 07:00:02