使用WMI得到计算机的信息
WMI是一项行业推荐规范,旨在为访问企业环境中的管理信息而开发一种标准化技术。该信息包括系统内存的状态、当前安装的客户应用程序清单,以及有关客户端状态的其他数据。
WMI是可伸缩的系统管理结构,该规范采用一个统一、基于标准且可扩展的面向对象接口。它提供与系统管理员信息和基础WMIAPI交互的标准方法,主要由系统管理应用程序开发人员和系统管理员用来访问和操作系统管理信息。
WMI可用来生成组织和管理系统信息的工具,使系统管理人员能够更密切的监视系统活动。
WMI提供了一套内置在MicrosoftWindows操作系统中的丰富的系统管理服务,现在有大量的应用程序、服务和设备用其为信息技术操作和产品支持组织提供全方位的管理功能。基于WMI的管理系统的使用带来了更可靠的计算环境和更高的系统可靠性,从而节省了企业的开销。
WMI提供的大量的规范为许多高端应用程序,例如MicrosoftExchange、MicrosoftSQLServer和MicrosoftInternet信息服务(IIS)等实现如下管理任务。
1.监视应用程序的运行情况
2.检测瓶颈或故障
3.管理和配置应用程序
4.查询应用程序数据(使用对象关系的遍历和查询)
5.执行无缝的本地或远程管理操作
下面我们通过一个例子来说明WMI的强大功能。以vb6为列:
引用”MicrosoftWMIScriptingV1.1Library”
代码如下:
OptionExplicit DimWithEventsSinkAsSWbemSink DimjAsInteger '功能:利用wmi组件得到计算机的信息,每一个小功能分开写,便于大家查阅 PrivateSubcmdDone_Click() DimoWMINameSpaceAsSWbemServices DimoLogicalDiskSetAsSWbemObjectSet DimoLogicalDiskAsSWbemObject DimObjSetAsVariant DimsDriveAsString DimsValueAsString DimdblSizeAsDouble DimObjAsVariant DimlIndexAsLong SetoWMINameSpace=GetObject("winmgmts:") '得到驱动器的信息 OnErrorResumeNext SetObjSet=oWMINameSpace.InstancesOf("Win32_DiskDrive") ForEachObjInObjSet List5.AddItemObj.Caption&"-"&BytesToMegabytes(Obj.Size)&"GB" Next '得到每一个驱动器的详细信息 OnErrorGoToErrorHandler 'SetoWMINameSpace=GetObject("winmgmts:") SetoLogicalDiskSet=oWMINameSpace.InstancesOf("Win32_LogicalDisk") ForEachoLogicalDiskInoLogicalDiskSet OnErrorResumeNext sDrive=oLogicalDisk.deviceid ListView1.ListItems.Add,,sDrive lIndex=ListView1.ListItems.Count sValue=oLogicalDisk.Description&"" ListView1.ListItems(lIndex).SubItems(1)=sValue sValue=oLogicalDisk.FileSystem&"" ListView1.ListItems(lIndex).SubItems(2)=sValue sValue=oLogicalDisk.VolumeName&"" ListView1.ListItems(lIndex).SubItems(3)=sValue sValue=oLogicalDisk.VolumeSerialNumber&"" ListView1.ListItems(lIndex).SubItems(4)=sValue sValue=oLogicalDisk.Size&"" IfIsNumeric(sValue)Then dblSize=BytesToMegabytes(CDbl(sValue)) sValue=CStr(dblSize)&"MB" EndIf ListView1.ListItems(lIndex).SubItems(5)=sValue Next CleanUp: SetoLogicalDisk=Nothing SetoLogicalDiskSet=Nothing SetoWMINameSpace=Nothing ExitSub ErrorHandler: MsgBox""&Err.Description GoToCleanUp EndSub PrivateSubCommand1_Click() UnloadMe EndSub PrivateFunctionBytesToMegabytes(BytesAsDouble)AsDouble DimdblAnsAsDouble dblAns=(Bytes/1024)/1024 BytesToMegabytes=Format(dblAns,"###,###,##0.00") EndFunction PrivateSubCommand2_Click() DimoWMINameSpaceAsSWbemServices DimSystemSetAsVariant DimSystemAsVariant DimObjSetAsVariant DimObjAsVariant SetoWMINameSpace=GetObject("winmgmts:") '操作系统 SetSystemSet=oWMINameSpace.InstancesOf("Win32_OperatingSystem") ForEachSystemInSystemSet List1.AddItemSystem.Caption List1.AddItemSystem.Manufacturer List1.AddItemSystem.BuildType&“”‘Win9x下好像取不出来 List1.AddItemSystem.Version List1.AddItemSystem.SerialNumber Next 'cpu SetObjSet=oWMINameSpace.InstancesOf("Win32_Processor") ForEachObjInObjSet List2.AddItemObj.Caption List2.AddItemObj.currentclockspeed&"Mhz" Next EndSub PrivateSubCommand3_Click() DimoWMINameSpaceAsSWbemServices DimObjSetAsVariant DimObjAsVariant DimAdapterAsVariant '内存 SetoWMINameSpace=GetObject("winmgmts:") SetObjSet=oWMINameSpace.InstancesOf("Win32_PhysicalMemory") DimiAsString ForEachObjInObjSet List3.AddItemBytesToMegabytes(Obj.capacity)&"MB"&"Chip" Next '网卡 SetSink=NewSWbemSink SetAdapter=GetObject("winmgmts:") Adapter.InstancesOfAsyncSink,"Win32_NetworkAdapter" EndSub PrivateSubForm_Load() j=0 EndSub PrivateSubSink_OnObjectReady(ByValobjWbemObjectAsWbemScripting.ISWbemObject,ByValobjWbemAsyncContextAsWbemScripting.ISWbemNamedValueSet) DimAdapterAsVariant ‘得到所有的适配器信息 SetAdapter=GetObject("winmgmts:Win32_NetworkAdapterConfiguration="&j&"") List4.AddItemAdapter.Description IfIsNull(Adapter.MACAddress)Then List4.AddItem"NoMACAddress" List4.AddItem"" Else List4.AddItem"Mac:"&Adapter.MACAddress List4.AddItem"" EndIf j=j+1 EndSub
这篇文章就介绍到这,更多的内容大家可以参考这篇文章:http://technet.microsoft.com/en-us/library/ee198932.aspx