Vbs脚本编程简明教程之十三

简介:
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,如需转载请自行联系原作者
目录
相关文章
|
7月前
|
Ubuntu 安全 Linux
【Linux命令行艺术】1. 初见命令行
【Linux命令行艺术】1. 初见命令行
|
Shell 测试技术
把书读薄-Shell入门基础
把书读薄-Shell入门基础
87 0
|
存储 架构师 Shell
6条shell小技巧,让脚本显得不再业余(1分钟系列)
本篇文章源自Google的一篇实践,抽取了部分1分钟能读完的内容,加入了一些分析。
505 0
6条shell小技巧,让脚本显得不再业余(1分钟系列)
|
SQL XML 数据安全/隐私保护
|
Windows 数据格式 XML