使用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