Windows不支持配额超限自动SNMP告警,但可通过“fsutil定期检测→PowerShell脚本识别超限→调用snmptrap.exe发送trap”实现闭环;需配置任务计划、SNMP管理端接收及OID匹配。
windows 本身不直接支持在磁盘配额超限时自动触发 snmp 告警——因为 ntfs 配额事件(如 id 4625、4720 等)属于安全日志范畴,而配额超限本身不会生成标准 windows 事件日志条目,更不会内置 snmp trap 发送能力。但你可以通过“配额超限 → 触发脚本 → 调用 snmp 工具发 trap”这一链路实现闭环告警。关键在于:把配额状态变化转化为可监控、可响应的信号。
一、先让系统能“感知”配额超限
NTFS 配额不写日志,但可通过定期检查 fsutil quota query 输出来识别异常:
-
打开管理员权限命令提示符,运行:
fsutil quota query D:
输出中若某用户状态为
Quota Exceeded或Hard Quota Limit Exceeded,即表示已超限。 -
编写一个 PowerShell 脚本(如
check-quota.ps1),每5分钟扫描一次目标卷,提取超限用户并记录:$vol = "D:" $result = fsutil quota query $vol 2>&1 | Out-String if ($result -match "Quota Exceeded|Hard Quota Limit Exceeded") { $exceededUsers = ($result -split "`n" | Select-String "Exceeded") -replace "\s+", " " | ForEach-Object { $_.Trim() } "$((Get-Date).ToString('yyyy-MM-dd HH:mm:ss')) : $($exceededUsers -join ';')" | Out-File "C:\logs\quota-alert.log" -Append # 后续调用 SNMP 发送逻辑 & "C:\tools\snmptrap.exe" -v 2c -c "public" 192.168.1.100 "" 1.3.6.1.4.1.311.1.1.3.1.1 s "Disk quota exceeded on $vol" }
⚠️ 注意:
fsutil quota query需管理员权限;输出格式依赖系统语言,建议在英文系统或统一区域设置下部署。
二、配置 SNMP 服务并允许 trap 发送
Windows 自带 SNMP 服务仅支持接收 trap(作为代理),不支持主动发送。因此需借助轻量第三方工具:
- 推荐使用开源工具
snmptrap(来自 Net-SNMP) 或SnmpSharpNet封装的 .NET 控制台程序:- 下载
snmptrap.exe(Net-SNMP for Windows),放在C:\tools\; - 确保目标 SNMP 管理端(如 Zabbix、PRTG、SolarWinds)已配置接收
192.168.1.100的 trap,且 community name(如public)匹配; - OID 可自定义,例如使用微软私有 OID
1.3.6.1.4.1.311.1.1.3.1.1(代表“NTFS Quota Violation”),便于管理平台分类识别。
- 下载
三、用任务计划定时执行检测脚本
- 打开“任务计划程序”,新建基本任务:
- 触发器:每5分钟重复一次;
- 操作:启动程序 →
powershell.exe,参数填:-ExecutionPolicy Bypass -File "C:\scripts\check-quota.ps1"
- “更改用户或组”设为
SYSTEM或具有管理员权限的运维账户; - 勾选“不管用户是否登录都要运行”和“不保存密码时只在用户登录时运行” → 选前者,并勾选“使用最高权限”。
四、SNMP 管理端接收与呈现(简要)
- 在 Zabbix 中:添加“SNMP trap”类型监控项,OID 匹配
1.3.6.1.4.1.311.1.1.3.1.1,触发器表达式如{last("snmptrap[.*].str("Quota Exceeded")")}=1; - 在 PRTG 中:启用 SNMP Trap Receiver Sensor,过滤 OID 并设置通知模板;
- 所有 trap 内容(含时间、卷符、用户名)均可从
$result中解析后作为 trap 变量字段(如sysUpTime.0,snmpTrapOID.0,1.3.6.1.4.1.311.1.1.3.1.2 s "DESKTOP-ABC\user01")一并发送,提升排障效率。
不依赖商业软件,也不修改系统核心组件,整个流程基于 Windows 原生命令 + 开源 SNMP 工具 + 标准协议,稳定可控。

















