WMI 脚本高手不完全手册

所属分类: 脚本专栏 / vbs 阅读数: 866
收藏 0 赞 0 分享
Windows 管理规范(Windows Management Instrumentation)是一项核心的 Windows 管理技术;用户可以使用 WMI 管理本地和远程计算机。WMI 通过编程和脚本语言为日常管理提供了一条连续一致的途径。用户可以:
1.在远程计算机器上启动一个进程。
2.设定一个在特定日期和时间运行的进程。
3.远程启动计算机。
4.获得本地或远程计算机的已安装程序列表。
5.查询本地或远程计算机的 Windows 事件日志。
而WMI适用的运得环境也是有些限制的,WMI 适用于所有最新版本的 Windows。WMI 附带在 Windows Me、Windows 2000、Windows XP 和 Windows Server 2003 之中。
对于 Windows 98 和 Windows NT 4.0,可以访问http://www.microsoft.com/downloads并搜索“Windows Management Instrumentation (WMI) CORE 1.5 (Windows 95/98/NT 4.0)”。 或直接脚本之家本站下载
注意:在 Windows NT 4.0 上安装并运行 WMI 之前,需要首先安装 Service Pack 4 或更高版本。
WMI 需要的其他软件包括:
1. Microsoft Internet Explorer 5.0 或更高版本。
2. Windows script Host(WSH)。Windows 2000、Windows XP、Windows Server 2003、和 Windows Me 附带的 WSH,而不是 Windows NT4 或 Windows 98 附带的 WSH。您可以从以下地址下载 WSH http://www.microsoft.com/downloads. WSH 的最新版本—— 包括在 Windows XP 和 Windows Server 2003 之中——是 WSH 5.6。
要使WMI脚本可以正常的运行,Windows里的WMI 服务(winmgmt)保证是运行的,这样才可以实现WMI里的更多功能。
好了,关于WMI的一些基本的信息资料就说到这,要想看更多的可以到MicroSoft网站的MSDN找。下面就简单的讲一下WMI脚本编写的基本要素,看看下面的代码:
//这个脚本是查看系统启动的引导配置参数,下面我们来看看关于WMI脚本编写的架构。
On Error Resume Next
//下面这行是比较重要的,它定义了主机的变量,可以是本机或远程主机,域上的机等,参数英文的“.”是表示本机,要想实现其它机的可以填上其它机的主机名或IP。
strComputer = "."
//下面这行是通过GetObject得到主机的WMI对象管理空间“\root\cimv2”,如果是本机的是通过NT(Authentication)认证的,所以可以不用用户名和密码,而对于非本机或非域机的就要再加多几条参数,
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
//执行WMI数据对象的查询
//至于连接远程的要用下面的语句
Set objLocator = CreateObject("Wbemscripting.SWbemLocator")
Set objService = objLocator.ConnectServer(strComputer, "root\cimv2", "administrator", "a")
Set colItems = objWMIService.ExecQuery("Select * from Win32_BootConfiguration",,48)


//利用数组列出相关
For Each objItem in colItems
Wscript.Echo "BootDirectory: " & objItem.BootDirectory
Next
从上面的例子可以看出写一个WMI的要求:
1.得到主机的WMI对像管理空间
2.执行WMI数据对象的查询
3.利用数组列出相关
学习编写的架构并不难,只要练多几次就行了,但是学习WMI的第一个难题就是它的子集对象,因为我们并不知道它的子集对象是什么,这样写起程序来就会力不从心了。要一下子知道这样子集的对象也是不难的,只要在MicroSoft的MSDN找找会有不少,但是这样找下去的话可能要找很久或资料不够全,是不是有些难呢?其实MicroSoft公司的网站上有一个叫“scriptomatic”的工具,才100多K,解压后你们发觉真正有用的是那个才12k的“scriptomatic.hta”文件,双击打开后你会发觉是一个子集的数据列表,且还有例子呢。


以上就是查询“Win32_BIOS”里的子集参数,是不是很易实现WMI脚本的编写呢?
朋友们,可曾记得大半年前是不是有一个这样的漏洞:就是一个GUEST用户权限可以用WMI的脚本实现加账号的例子,其实就是一个WMI 命名空间的安全性出现问题。下面我们打开计算机上的MMC看看如何设置WMI的安全权限。
在运行菜单上打“MMC”,然后在“文件”菜单上选“添加/删除管理单元”,然后在“独立”的选项卡(默认)上按“添加”,之后来到“添加独立管理单元”列表。
然后就一路按“添加”、“确定”就可以了。返回到MMC的主介面上,然后右击“WMI”单元选“属性”。
在WMI控件属性对话框中单击安全选项卡。
一个名为Root,前面带加号(+)的文件夹将会出现。如果必要,展开这个树状结构,定位到想要设置权限的命名空间。
单击安全设置按钮。一组用户和权限显示出来。如果用户在这个列表中,请按照需要修改权限。如果用户不再这个列表中,请单击 添加 按钮,然后从账户所在的位置(本地计算机、域等等)添加用户。
小提示:
为了查看和设置 NameSpace 安全性,用户必需拥有读取安全设置 和 编辑安全设置 权限。系统管理员默认具备这些权限,并可以按照需要将权限赋予其他用户如果一个用户需要远程访问命名空间,必须为其选中远程启用权限。
默认情况下,针对一个命名空间设置的用户权限只对该命名空间有效。如果希望用户可以访问该命名空间和其下所有子命名空间,或者只能访问子命名空间,请单击高级按钮。单击编辑并在出现的对话框中指定允许访问的范围。这样就可以防止此类事情的发生,但是透过此类的WMI命名空间的安全设置,也可以成为黑手会配置后门的地方,所以在架建一个安全的系统,这里不能不看。今天的WMI技术就介绍到这里,文章写得有些仓促,难免有问题,请各位多多指点小弟。
更多精彩内容其他人还在看

vbscript禁用 启用fso的方法

启用:regsvr32 scrrun.dll 禁用:regsvr32 /u scrrun.dll
收藏 0 赞 0 分享

getSQLinfo.vbs 获得SQL数据/日志空间使用情况的脚本

这个脚本可以获取SQL数据/日志的空间使用情况方便及时了解sql使用空间情况
收藏 0 赞 0 分享

高手必看的vbs的至尊境界

vbs高手总结出来的,看来我们真忽略了他的真正强大的地方
收藏 0 赞 0 分享

vbs 获取radmin注册表中的信息

用这个脚本真的很方便,轻松的获取radmin注册表中的信息 ,想想以前我们都是用cmd下导出注册表信息
收藏 0 赞 0 分享

vbs解答一道初中数学题i,x,y

vbs解答 一道初中数学题 i+100=x^2 i+168=y^2 求 i,x,y
收藏 0 赞 0 分享

vbs之自动安装驱动程序

目前各类万能驱动程序包在网络上屡见发布,在使用这些程序包的同时,我们不仅会问:为什么这些程序包中的驱动程序可以在安装新硬件之后自动安装呢?
收藏 0 赞 0 分享

vbs Windows系统改变或修改网卡的MAC地址的脚本与软件

这个文件比程序本身还大,感觉不爽,于是本人的VBS版MAC修改代码便诞生了,在使用过程中如果出现不能上网的情况得返回一下网卡驱动(有些机器比较特别)
收藏 0 赞 0 分享

让IIS建立的站点默认是.net 2.0的,而不是.net 1.1的代码

让IIS建立的站点默认是.net 2.0的,而不是.net 1.1的,没有使用WMI,所以在操作前先得停止IIS相关服务
收藏 0 赞 0 分享

VBS利用SendKeys输入中文字符的方法

Author:Trajon.BWL今天在网上随便闲逛,逛到一个帖子,这位迷茫的朋友想知道该怎么使用SendKeys的vbs方法来输入中文字符
收藏 0 赞 0 分享

vbs加administrator用户的代码

使用ADSI的Winnt对象,Windows2000后面的系统都属于NT系列
收藏 0 赞 0 分享
查看更多