使用WMI得到計算機的信息

WMI是一項行業推薦規範,旨在爲訪問企業環境中的管理信息而開發一種標準化技術。該信息包括系統內存的狀態、當前安裝的客戶應用程序清單,以及有關客戶端狀態的其他數據

WMI是一項行業推薦規範,旨在爲訪問企業環境中的管理信息而開發一種標準化技術。該信息包括系統內存的狀態、當前安裝的客戶應用程序清單,以及有關客戶端狀態的其他數據。
WMI是可伸縮的系統管理結構,該規範採用一個統一、基於標準且可擴展的面向對象接口。它提供與系統管理員信息和基礎WMI API交互的標準方法,主要由系統管理應用程序開發人員和系統管理員用來訪問和操作系統管理信息。
WMI可用來生成組織和管理系統信息的工具,使系統管理人員能夠更密切的監視系統活動。
WMI提供了一套內置在Microsoft Windows操作系統中的豐富的系統管理服務,現在有大量的應用程序、服務和設備用其爲信息技術操作和產品支持組織提供全方位的管理功能。基於WMI的管理系統的使用帶來了更可靠的計算環境和更高的系統可靠性,從而節省了企業的開銷。
WMI提供的大量的規範爲許多高端應用程序,例如Microsoft Exchange、Microsoft SQL Server和Microsoft Internet信息服務(IIS)等實現如下管理任務。
1. 監視應用程序的運行情況
2. 檢測瓶頸或故障
3. 管理和配置應用程序
4. 查詢應用程序數據(使用對象關係的遍歷和查詢)
5. 執行無縫的本地或遠程管理操作

下面我們通過一個例子來說明WMI的強大功能。以vb6爲列:
引用”Microsoft WMI Scripting V1.1 Library”
代碼如下:

Option Explicit
Dim WithEvents Sink As SWbemSink
Dim j As Integer
'功能:利用wmi組件得到計算機的信息,每一個小功能分開寫,便於大家查閱
 
Private Sub cmdDone_Click()
Dim oWMINameSpace As SWbemServices
Dim oLogicalDiskSet As SWbemObjectSet
Dim oLogicalDisk As SWbemObject
 
Dim ObjSet As Variant
Dim sDrive As String
Dim sValue As String
Dim dblSize As Double
Dim Obj As Variant
 
Dim lIndex As Long
 
Set oWMINameSpace = GetObject("winmgmts:")
 
'得到驅動器的信息
On Error Resume Next
Set ObjSet = oWMINameSpace.InstancesOf("Win32_DiskDrive")
 
For Each Obj In ObjSet
 List5.AddItem Obj.Caption & " - " & BytesToMegabytes(Obj.Size) & " GB"
Next
 
 
'得到每一個驅動器的詳細信息
On Error GoTo ErrorHandler
'Set oWMINameSpace = GetObject("winmgmts:")
Set oLogicalDiskSet = oWMINameSpace.InstancesOf("Win32_LogicalDisk")
For Each oLogicalDisk In oLogicalDiskSet
  On Error Resume Next
 
  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 & ""
  If IsNumeric(sValue) Then
dblSize = BytesToMegabytes(CDbl(sValue))
sValue = CStr(dblSize) & " MB"
  End If
  
  ListView1.ListItems(lIndex).SubItems(5) = sValue
Next
  
 
 
CleanUp:
Set oLogicalDisk = Nothing
Set oLogicalDiskSet = Nothing
Set oWMINameSpace = Nothing
Exit Sub
 
ErrorHandler:
MsgBox "" & Err.Description
 
GoTo CleanUp
 
End Sub
 
Private Sub Command1_Click()
Unload Me
End Sub
 
Private Function BytesToMegabytes(Bytes As Double) As Double
 Dim dblAns As Double
 dblAns = (Bytes / 1024) / 1024
 BytesToMegabytes = Format(dblAns, "###,###,##0.00")
End Function
 
Private Sub Command2_Click()
Dim oWMINameSpace As SWbemServices
Dim SystemSet As Variant
Dim System As Variant
Dim ObjSet As Variant
Dim Obj As Variant
 
 
Set oWMINameSpace = GetObject("winmgmts:")
'操作系統
Set SystemSet = oWMINameSpace.InstancesOf("Win32_OperatingSystem")
 
For Each System In SystemSet
  List1.AddItem System.Caption
  List1.AddItem System.Manufacturer
  List1.AddItem System.BuildType & “” ‘Win9x下好像取不出來
  List1.AddItem System.Version
  List1.AddItem System.SerialNumber
Next
'cpu
Set ObjSet = oWMINameSpace.InstancesOf("Win32_Processor")
 
For Each Obj In ObjSet
  List2.AddItem Obj.Caption
  List2.AddItem Obj.currentclockspeed & " Mhz"
Next
 
End Sub
 
Private Sub Command3_Click()
Dim oWMINameSpace As SWbemServices
Dim ObjSet As Variant
Dim Obj As Variant
Dim Adapter As Variant
 
'內存
Set oWMINameSpace = GetObject("winmgmts:")
Set ObjSet = oWMINameSpace.InstancesOf("Win32_PhysicalMemory")
Dim i As String
 
For Each Obj In ObjSet
  List3.AddItem BytesToMegabytes(Obj.capacity) & " MB" & " Chip"
Next
 
'網卡
Set Sink = New SWbemSink
  
Set Adapter = GetObject("winmgmts:")
Adapter.InstancesOfAsync Sink, "Win32_NetworkAdapter"
 
End Sub
 
Private Sub Form_Load()
j = 0
End Sub
 
Private Sub Sink_OnObjectReady(ByVal objWbemObject As WbemScripting.ISWbemObject, ByVal objWbemAsyncContext As WbemScripting.ISWbemNamedValueSet)
 
Dim Adapter As Variant
‘得到所有的適配器信息
Set Adapter = GetObject("winmgmts:Win32_NetworkAdapterConfiguration=" & j & "")
 
List4.AddItem Adapter.Description
 
If IsNull(Adapter.MACAddress) Then
  List4.AddItem "No MAC Address"
  List4.AddItem ""
Else
  List4.AddItem "Mac: " & Adapter.MACAddress
  List4.AddItem ""
End If
 
j = j + 1
End Sub

這篇文章就介紹到這,更多的內容大家可以參考這篇文章:http://technet.microsoft.com/en-us/library/ee198932.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章