我有一个适用于 Windows 服务器的 Zabbix 发现规则,用于运行 powershell 脚本并返回一些 SQL 实例和数据库名称。此 Zabbix 代理版本 (3.4.6) 和配置在数十台其他服务器上的发现中运行良好,但出于某种原因,这台服务器特别在输出中添加了额外的文本,导致 JSON 无效。
以下是针对该主机的 zabbix_get 示例:
[root@zabbix]# zabbix_get -s host1 -k mssql.db.discovery
Active code page: 1252
{
"data":[
{ "{#INST}" : "Instance1", "{#DBNAME}" : "Database1" },
{ "{#INST}" : "Instance1", "{#DBNAME}" : "Database2" }
]
}
“活动代码页:1252”消息破坏了 JSON。我觉得这是一个编码问题,但我不确定它在哪里。所有配置和脚本都是从工作服务器的同一来源复制而来,所以我不知道有什么区别。
有趣的是,它不仅限于 powershell 脚本。运行一个简单的命令也会生成以下消息:
[root@zabbix]# zabbix_get -s host1 -k system.run["hostname.exe"]
Active code page: 1252
host1
另外需要注意的是,zabbix_agentd.exe -t "mssql.db.discovery"
在相关主机上运行也会产生相同的消息。但是,在该主机上的 Powershell ISE 中单独执行脚本不会产生该消息。
我的问题是 - 有谁知道如何阻止 Windows/Zabbix 添加该消息,或者有没有什么解决方法可以防止它破坏我的 JSON?
答案1
我找到了一个可行的解决方案。原来 cmd.exe 有一个 Autorun 注册表项,chcp 1252
每次运行命令时都会运行,导致命令回显该消息。
我只是将HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\Autorun
密钥全部删除了,这样我的命令开头就不再出现“活动代码页”消息了。