概述 WMI是Microsoft用來支持企業管理系統而引進的幾項技術之一
Active Directory提供了企業范圍內的地點
政策和組織管理信息
Microsoft® 管理控制台系統(MMC)是編寫應用管理程序時的標准框架
Windows Script Host系統(WSH)允許管理人員自動處理復雜的任務
最後
WMI是基於Windows操作系統
及其應用程序的一項遠程控制的技術
WMI允許應用程序的開發者
使用簡單的
一致的機制
去查詢企業中的任一台計算機上的信息
或是進行系統配置
通過WMI接口可以獲得的信息量是驚人的
包括硬件設置
狀態信息
驅動器配置
BIOS信息
應用程序的設置
事件記錄信息
以及其他
WMI通過一組API來獲得信息
但它表征的是一種通過一個簡單
工業標准對象管理模式來獲取信息的函數
這使得應用程序的開發者不必學習Windows的每一個API的具體細節
要理解這樣做的效果
假定應用程序的開發者想枚舉出機器上四種不同類型的對象
服務
指針
過程和CPU
如果沒有WMI系統
該開發者只好尋求不同的API來完成不同類型的枚舉
但是使用WMI系統
這就變得相當簡單了
這是因為每一對象類型都是以同一種方式枚舉的
例如圖
(Figure
)顯示了
用VBScript代碼編寫的WSH系統完成此任務是如何的簡單
如果你運行的是Windows
你可以將這段代碼拷貝到ENUM
VBS文件中
並且在控制台窗口運行cscript
ENUM
VBS命令
如果遇到錯誤
最可能的原因是
為了使該程序更短而忽略了對空指針的查錯
例如
若系統不存在已安裝指針的備注列表
obj
Description文件將返回空指針
如果
你運行的操作系統是Windows
x或是Windows NT®
WMI控件是可選組件
在Microsoft的網站上可得到最新版本的WMI
顯然
圖
中的程序也可以用來枚舉遠程機器上的同樣信息
要顯示MYSERVER的信息
只需使用WinMgmts://MYSERVER在首行作為GetObject的參數
實際上
不論是從本地或是從遠程的機器
WMI得到的信息
都是使用同一個API得到的
雖然某些Win
API提供辨認遠程計算機的功能
其他的API只能訪問本地的機器
無法實現從遠程計算機上得到信息
WMI還能使對被管理對象的信息進行設置
以及調用變得簡單
可以采用同樣的語法結構來進行中止服務
結束進程
或是從遠程計算機注銷用戶
等操作
應用程序的開發者只需知道對象的名稱
以及准備進行的操作的名稱
而沒有必要了解一個新的API
為完成所有事情
事件的基礎結構將對通過WMI可以訪問的對象給出修正信息
在本文的稍後部分
我將舉一個創建和撤銷監視器進程的例子
另一個例子是當插入或取出軟盤時產生一個提示信息
WMI對象管理各類型操作采用的是同樣的函數
甚至當基本API不提供針對對象的此類信息
WMI體系結構可以模擬監控這些事件的行為
另外
WMI服務自由的提供所有這些功能的遠程訪問
除了WMI已經列出的信息
應用程序還可以列出他們自定義的對象和事件
這樣
任意WMI管理程序就能管理你的其他應用程序
包括遠程配置
修改提示信息
或是接受自定義事件
WMI技術的起源 雖然WMI是Microsoft開發的技術
但是它是建立在近年來才引入的工業標准的基礎上的
要了解WMI
就需要了解它從最初的所謂企業網絡管理系統(WBEM)的演化過程
幾年以前
為建立企業系統和設備管理系統的標准體系
一些計算機公司創建了WBEM系統
最初的目的是
開發單一的管理企業任意網絡組件標准體系
這將簡化由諸如SNMP網絡設備標准體系
DMI桌面標准體系
等多個獨立體系存在而引起的問題
將來
計算機公司開發與WBEM相配套的硬件
軟件
以及操作系統
都將能以同樣的方式進行管理
這樣
單個管理程序就將能輕易地管理企業范圍內的所有不同類型的組件了
實際上
WBEM的最初功能設計是針對(Desktop Management Task Force (DMTF)的
DMTF系統是針對維持實現WBEM系統最初目標所需的標准系統而設計的
CIM類 最初的WBEM系統的第一個標准是
所謂的常規信息模式(CIM)的管理信息描述函數
CIM采用面相對象函數模擬信息
使用分類定義
分級結構
事例
屬性
以及函數描述管理信息
CIM類是通過管理對象格式(MOF)在文本文件中定義的
完整的MOF文件格式系統已經超出了本文的范圍
但是
如果你熟悉C++
JAVA
或是接口定義語言(IDL)
則你將對它的語法結構相當熟悉
以下就是如何定義一個類
及其子類的一個例子
[abstract] class Automobile
{
[key] string Make;
[key] string Model;
void Recall();
};
class Car : Automobile
{
real
BlueBookValue;
};
class Truck : Automobile
{
uint
Axles =
;
};
以上的MOF文件定義了Automobile作為一個基本類
及其兩個子類
Car和Truck
Automobile具有Make屬性
Model屬性
以及Recall函數
Car具有BlueBookValue的額外屬性
Truck具有Axles屬性
默認值為
(對於Axles而言
如果不另外指定
Truck每一次得到的新的值是
)
括號裡的文字(abstract和key)引入了CIM分類參數的概念
分類參數可以應用於整個類
屬性
函數或是單獨的函數參數
分類參數與IDL文件中屬性的概念類似
它們提供了與類
屬性和函數的使用相關的額外信息
在這個例子裡
abstract類的分類參數意味著
你無法看到Automobile的示例
另一方面
由於Car和Truck不是abstract類
你可以列舉Car和Truck的例子
Key屬性分類參數意味著任意Automobile(或任意派生類)可以被參數Make和Model唯一確定
這是一個從數據庫借用的概念
所有支持多種事例的類需要確定Key屬性
即每一種事例必須是Key屬性值的唯一組合
換句話說
即使Automobile類定義只允許存在唯一的Ford Mustang事例
但是你可以創建Ford Taurus
甚至Gm Mustang的事例
如果類有且只有一種事例
它可以用單獨的一個類的分類參數來描述
在這種事例下
類不再需要確定諸如Key之類的其他屬性了
MOF文件格式是用來描述事例或類定義的
以下的示例描述了Truck的一種事例
instance of Truck
{
Axles =
;
Make =
Ford
;
Model =
Big Rig
;
};
單獨的CIM標准體系還不足以使公司能創建可管理的對象
並且防止出現混亂
例如
一個公司將路由器稱為網絡路由器
而另一個公司將同一個東西稱為路由器
甚至更糟的是
兩個公司都可以定義同樣的類的名稱
但屬性不同
為防止出現這種混亂
DMTF體系定義了CIM模式
模式是一個所有公司都統一遵循的一個有明確定義的類的集合
通常
作為CIM模式體系一部分的類
以CIM_為前綴(例如
CIM_Battery或CIM_Process)
CIM模式倚重於對分級結構的使用
允許管理程序以同樣的方式處理相似對象的群
例如
CIM_Battery
CIM_Printer
以及CIM_Processor都是從基本類CIM_LogicalDevice派生得到的
這要求管理程序了解
如何通過CIM_LogicalDevice來管理有此類派生得到的任意類型的設備
此外
任意派生類都支持基本類的屬性和函數
類CIM_LogicalDevice具有確定是否支持電源管理程序的屬性(PowerManagementSupported)
以及允許設置電源狀態的函數(SetPowerState)
通過從基本類功能列表得到的信息
應用程序可以管理打印機
處理器
以及其他任意從CIM_LogicalDevice派生的設備的電源狀態
分級結構的另一個好處是
如果計算機分銷商們能夠提供比CIM類定義的更多信息的話
他們能夠擴展CIM_schema
例如
Windows操作系統知道已安裝的打印機AveragePagesPerMinute參數
類CIM_Printer沒有定義此信息
因此Microsoft由CIM_Printer派生定義了類Win
_Pointer
此類具有額外屬性
AveragePagesPerMinute
知道類Win
_Proiner的管理程序可以使用這個信息
而只知道如何管理CIM_Pointer的管理程序也能正常工作
WBEM支持 CIM和MOF標准體系
以及CIM模式是最初的WBEM體系的核心組件
這些標准體系是不依賴於操作平台和實現的應用程序的
為使統一的管理成為現實
硬件和軟件的分銷商們必須創建支持這些標准體系的系統(指的是實現WBEM的應用程序)
這包括通過由CIM模式派生出來的類的功能列表
Microsoft在Windows操作系統上實現WBEM的應用程序是WMI
並不只有Microsoft支持WBEM系統
硬件廠商也同意為實現WBEM系統提供網絡以及存儲設備
Sun公司許諾為實現WBEM提供Solaris操作系統
諸如Tivoli Systems和Computer Associates等管理軟件的主要廠商也同意在他們的產品中支持WBEM系統
有了這些軟硬件方面的支持
以一種單一的
一致的方式管理企業將成為現實
WMI體系結構 了解圖
所示的WMI組件的體系結構
可以幫助分析WBEM標准體系實現方式的創建
首要的任務是
確定CIM schema中的哪些組件在計算機中運行Windows
第二步是通過將Windows下列出的所有額外信息定義為類
以擴展CIM schema
Microsoft使用的約定類是CIM類派生得到的
類的前綴為Win
_(例如
Win
_NetworkAdapter就是由CIM_NetworkAdapter派生得到的類)
最終
你仍需要編寫某些軟件
來實際提供管理功能
保留已有的被支持類的列表是必須的
並且當類的不同事例需要時
還需要提供某些實際數據
通過完成所要求的操作
來響應函數對對象的調用也是必須的
在最初的術語中
這被稱為CIM對象管理程序(CIMOM)
在Windows NT中
CIMOM處於WinMgmt服務包中
通過WinMgmt
exe文件
From:http://tw.wingwit.com/Article/os/youhua/201311/10808.html