一段时间以来,我一直使用 SNMP 监控 UNIX/Linux 服务器。修改 snmpd.conf 文件并添加类似以下内容的内容:
view systemview included .1.2.3.4.5.6.789
pass .1.2.3.4.5.6.789 /bin/bash /bin/myscript.sh
让我运行自定义脚本到 SNMP OID。我在 Windows 中有一个 powershell 脚本,我需要做同样的事情,如何/在哪里配置和设置它?
Box 是 Windows Server 2008(我认为是 R2)
答案1
据我所知,实现所需功能的唯一方法是实现 SNMP 扩展代理 (DLL)。可能已经有人实现了允许您执行任意命令的扩展代理(听起来很方便),但我对此并不熟悉。
Microsoft 有各种关于开发和安装 SNMP 扩展代理的文档。这里有一篇简洁明了的文章开发 SNMP 扩展代理在 CodeProject 也是如此。
允许任意定义要执行的命令的 SNMP 扩展代理肯定会很有趣,但我没有大量的空闲时间来编写它。
答案2
如上所述,我不知道在收到 SNMP 陷阱后会触发脚本的任何内容 - 除非您在 Windows 上安装了这样的守护进程,否则 Windows 本身不会充当陷阱接收器,它只能真正发送它们。
如果您在事件日志中注册事件时尝试执行某些操作,则最好使用 Windows Server 2008 的内置“将任务附加到此事件...”选项,右键单击事件日志中的任何事件时您都会看到该选项。
为了在记录事件时引发实际的 SNMP 陷阱,请查看事件驱动或者,如果你更喜欢使用 CLI事件命令
有几个程序 - 我过去使用过的一个是 What's Up Gold - 可以对收到的 SNMP 陷阱做出反应。
如果您认为我可以提供更多信息,请回复我。
-刘易斯
编辑:临时事件消费者可能对您有用,但它本质上需要一个脚本来连续运行,并且它使用 VBScript,因此您需要适应 PowerShell 或使您的 PowerShell 脚本适应 VBScript。看看:http://msdn.microsoft.com/en-us/library/aa392396(v=VS.85).aspx
本质上,该脚本监控事件日志,但概念是相同的。
sComputer = "."
Set oWMIService = GetObject("winmgmts:{(Security)}!\\" & sComputer & "\root\cimv2")
Set cEvents = oWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceCreationEvent WHERE " _
& "Targetinstance ISA 'Win32_NTLogEvent'")
Do
Set oEvent = cEvents.NextEvent
Select Case oEvent.TargetInstance.EventCode
Case "100"
Wscript.Echo "Event 100 occurred".
End Select
Loop
答案3
如果有人偶然发现这一点,目前似乎有许多适用于 Windows 的免费软件解决方案可以处理 SNMP 陷阱消息: