利用WMI实现系统补丁检测分析

WMI是Windows 2000/XP管理系统的核心;对于其它的Win32操作系统,WMI是一个有用的插件。WMI以CIMOM为基础,CIMOM即公共信息模型对象管理器 (Common Information Model Object Manager),是一个描述操作系统构成单元的对象数据库,为MMC和脚本程序提供了一个访问操作系统构成单元的公共接口。Windows 管理规范 (WMI) 是可伸缩的系统管理结构,它采用一个统一的、基于标准的、可扩展的面向对象接口。我在刚开始理解WMI的时候,总以为WMI是“Windows管理接口(Interface)”。

下面我们就详细来了解如何利用WMI实现补丁的检测过程。图1是整个检测过程的流程图。

图1.利用WMI实现补丁检测之流程图

第一步,设置需要检测的补丁号。我们知道,微软的每个补丁都会有一个标准的编号(如KB828741),对于最新的补丁,我们可以从微软的网站上获得。然后,将希望用户安装的补丁号放到一个数组里。根据不同Windows操作系统我们需要设置不同检测补丁号。基于当前Windows系统使用情况,我只对Windows 2000/2003/XP进行检测。
图1.利用WMI实现补丁检测之流程图
第一步,设置需要检测的补丁号。我们知道,微软的每个补丁都会有一个标准的编号(如KB828741),对于最新的补丁,我们可以从微软的网站上获得。然后,将希望用户安装的补丁号放到一个数组里。根据不同Windows操作系统我们需要设置不同检测补丁号。基于当前Windows系统使用情况,我只对Windows 2000/2003/XP进行检测。
‘ 对于windows 2000
arrFixed_WIN2K=Array("KB840315","KB870669","KB828741","KB835732",
"KB840987","KB841356","KB885835","KB885836",
"KB842526","KB841872","KB841873","KB889293")
'对windows 2003系统
arrFixed_WIN2K3=Array("KB834707","KB840374","KB867801","KB833987",
"KB873376","KB885835","KB885836")
'对于windows xp SP1
arrFixed_XP1=Array("KB840987","KB833987","KB839645","KB840315","KB841873","
KB873376","KB841356","KB889293","KB885835","KB885836")
'对于windows xp SP2
arrFixed_XP2=Array("KB834707","KB885835","KB885836")
第二步,创建WMI对象,并和目标主机建立连接。
Dim objWMIService // WMI对象
Dim strComputer = “.” // 地址为当前主机
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
首先,定义两个变量objWMIService和strComputer,第一个为我们要创建的服务定位对象,第二个为目标主机IP地址(如果为当前主机者为“.”)。第三句创建一个连接到目标主机的服务对象,定义名字空间参数为“root\cimv2”。在这个名字空间里有我们接下来要用的系统信息。
Socket:详细代码请看光盘附送的Check_patch.txt,更改文件扩展名txt为VBS,在Windows下可双击运行,如果当前系统检测出未打补丁,则出现提示窗口,否则无。
第三步,读取当前用户操作系统信息,及其安装补丁的情况。在名字空间“root/cimv2”下,实例“Win32_OperatingSystem”为我们提供了详细的当前操作系统信息。我们采用Wql(sql for WMI)来读取该实例,熟悉SQL语法的朋友一看就知道是在做什么了。
' 先判断主机系统信息:OS,SP补丁版本情况
' 获取系统信息
Dim objOSInfo // 获取操作系统信息
Dim intOSver,intOStype,intCurrentSP // 当前系统版本,类型,Service Pack号
Set objOSInfo = osvcRemote.ExecQuery("Select ServicePackMajorVersion,Version,OSType FROM Win32_OperatingSystem")
For Each colOSInfo In objOSInfo
intCurrentSP = colOSInfo.ServicePackMajorVersion ‘sp安全补丁版本
intOSver = colOSInfo.Version ‘操作系统版本号
intOStype = colOSInfo.OSType ‘操作系统类型
Next
Socket:如何知道要连接哪个名字空间,获得哪些对象呢?《WMI技术指南》[3]中分类列出了大量常用的对象。可惜它没有相应的电子书,你只有到书店里找它了。你也可以用WMITools里WMI CIM Studio这个工具的搜索功能,很容易就能找想要的对象。找到对象后,WMI CIM Studio能列出其属性和方法,然后到MSDN里找具体的帮助。
第四步,获取当前系统已经安装的补丁信息。在“root\cimv2”下,实例“Win32_QuickFixEngineering”下的“HotFixID”属性存放了当前系统所安装的补丁信息。
'*******************************************************************
'*读取目标主机已安装补丁列表到字符串strFixedList
'*******************************************************************
Dim colQFE, objQFE
Dim strHotFixID, strFixedList, strFind, strNoFixed
Set colQFE = osvcRemote.ExecQuery("SELECT HotFixID FROM Win32_QuickFixEngineering")
第四步,将读取的用户补丁号存到一数组变量,然后与我们在“第一步“定义的相应数组进行匹配,找出当前系统未安装的补丁号。这部分的实现比较简单,请参考后面的代码。
第五步,显示最后检测结果。
至此,整个补丁检测过程结束,只要将本脚本文件进行点击运行,就可以完成补丁的检查。特别是对于已经在企业中建立起Acitve Directory域的网络管理员来说,只要将此脚本添加到域控制器的组策略里,对每个登陆到域的用户进行补丁检测,提示用户最新补丁信息,再也不用为用户没有安装最新补丁而苦恼了,大大提高了企业内部网络安全管理。

(0)

相关推荐

  • 利用WMI实现系统补丁检测分析

    WMI是Windows 2000/XP管理系统的核心:对于其它的Win32操作系统,WMI是一个有用的插件.WMI以CIMOM为基础,CIMOM即公共信息模型对象管理器 (Common Information Model Object Manager),是一个描述操作系统构成单元的对象数据库,为MMC和脚本程序提供了一个访问操作系统构成单元的公共接口.Windows 管理规范 (WMI) 是可伸缩的系统管理结构,它采用一个统一的.基于标准的.可扩展的面向对象接口.我在刚开始理解WMI的时候,总以

  • C#利用WMI操作DNS服务器(可远程操作,需要相应权限)

    using System; using System.Collections.Generic; using System.Text; using System.Data; namespace Yaosansi {     class Test     {         static void Main()         {             MyDnsTEST();         } /// <summary>     /// MyDnsTEST功能测试   /// C#利用WMI

  • Python利用WMI实现ping命令的例子

    WMI是Windows系统的一大利器,Python的win32api库提供了对WMI的支持,安装win32api即可使用 WMI. 本例通过WMI的WQL实现ping命令. import wmi c = wmi.WMI() wql = "SELECT StatusCode FROM Win32_PingStatus WHERE Address = '127.0.0.1'" for i in c.query(wql): if i.StatusCode: print 'offline' e

  • OpenCV利用霍夫变换进行直线检测

    本文实例为大家分享了OpenCV利用霍夫变换进行直线检测的具体代码,供大家参考,具体内容如下 1.最简单的霍夫变换是在图像中识别直线.在平面直角坐标系(x-y)中,一条直线可以用下式表示:y=kx+b. 这表示参数平面(k-b)中的一条直线.因此,图像中的一个点对应参数平面中的一条直线,图像中的一条直线对应参数平面中的一个点.对图像上所有的点作霍夫变换,最终所要检测的直线对应的一定是参数平面中直线相交最多的那个点.这样就在图像中检测出了直线.在实际应用中,直线通常采用参数方程:p=x\cos\t

  • 利用Python如何实时检测自身内存占用

    前言 最近在做文本统计,用 Python 实现,遇到了一个比较有意思的难题--如何保存统计结果. 直接写入内存实在是放不下,十几个小时后内存耗尽,程序被迫关闭.如果直接写入数据库吧,每次写入又太慢了,本来就十几个小时了,这样下去就要往星期上数了,也不是个办法. 解决方案 最后,我想到了一个两者兼顾的方案--用内存做缓冲,达到一定量之后一次性将当前所有数据合并到硬盘里. 但这样就有一个阈值,如何确定同步硬盘的时机,通常可以按照文件粒度进行处理,比如处理一个语料文件同步一次--但我的语料有大有小,大

  • python利用opencv实现颜色检测

    本文实例为大家分享了python利用opencv实现颜色检测的具体代码,供大家参考,具体内容如下 需要实现倒车辅助标记检测的功能,倒车辅助标记颜色已经确定了,所以不需要使用深度学习的方法,那样成本太高了,直接可以使用颜色检测的方法. 1.首先需要确定待检测目标的HSV值 import cv2 img = cv2.imread('l3.png') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) hsv = cv2.cvtColor(img, cv2.COL

  • Android 利用OpenCV制作人脸检测APP

    目录 前言 第一步:下载并安装Android studio 第二步:下载SDK tools 第三步:新建一个Android APP项目 第四步:下载Opencv 第五步:导入OpenCV 第六步:添加代码 第七步:连接手机运行程序 前言 本篇文章手把手教大家使用OpenCV来实现一个能在安卓手机上运行的人脸检测APP.其实不仅仅是能检测人脸,还能检测鼻子,嘴巴,眼睛和耳朵.花了不少精力写这篇文章,希望点赞收藏关注. 无图无真相,先把APP运行的结果给大家看看. 如上图所示,APP运行后,点击"选

  • Android 利用OpenCV制作人脸检测APP

    目录 前言 第一步:下载并安装Android studio 第二步:下载SDK tools 第三步:新建一个Android APP项目 第四步:下载Opencv 第五步:导入OpenCV 第六步:添加代码 第七步:连接手机运行程序 前言 本篇文章手把手教大家使用OpenCV来实现一个能在安卓手机上运行的人脸检测APP.其实不仅仅是能检测人脸,还能检测鼻子,嘴巴,眼睛和耳朵.花了不少精力写这篇文章,希望点赞收藏关注. 无图无真相,先把APP运行的结果给大家看看. 如上图所示,APP运行后,点击"选

  • Android性能优化之利用强大的LeakCanary检测内存泄漏及解决办法

    前言: 最近公司C轮融资成功了,移动团队准备扩大一下,需要招聘Android开发工程师,陆陆续续面试了几位Android应聘者,面试过程中聊到性能优化中如何避免内存泄漏问题时,很少有人全面的回答上来.所以决定抽空学习总结一下这方面的知识,以及分享一下我们是如何检测内存泄漏的.我们公司使用开源框架LeakCanary来检测内存泄漏. 什么是内存泄漏? 有些对象只有有限的生命周期.当它们的任务完成之后,它们将被垃圾回收.如果在对象的生命周期本该结束的时候,这个对象还被一系列的引用,这就会导致内存泄漏

  • python利用OpenCV2实现人脸检测

    最近,带领我的学生进行一个URTP项目设计,需要进行人脸识别.由于现在的OpenCV已经到了2.X版本,因此就不想用原来的1.X版本的代码,而网上存在的代码都是1.X版本的代码,尝试自己写一段2.X版本的代码,反复查阅资料,今天终于测试成功(很明显2.X版本的代码要比1.X的代码更简单),供大家好参考,代码如下:(2017年5月12日在python3.6.1下做一简单的修改) import cv2 import numpy as np cv2.namedWindow("test")#命

随机推荐