Vbs
脚本编程简明教程之十三——
1<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
WMI基础之一
WMI
即
Windows
管理规范,是用户管理本地和远程计算机的一种模型。通过它可以访问、配置、管理和监视几乎所有的
Windows
资源。
WMI
的语法十分简单,基本上常见的命名空间、对象等用几乎一模一样。它对应的是
Windows
里的
WMI
服务(
winmgmt
)。
一、
WMI
的起源
几年前,几家资深的计算机公司由于系统管理领域缺少标准,委托
DMTF
启动了
CIM
(通用信息模型)项目,理想的
CIM
是一种不受限制于任何特定实现环境的管理工具。
WMI
是
CIM
的微软实现,它有很多类是从
CIM
中派生出来的。
二、
WMI
的命名空间
那么命名空间是做什么作用的呢?我简单这样说,在同一段代码中,如果有两个变量或函数的名字完全相同,就会出现冲突。命名空间就是为解决变量、函数的命名冲突而服务的。解决的办法就是将你的变量定义在一个不同名字的命名空间中。就好像财政局有个张三,公安局也有个张三,但我们清楚,就是因为他们分属不同的单位。有些地方可能不太准确,但大致意思就是这样了。
WMI
的命名空间创建了一个层次结构,有点类似于我们的目录文件结构。
1
、
root-
作为所有其他名字的占位符;
2
、
root\default-
与注册表操作有关的类;
3
、
root\security-
与系统安全有关的类;
4
、
root\cimv2-
从
CIM
派生的类,代表我们最常用的工作环境。
三、
WMI
的对象路径
WMI
的对象路径用来在
CIM
库中定位类和它的事例,对象路径用两个反斜杠
\\
开头,第一个元素是目标计算机的名字,第二个元素是相应的
WMI
命名空间,第三个元素是相应的类名,并用
:
将它与命名空间分隔开来。例如:
\\..\root\cimv2:win32_service
其中那个
.
代表是本地系统。
四、
WMI
的查询语言——
WQL
仅仅是
ANSI SQL
的一个子集,只能用于数据的提取。
数据、事件查询的基本语法为:
Select pro1 , pro2 , pro3 from myclass
(
myclassevent
)
例如:
Select name , path from Win32_share
说明:列出所有共享的名称和路径
也可以使用通配符
*
,例如:
Select * from Win32_share
关键字
Where
用于限定查询的范围。
例如:
Select * from Win32_share where name=
”
Admin
”
五、
WMI
脚本中使用的三个步骤
步骤
1
:连接到
WMI
服务
在任何
WMI
脚本中,第一个步骤都是建立一个到目标计算机上的
Windows
管理服务的连接。方法是调用
VBScript
的
Getobject
函数并将
WMI
脚本库的名字对象的名称(即“
winmgmts:
”,后跟目标计算机的名称)传递到
Getobject
,并返回一个对象的引用,此时,您就可以调用其提供的方法如:
InstancesOf
,正如方法名所示,
InstancesOf
返回由资源的类名标识的托管资源的所有实例。
步骤
2
:检索
WMI
托管资源的实例
一般采用
WQL
来实现。
步骤
3
:显示
WMI
托管资源的属性
最后一个步骤是枚举
检索得到集合的内容。一般采用
For each enum in myclass
……
Next
结构来实现。
六、
WMI
测试器
(wbemtest.exe)
验证脚本执行结果
现在,您对可用于浏览和查看
CIM
的工具已经有了一些认识,让我们使用
WMI
测试器
(wbemtest.exe)
来检查
Win32_Process
类定义,以便从在您的本地计算机上运行的进程检索一些属性。
1.
打开一个命令提示,键入
C:\>wbemtest.exe
,按下
Enter
来开始
WMI
测试器工具。请注意,大部分按钮在主
WMI
测试器窗口上是被禁用的,这说明此时您没有连接到
WMI
。
2.
单击
“连接”按钮
连接到本地或远程计算机上的
WMI
服务。显示“连接”对话框,它提供一个标记为
名称空间
的文本输入区域,该区域默认值为
root\default
。将
名称空间
区域的值更改为
root\cimv2
,单击“连接”对话框的
连接
按钮返回到主
WMI
测试器窗口。
3.
主窗口中左上角的命名空间标识符应该显示为
root\cimv2
。请注意,所有的按钮现在都已启用,这说明在当前凭据环境下,您已经成功连接到本地主机上的
WMI
。单击
枚举类别
打开“超类信息”对话框。
4.
在“超类信息”对话框中,不要填写
输入超类别名称
区域,单击
递归
选项,单击
确定
以枚举
root\cimv2
名称空间中定义的所有
CIM
类。
请注意,列于“查询结果”对话框顶部的类是以两个下划线为开头的。这些是系统类。系统类是预定义的
CIM
类,支持内部
WMI
配置与操作,例如提供程序注册、命名空间安全性及事件通知等。现在,忽略系统类,向下滚动“查询结果”对话框直至看到以
CIM_
开头的类。名称以
CIM_
开头的类是由
DMTF
维护的核心与公共基类。继续向下滚动直至到达以
Win32_
开头的类。
名称以
Win32_
开头的类是
Microsoft
扩展类,表示
Windows
特定的托管资源。如果这是您第一次检查
root\cimv2
命名空间,您可能希望熟悉
root\cimv2
命名空间中的类的完整集合,尤其是有
Win32_
前缀的类。
5.
向下滚动“查询结果”对话框直至到达
Win32_Process
类,双击该类名打开
Win32_Process
对话框的对象编辑器。
6.
“对象编辑器”对话框显示被选定类的定义和实现的详细信息(属性和方法)。选择
Hide System Properties
复选框隐藏系统属性。剩余的
Win32_Process
属性表示您可以从在本地或远程计算机上运行的进程检索的信息。
运行如下代码:
strComputer = "."
Set wbemServices = Getobject("winmgmts:\\" & strComputer)
Set wbemObjectSet = wbemServices.InstancesOf("Win32_Process")
For Each wbemObject In wbemObjectSet
WScript.Echo "Name: " & wbemObject.Name & vbCrLf & _
" Handle: " & wbemObject.Handle & vbCrLf & _
" Process ID: " & wbemObject.ProcessID
Next
7.
在运行脚本之后,您可以用
WIMI
测试器验证脚本的结果。在
Win32_Process
对话框的对象编辑器中,单击
Instances
。产生的查询结果对话框列出在计算机上运行的进程的实例。双击一个指定的进程实例,查看该实例的详细信息。
Vbs
脚本编程简明教程之十三——
2
WMI基础之二—阻止客人运行你不想运行的程序
很多人都有这样的经验,刚刚装好的系统,让人运行了一些你不想他运行的程序,比如说
QQ
,又是聊天,又是下载表情,不过一会,流氓插件、病毒、木马已经盘踞了你的计算机,常常是忍痛将这个程序卸载,可是不知情的人很自觉的下载安装,使整个系统无法正常运行。
其实用
vbs
和
wmi
结合起来,使你的计算机上有相应的程序安装,别人又无法运行起来太容易了,现在给出代码:
On Error Resume Next '
忽略所有的错误
Dim bag,pipe,honker,good
Do
good="." '
定义为本地计算机
set bag=getobject("winmgmts:\\"& good &"\root\cimv2") 'l
连接到
cimv2
命名空间
set pipe=bag.execquery("select * from win32_process where name='qq.exe' or name='qqgame.exe' or name='winmine.exe'") '
看,这是我的计算机上不允许运行的程序,
qq
、
qqgame
、
winmine
(扫雷)如果你还有其他的程序不允许运行,很简单,在其中添加
or name='
你不允许运行的程序名
'
for each i in pipe
i.terminate()
msgbox "
发现盗版系统,现已进行功能限制!
" & vbcrlf & "
请使用正版软件!
",,"
微软提示
" '
此行其实可有可无,有这行只是为了免去怀疑
next
wscript.sleep 60000 '
每
1
分钟检测一次
loop
那么如果我自己想运行这些程序该怎么办呢
,
很简单,
Ctrl+Alt+Del
三个键齐按,打开
windows
任务管理器,在进程中结束
Wscript.exe
和
wmiprvse.exe
进程的运行就可以了
本文转自 chengchow 51CTO博客,原文链接:http://blog.51cto.com/chengchow/886816,如需转载请自行联系原作者