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正确解析。
修改后脚本的错误点
修改后的脚本存在两处致命问题:
- 变量名错误:使用未定义的
$errorCode而非$exitCode - 逻辑错误:遍历子文件夹时,只要有一个
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
相关产品推荐
相关产品推荐

