本文共 4024 字,大约阅读时间需要 13 分钟。
Vbs 脚本编程简明教程之十三—— 1<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> WMI基础之一
WMI 即 Windows 管理规范,是用户管理本地和远程计算机的一种模型。通过它可以访问、配置、管理和监视几乎所有的 Windows 资源。 WMI 的语法十分简单,基本上常见的命名空间、对象等用几乎一模一样。它对应的是 Windows 里的 WMI 服务( winmgmt )。 几年前,几家资深的计算机公司由于系统管理领域缺少标准,委托 DMTF 启动了 CIM (通用信息模型)项目,理想的 CIM 是一种不受限制于任何特定实现环境的管理工具。 WMI 是 CIM 的微软实现,它有很多类是从 CIM 中派生出来的。 那么命名空间是做什么作用的呢?我简单这样说,在同一段代码中,如果有两个变量或函数的名字完全相同,就会出现冲突。命名空间就是为解决变量、函数的命名冲突而服务的。解决的办法就是将你的变量定义在一个不同名字的命名空间中。就好像财政局有个张三,公安局也有个张三,但我们清楚,就是因为他们分属不同的单位。有些地方可能不太准确,但大致意思就是这样了。 WMI 的命名空间创建了一个层次结构,有点类似于我们的目录文件结构。 2 、 root\default- 与注册表操作有关的类; 3 、 root\security- 与系统安全有关的类; 4 、 root\cimv2- 从 CIM 派生的类,代表我们最常用的工作环境。 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 例如: Select * from Win32_share where name= ” Admin ” 在任何 WMI 脚本中,第一个步骤都是建立一个到目标计算机上的 Windows 管理服务的连接。方法是调用 VBScript 的 Getobject 函数并将 WMI 脚本库的名字对象的名称(即“ winmgmts: ”,后跟目标计算机的名称)传递到 Getobject ,并返回一个对象的引用,此时,您就可以调用其提供的方法如: InstancesOf ,正如方法名所示, InstancesOf 返回由资源的类名标识的托管资源的所有实例。 六、 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 属性表示您可以从在本地或远程计算机上运行的进程检索的信息。 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 7. 在运行脚本之后,您可以用 WIMI 测试器验证脚本的结果。在 Win32_Process 对话框的对象编辑器中,单击 Instances 。产生的查询结果对话框列出在计算机上运行的进程的实例。双击一个指定的进程实例,查看该实例的详细信息。 WMI基础之二—阻止客人运行你不想运行的程序
很多人都有这样的经验,刚刚装好的系统,让人运行了一些你不想他运行的程序,比如说 QQ ,又是聊天,又是下载表情,不过一会,流氓插件、病毒、木马已经盘踞了你的计算机,常常是忍痛将这个程序卸载,可是不知情的人很自觉的下载安装,使整个系统无法正常运行。 其实用 vbs 和 wmi 结合起来,使你的计算机上有相应的程序安装,别人又无法运行起来太容易了,现在给出代码: On Error Resume Next ' 忽略所有的错误 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=' 你不允许运行的程序名 ' msgbox " 发现盗版系统,现已进行功能限制! " & vbcrlf & " 请使用正版软件! ",," 微软提示 " ' 此行其实可有可无,有这行只是为了免去怀疑 wscript.sleep 60000 ' 每 1 分钟检测一次 那么如果我自己想运行这些程序该怎么办呢 , 很简单, Ctrl+Alt+Del 三个键齐按,打开 windows 任务管理器,在进程中结束 Wscript.exe 和 wmiprvse.exe 进程的运行就可以了 本文转自 chengchow 51CTO博客,原文链接:http://blog.51cto.com/chengchow/886816,如需转载请自行联系原作者