利用C#操作WMI指南

來源:互聯網
上載者:User
1 什麼是WMI?

Windows Management Instrumentation (WMI)是可伸縮的系統管理結構,該規範採用一個統一、基於標準且可擴充的物件導向介面。它提供與系統管理員資訊和基礎WMI API互動的標準方法,主要由系統管理應用程式開發人員和系統管理員用來訪問和作業系統管理資訊;它可用來產生組織和管理系統資訊的工具,使系統管理人員能夠更密切的監視系統活動。

WMI提供了一套內建在Microsoft Windows作業系統中的豐富的系統管理服務,可以在有大量的應用程式、服務和裝置的系統中提供全方位的管理功能。它允許應用程式的開發人員,使用簡單的、一致的機制,去查詢企業中的任一台電腦上的資訊,或是進行系統配置。

通過WMI介面可以獲得的資訊量是驚人的,包括硬體設定,狀態資訊,磁碟機配置,BIOS資訊,應用程式的設定,事件記錄資訊,以及其他。WMI通過一組API來獲得資訊,但它表徵的是一種通過一個簡單,工業標準對象管理員模式來擷取資訊的函數。這使得應用程式的開發人員不必學習Windows的每一個API的具體細節。

.Net FrameWork SDK對WMI提供了全面的支援,.Net FrameWork SDK為Visual C#能夠操作WMI提供了一個專門的命名空間"System.Management"。在命名空間"System.Management"中提供了大量用以處理和WMI相關的類、介面和枚舉。在使用WMI之前,必須在工程中添加對System.Management.dll的引用,然後聲明

using System.Management;

2 使用WMI串連遠端電腦

系統管理員可以通過目標機器的機器名(或者IP地址),使用者名稱以及密碼去查詢遠端電腦的狀態和資訊,以及利用指令碼執行一些管理工作。利用WMI串連遠端電腦是很方便的,可以參考下面的格式

ManagementObjectSearcher query;   ManagementObjectCollection queryCollection;System.Management.ObjectQuery oq;  string machineName = "110.119.110.1"; //串連的目標機的IP地址或者機器名co.Username = "YourName";         //串連需要的使用者名稱co.Password = "YourPassword";      //串連需要的密碼string connectString = "SELECT * FROM Win32_PnPSignedDriver";  //查詢字串  System.Management.ManagementScope ms = new System.Management.ManagementScope("\\\\" + machineName + "\\root\\cimv2", co); oq = new System.Management.ObjectQuery( connectString );query = new ManagementObjectSearcher( ms, oq );queryCollection = query.Get();

通過IP地址,使用者名稱和密碼就建立了一個可以查詢Win32_PnPSignedDrvier這個類(關於這個類的詳細資料請查詢MSDN)所有資訊的串連。現在我們就可以遠程擷取目標機器上的所有Pnp驅動的資訊了。是不是很方便?在得到所有的資訊後,我們可以通過下面的兩種方式來擷取我們需要的屬性

foreach ( ManagementObject mo in queryCollection){ // string hardwareID  = mo["HardwareID"]); //直接根據屬性名稱得到屬性的值    //遍曆所有屬性,得到所有屬性的值 PropertyDataCollection searcherProperties = mo.Properties; foreach (PropertyData sp in searcherProperties) { Console.WriteLine("Name = {0, -20}, Value = {1, -20}", sp.Name,sp.Value); }}

3 使用WMI串連本機電腦

使用WMI串連本機電腦也是非常方便的,我們只需要稍微修改一下上面的代碼就可以了。

string machineName = "localhost";co.Username = "";co.Password = "";

也可以用比較簡單的格式,直接使用查詢語句。

string connectString = "SELECT * FROM Win32_PnPSignedDriver";  SelectQuery selectQuery = new SelectQuery( connectString );ManagementObjectSearcher searcher = new ManagementObjectSearcher( selectQuery );  foreach (ManagementObject mo in searcher.Get()){ PropertyDataCollection searcherProperties = mo.Properties; foreach (PropertyData sp in searcherProperties) { Console.WriteLine(sp.Name + " " + sp.Value); }}

4 查詢語句的格式

上面的連接字串connectString其實有很多種格式。對於WMI來說,使用WQL查詢所需要的資訊。WQL繼承了SQL的一些文法。但是並不是說所有SQL的語句都可以用於WQL。常用的格式有如下幾種。

(1)查詢系統中類中所有對象的所有屬性
connectString = "SELECT * FROM Win32_PnPSignedDriver"

(2)查詢類中所有對象的HardwareID屬性
connectString = "SELECT HardwareID FROM Win32_PnPSignedDriver"

(3)查詢類中所有對象的HardwareID和DriverVersion屬性
connectString = "SELECT HardwareID, DriverVersion FROM Win32_PnPSignedDriver"

(4)查詢類中所有對象的HardwareID和DriverVersion屬性,並且對象的HardwareID必須以IBM254D結尾
connectString = "SELECT HardwareID, DriverVersion FROM Win32_PnPSignedDriver WHERE HardwareID like '%IBM254D'"

(5)查詢類中所有對象的HardwareID和DriverVersion屬性,並且對象的HardwareID必須以Monitor開頭
connectString = "SELECT HardwareID, DriverVersion FROM Win32_PnPSignedDriver WHERE HardwareID like 'Monitor%'"

(6)查詢類中所有對象的HardwareID和DriverVersion屬性,並且對象的HardwareID必須是以Monitor開頭,以IBM254D結尾,而且之間只有一個任意的字元
connectString = "SELECT HardwareID, DriverVersion FROM Win32_PnPSignedDriver WHERE HardwareID like 'Monitor_IBM254D'"

(7)查詢類中所有對象的HardwareID和DriverVersion屬性,並且對象的HardwareID必須是以Monitor開頭,以IBM254D結尾,而且之間只有一個任意的字元,還要滿足InfName必須是oem18.inf
connectString = "SELECT HardwareID, DriverVersion FROM Win32_PnPSignedDriver WHERE HardwareID like 'Monitor_IBM254D' AND InfName='oem18.inf'"

(8)查詢類中所有對象的HardwareID和DriverVersion屬性,並且對象的HardwareID必須是以Monitor開頭,以IBM254D結尾,而且之間只有一個任意的字元,或者滿足InfName是oem18.inf
connectString = "SELECT HardwareID, DriverVersion FROM Win32_PnPSignedDriver WHERE HardwareID like 'Monitor_IBM254D' OR InfName='oem18.inf'"

5 參考資料和工具

WMI Reference:http://msdn2.microsoft.com/en-us/library/aa394572.aspx
WMI Tools:http://www.microsoft.com/downloads/details.aspx?familyid=6430f853-1120-48db-8cc5-f2abdc3ed314&displaylang=en
WQL Query:http://www.microsoft.com/china/technet/community/scriptcenter/topics/win2003/like.mspx#EIB

以上就是C#操作WMI指南,更多相關文章請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.