WMI是一項行業(yè)推薦規(guī)范,旨在為訪問企業(yè)環(huán)境中的管理信息而開發(fā)一種標(biāo)準(zhǔn)化技術(shù)。該信息包括系統(tǒng)內(nèi)存的狀態(tài)、當(dāng)前安裝的客戶應(yīng)用程序清單,以及有關(guān)客戶端狀態(tài)的其他數(shù)據(jù)。
WMI是可伸縮的系統(tǒng)管理結(jié)構(gòu),該規(guī)范采用一個統(tǒng)一、基于標(biāo)準(zhǔn)且可擴(kuò)展的面向?qū)ο蠼涌凇K峁┡c系統(tǒng)管理員信息和基礎(chǔ)WMI API交互的標(biāo)準(zhǔn)方法,主要由系統(tǒng)管理應(yīng)用程序開發(fā)人員和系統(tǒng)管理員用來訪問和操作系統(tǒng)管理信息。
WMI可用來生成組織和管理系統(tǒng)信息的工具,使系統(tǒng)管理人員能夠更密切的監(jiān)視系統(tǒng)活動。
WMI提供了一套內(nèi)置在Microsoft Windows操作系統(tǒng)中的豐富的系統(tǒng)管理服務(wù),現(xiàn)在有大量的應(yīng)用程序、服務(wù)和設(shè)備用其為信息技術(shù)操作和產(chǎn)品支持組織提供全方位的管理功能。基于WMI的管理系統(tǒng)的使用帶來了更可靠的計算環(huán)境和更高的系統(tǒng)可靠性,從而節(jié)省了企業(yè)的開銷。
WMI提供的大量的規(guī)范為許多高端應(yīng)用程序,例如Microsoft Exchange、Microsoft SQL Server和Microsoft Internet信息服務(wù)(IIS)等實現(xiàn)如下管理任務(wù)。
1. 監(jiān)視應(yīng)用程序的運行情況
2. 檢測瓶頸或故障
3. 管理和配置應(yīng)用程序
4. 查詢應(yīng)用程序數(shù)據(jù)(使用對象關(guān)系的遍歷和查詢)
5. 執(zhí)行無縫的本地或遠(yuǎn)程管理操作
下面我們通過一個例子來說明WMI的強大功能。以vb6為列:
引用”Microsoft WMI Scripting V1.1 Library”
代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
Option Explicit Dim WithEvents Sink As SWbemSink Dim j As Integer '功能:利用wmi組件得到計算機(jī)的信息,每一個小功能分開寫,便于大家查閱 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:" ) '得到驅(qū)動器的信息 On Error Resume Next Set ObjSet = oWMINameSpace.InstancesOf( "Win32_DiskDrive" ) For Each Obj In ObjSet List5.AddItem Obj.Caption & " - " & BytesToMegabytes(Obj.Size) & " GB" Next '得到每一個驅(qū)動器的詳細(xì)信息 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:" ) '操作系統(tǒng) 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 '內(nèi)存 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 '網(wǎng)卡 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 |
這篇文章就介紹到這,更多的內(nèi)容大家可以參考這篇文章:http://technet.microsoft.com/en-us/library/ee198932.aspx