Windows计划任务状态监控

2018年4月23日 星期一

08:17

其实脚本早就写好了,但是一直没有根据知识体系进行拆分(我都写到一块去了)

需求

需要监控Windows中计划任务的执行状态,主要包括上一次的执行结果和计划任务状态。如下图所示。

Windows计划任务状态监控_第1张图片
Windows计划任务

思路

计划任务的监控很简单也可以很难。简单在于你可以直接监控某任务,复杂在于自动发现并进行监控。

和运维人员了解了下,大家监控的计划任务不止一个,为了省时省力,减少配置工作量,所以计划采用自动发现的方式来监控了。

上面这条的主要原因就是,端口监控被团队的一个人员搞得惨不忍睹。

自动发现(Discover)

如何进行自动发现,这是个Zabbix的词汇,也暴露了我们内部使用的监控系统了。

Zabbix自动发现原理就是调用Agent一个Key,Agent返回自动发现脚本执行的结果。

通常,自动发现的结果如下,是个JSON格式的东东:

{
    "data" : [
        {"{#NAME}": "Name1"},
        {"{#NAME}": "Name2"}
    ]
}

这里的{#NAME}就是我们在Zabbix中要引用的Key,我们要保证尽量不重名(虽然没这个规定,但是没看过代码,不确定Zabbix会不会抽个疯)。

我这里计划返回的结果是这样子的:

{
    "data" : [
        {"{#SCHTASKNAME}": "TaskName1"},
        {"{#SCHTASKNAME}": "TaskName2"}
    ]
}

如何实现?

上面简单的介绍了下自动发现的原理,后面就好办了。因为Zabbix没有自带的计划任务接口,所以得我们自己编写脚本。

实现步骤分为三步:

  1. 通过脚本获取符合条件的计划任务列表;
  2. 通过脚本查询指定计划任务状态上次运行结果
  3. 根据返回的结果,设置合适的触发器进行告警;

具体实施

各位看官,我本来计划用一篇文章全部说完的,但是没想到,Windows的各种问题导致我用了几种方法才解决。

具体方法如下:

  1. batch通过schtasks.exe进行计划任务进行采集;
  2. powershell通过cmdlet进行计划任务信息采集;
  3. powershell通过COM对象进行计划任务信息采集;

第3条路再不通的话,我计划试试vbs或者直接DotNet写程序了。

因为问题解决了,所以就不再絮絮叨叨了。

参考

其实参考内容挺多的,主要是各种疑难杂症的处理。

  • Get-ScheduledTask
  • Get-ScheduledTaskInfo
  • 批处理命令中的chcp 命令字符集与别名汇总
  • Status of Scheduled Task
  • 批处理中如何判断传进来的参数是否为空
  • Zabbix监控(八):自动监控windows端口
  • DOS批处理命令-字符串操作
  • Dos批处理命令拼接字符串的问题
  • How can I retrieve the status of a scheduled task using schtasks?
  • Schtasks 计划任务参数 详解
  • 常用批处理命令总结3之Find和FindStr
  • schtasks错误: 无法加载列资源。
  • 困扰了我数个昼夜的Windows 7 “幽灵现象”【仍未解决,待高人指点】
  • Get scheduled tasks from remote computer

你可能感兴趣的:(Windows计划任务状态监控)