WMI 脚本高手不完全手册
程序员文章站
2022-06-23 21:05:07
windows 管理规范(windows management instrumentation)是一项核心的 windows 管理技术;用户可以使用 wmi 管理本地和远程...
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技术就介绍到这里,文章写得有些仓促,难免有问题,请各位多多指点小弟。
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技术就介绍到这里,文章写得有些仓促,难免有问题,请各位多多指点小弟。