WMI是面向对象设计的,windows结构或windows管理设备术语就显容易,我们可以借助微软熟悉名字空间、类、实例和它们之间的联合的复杂的层次结构。
这章主要介绍一些工具,通过工具去认识什么是WMI技术。
3.1 访问WMI
首先我们谈谈访问WMI的方法:直接方法:1、使用程序设计语言。2、基于COM/DCOM使用脚本语言(比如VBScript、JScript或VBA)
,通过脚本API与CIM对象管理器通信。间接方法:1、带ActiveX控制的IE。2、IE中包含超链接的HTML页。3、通过WMI ODBC适配器(
WBEM ODBC驱动器)的ODBC连接和WQL查询。这种方法对于任何与ODBC有关的应用程序(比如Microsoft Word等)来说是可用的。4、
WMI ADSI扩展,他们通过Windows2000域控制器上的活动目录LDAP获取的信息访问WMI。5、用于模式和实例处理的被管理对象格式(MOF)和mofcomp.exe。
3.2 WMI软件开发包
首先请记住我们的软件开发包工具WMI SDK
下载地址为:http://msdn.microsoft.com/downloads/sdka/wmi/download.asp
WMI SDK工具4个主要的工具是:
WMI对象浏览器
WMI CIM Studio
WMI 事件注册工具
WMI 事件浏览器
前三个工具基本上是Internet Explorer主机环境中运行的HTML页面,它们含有ActiveX控制和VBScript脚本内容,第4个是一个独立的执行文件。一旦你启动这些工具中的任何一个,将需要确定你想连接的名字空间(默认是/root/CIMV2),也可以访问bubble计算机上的root/default名字空间,可以建入//bubble/root/default,也可以使用如下格式//计算机/root/名字空间/名字空间.
表现形式例如:Win32_ComputerSystem.Name = "//你的计算机名",它的表现形式是Class.Key = "value"
下面主要将通过win2000自身的测试程序可以访问具体的WMI,请注意我只介绍这一种方式,因为他是最容易也是最快实现学习WMI的方式,嘿嘿
直接在运行里输入“wbemtest.ext”你就可以看到一个登录界面,此时你只序理解
root/CIMV2
root/DEFAULT
root/director
root/SECURITY
root/WMI
通过上面的空间命名,我们可以找到我们想要的东西,比如,我们连接root/CIMV2,然后直接点击登录,就可以等进去了
然后我们在点击“枚举实例”,在输入框中输入Win32_bios,我们再通过MOF显示,就的到了如下实例全部定义了,呵呵。
instance of Win32_BIOS
{
BiosCharacteristics = {7, 9, 10, 11, 12, 14, 15, 16, 17, 19, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34,
40};
Caption = "Award Plug and Play BIOS Extension v1.0A";
CurrentLanguage = "en|US|iso8859-1";
Description = "Award Plug and Play BIOS Extension v1.0A";
InstallableLanguages = 1;
ListOfLanguages = {"en|US|iso8859-1"};
Manufacturer = "Award Software, Inc.";
Name = "Award Plug and Play BIOS Extension v1.0A";
PrimaryBIOS = TRUE;
ReleaseDate = "20030314******.******+***";
SerialNumber = "SYS-1234567890";
SMBIOSBIOSVersion = "ASUS P4B266-C ACPI BIOS Revision 1006";
SMBIOSMajorVersion = 2;
SMBIOSMinorVersion = 3;
SMBIOSPresent = TRUE;
SoftwareElementID = "Award Plug and Play BIOS Extension v1.0A";
SoftwareElementState = 3;
Status = "OK";
TargetOperatingSystem = 0;
Version = "Award Medallion BIOS v6.0";
};
或着我们也可以选择WQL来进行查询,但是命令就是要复杂一些了,呵呵,同样在连接到刚才的命名空间下点击“查询”
我们就可以使用WQL了,然后在输入框里直接输入“select * from win32_service”得到如下的东西
就是我们计算机全部的系统服务的列表,呵呵,然后任意查询下,就可以得到win32_service的用法了
instance of Win32_Service
{
AcceptPause = FALSE;
AcceptStop = FALSE;
Caption = "Alerter";
CheckPoint = 0;
CreationClassName = "Win32_Service";
Description = "Alerter";
DesktopInteract = FALSE;
DisplayName = "Alerter";
ErrorControl = "Normal";
ExitCode = 1077;
Name = "Alerter";
PathName = "C://WINNT//System32//services.exe";
ProcessId = 0;
ServiceSpecificExitCode = 0;
ServiceType = "Share Process";
Started = FALSE;
StartMode = "Manual";
StartName = "LocalSystem";
State = "Stopped";
Status = "OK";
SystemCreationClassName = "Win32_ComputerSystem";
SystemName = "BUBBLE";
TagId = 0;
WaitHint = 0;
};
以上就是我们在win2000上直接访问WMI的过程和一些实例的介绍,呵呵。
今天就到这里了,还有下一章主要讲的是WMI做为一个COM对象模型,其中有各种不同的属性和方法可以通过脚本访问,说白了就是使用脚本访问我们可爱的WMI。