vbs中对于getobject使用WMI的使用说明

简介:

WMI一

什么是WMI

WMI是Windows 2K/XP管理系统的核心;对于其他的Win32操作系统,WMI是一个有用的插件。有了WMI,工具软件和脚本程序访问操作系统的不同部分时不需要使用不同的API;相反,操作系统的不同部分都可以插入WMI

也就是说,利用WMI我们能更方便地管理 Windows 资源 — 例如磁盘、事件日志、文件、文件夹、文件系统、网络组件、操作系统设置、性能数据、打印机、进程、注册表设置、安全性、服务、共享、用户、组等等。。

二、对WMI中一些名词的解释

首先看到下面的一个例子,这段代码能够输出物理内存的大小(不是用已有的函数):

strComputer="."strComputer="."wbemServices = ObjGet("winmgmts:\\" & strComputer & "\root\cimv2")strComputer & "\root\cimv2")wbemObjectSet= wbemServices.InstancesOf("Win32LogicalMemoryConfiguration")ForwbemServices.InstancesOf("Win32LogicalMemoryConfiguration")ForwbemObject In wbemObjectSet ConsoleWrite("Total Physical Memory (kb): " &wbemObjectSet ConsoleWrite("Total Physical Memory (kb): " &wbemObject.TotalPhysicalMemory) Next

在对代码解释前,我先解释一下一些名词的含义:

对象:所谓对象,就是建立COM组件时的返回值,像$wbemServices就是,我们称之为SwbemServicesWMI服务对象,至于$wbemObjectSet则叫做SwbemObject类实例集合对象,后文我还会提到SwbemLocator教本库对象。它们的层级关系如下:SwbemLocator教本库对象→SwbemServicesWMI服务对象→SwbemObject类实例集合对象→SwbemObject类的实例。

属性:以wbemServices.InstancesOffwbemServices.InstancesOff为例,我们就说wbemServices对象的InstancesOff属性。

类:WMI能实现的操作有很多种,不同种类的操作都是分开的,我们称之为类,上面代码中的"Win32_LogicalMemoryConfiguration"就是一个类。

命名空间:类也分很多种,功能相近的类分在一起就是命名空间,比如说上面代码中的\root\cimv2。而另一个常用的命名空间是root\DEFAULT。例如,事件日志、性能计数器、Windows 安装程序和 Win32 提供程序都存储在 root\cimv2 命名空间中。另一方面,注册表提供程序存储在 root\DEFAULT 命名空间中。

集合:$wbemObjectSet的数据类型属于集合,用FOR...IN...能对其进行列举。

三、使用WMI的基本步骤

1.获取SwbemServicesWMI服务对象,或者说连接到目标计算机的命名空间

strComputer="."strComputer="."wbemServices = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")

2.获取类的集合对象

wbemObjectSet=wbemObjectSet=wbemServices.InstancesOf("Win32_LogicalMemoryConfiguration")

3.使用指定对象的属性进行操作

For wbemObjectInwbemObjectInwbemObjectSet ConsoleWrite("Total Physical Memory (kb): " & $wbemObject.TotalPhysicalMemory) Next

上面三步仅仅是对WMI操作的概括,实际操作时每一步都很复杂,下面将对这3步逐一进行讲解。

四、连接到命名空间的方法

方法1.用moniker名字法建立WMI服务的连接

这一方法也就是本文的例子所用到的,它的要点就是通过编写一个moniker字符串作为ObjGet函数的参数,然后返回一个SwbemServices对象。

关于moniker字符串的完整格式如下:

"winmgmts:[{SecuritySettings}!][\\ComputerName][\Namespace][:ClassName][.KeyProperty='Value']"

"winmgmts:"是前缀, 表示为WMI服务,必须使用;第二部分用来验证权限和假冒级别的,省略。第三部分为计算机名字:"\\.\"是本机的计算机名字,默认可省略,,其余同上;第四部分命名空间:缺省的命名空间为"root\CIMV2",默认可省略。也就是说我给的那个例子中的相关代码可简写为:$wbemServices = ObjGet("winmgmts:"),但我绝不建议这样做。

第五部分为类名。第六部分为属性值。注意:当该moniker字符串不包括最后2项时(即为:"winmgmts:[\\ComputerName][\Namespace]"),则ObjGet(moniker字符串)返回的是一个命名空间的已验证的连接(SwbemServices对象);当不包括最后1项时,返回的是一个类(SWbemObject对象);当包括最后2项时,返回的是一个类的单独实例(SWbemObject对象)。

方法2.通过建立SwbemLocator对象

这第二种方法我并不推荐,因为操作很繁琐,但是这种方法却能直观反应WMI操作的原理。下面是具体步骤:

1.建立SwbemLocator对象

$objLocator = ObjCreate("WbemScripting.SWbemLocator")

2.通过ConnectServer属性登录到目标计算机,下面的代码是登录到本机

objService=objService=objLocator.ConnectServer(".", "root\cimv2")

3.设置impersonation等级

$objService.Security_.ImpersonationLevel = 3

5.执行你的代码,还是以显示物理内存为例

objLocator=ObjCreate("WbemScripting.SWbemLocator")objLocator=ObjCreate("WbemScripting.SWbemLocator")objService = objLocator.ConnectServer(".","root\cimv2")objLocator.ConnectServer(".","root\cimv2")objService.Security_.ImpersonationLevel = 3
;和第一个例子不同,这里使用了ExecQuery属性来获取Win32_LogicalMemoryConfiguration类的对象 wbemObjectSet=wbemObjectSet=objService.ExecQuery("SELECT * FROM Win32_LogicalMemoryConfiguration")
For wbemObjectInwbemObjectInwbemObjectSet ConsoleWrite("Total Physical Memory (kb): " & $wbemObject.TotalPhysicalMemory) Next


本文转自hcy's workbench博客园博客,原文链接: http://www.cnblogs.com/alterhu/archive/2012/04/07/2435931.html ,如需转载请自行联系原作者。

目录
相关文章
|
2月前
|
安全 Windows
Windows系统实现exe服务注册的方法都有哪些?
【10月更文挑战第5天】Windows系统实现exe服务注册的方法都有哪些?
315 0
|
7月前
|
存储 运维 Java
PowerShell系列(八)PowerShell系统默认内置的Provider介绍
【2月更文挑战第3篇】Alias Provider用来标记其他命令的对象,一般用来标记命令中比较长的函数或者命令,也支持在PowerShell当中指定CMD Shell 中的命令的别名。其实目的都是通过较短的别名来简化一些命令的使用。
PowerShell系列(八)PowerShell系统默认内置的Provider介绍
|
7月前
|
存储 安全 数据库
PowerShell系列(七)PowerShell当中的Provider介绍
【2月更文挑战第2篇】PowerShell Provider是基于NetFrameWork运行的一个框架,它的作用是让数据(文件、注册表环境对象等等)以特殊的方式保存在PowerShell里面,然后可以直接通过脚本命令查看和管理这些数据。
PowerShell系列(七)PowerShell当中的Provider介绍
|
存储 网络协议 API
WMI介绍和实例使用
Windows Management Instrumentation 大多会被翻译为“Windows管理规范”,Instrumentation 含义为仪器仪表、器乐谱写等......
412 0
WMI介绍和实例使用
|
Python Windows
exe2hex - 使用Windows工具DEBUG.exe或PowerShell进行内联文件传输
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396425 ...
1526 0
|
数据安全/隐私保护 Windows