C# WMI 技術專貼

1 什麼是WMI?

Windows Management Instrumentation (WMI)是可伸縮的系統管理結構,該規範採用一個統1、基於標準且可擴展的面向對象接口。它提供與系統管理員信息和基礎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的引用,而後聲明。ide

 

2 使用WMI鏈接遠程計算機

系統管理員能夠經過目標機器的機器名(或者IP地址),用戶名以及密碼去查詢遠程計算機的狀態和信息,以及利用腳本執行一些管理工做。利用WMI鏈接遠程計算機是很方便的,能夠參考下面的格式函數

鏈接遠程計算機示例代碼
 1  ManagementObjectSearcher query;      
 2  ManagementObjectCollection queryCollection;
 3  System.Management.ObjectQuery oq;
 4 
 5  string  machineName  =   " 110.119.110.1 " // 鏈接的目標機的IP地址或者機器名
 6  co.Username  =   " YourName " ;                   // 鏈接須要的用戶名
 7  co.Password  =   " YourPassword " ;            // 鏈接須要的密碼
 8  string  connectString  =   " SELECT * FROM Win32_PnPSignedDriver " ;    // 查詢字符串
 9 
10  System.Management.ManagementScope ms  =   new  System.Management.ManagementScope( " \\\\ "   +  machineName  +   " \\root\\cimv2 " , co); 
11  oq  =   new  System.Management.ObjectQuery( connectString );
12  query  =   new  ManagementObjectSearcher( ms, oq );
13  queryCollection  =  query.Get();

經過IP地址,用戶名和密碼就創建了一個能夠查詢Win32_PnPSignedDrvier這個類(關於這個類的詳細信息請查詢MSDN)全部信息的鏈接。如今咱們就能夠遠程獲取目標機器上的全部Pnp驅動的信息了。是否是很方便?在獲得全部的信息後,咱們能夠經過下面的兩種方式來獲取咱們須要的屬性工具

讀取上一代碼得到的內容
 1  foreach  ( ManagementObject mo  in  queryCollection)
 2  {
 3  //  string hardwareID     = mo["HardwareID"]);  // 直接根據屬性名獲得屬性的值
 4 
 5  // 遍歷全部屬性,獲得全部屬性的值
 6  PropertyDataCollection searcherProperties  =  mo.Properties;
 7  foreach  (PropertyData sp  in  searcherProperties)
 8  {
 9     Console.WriteLine( " Name = {0, -20}, Value = {1, -20} " , sp.Name,sp.Value);
10  }
11  }

 

 

 

 

3 使用WMI鏈接本地計算機

使用WMI鏈接本地計算機也是很是方便的,咱們只須要稍微修改一下上面的代碼就能夠了。學習

 

1  string  machineName  =   " localhost " ;
2  co.Username  =   "" ;
3  co.Password  =   "" ;
4 

 

 

也能夠用比較簡單的格式,直接使用查詢語句。spa

 

簡單鏈接本地代碼
 1  string  connectString  =   " SELECT * FROM Win32_PnPSignedDriver " ;
 2 
 3  SelectQuery selectQuery  =   new  SelectQuery( connectString );
 4  ManagementObjectSearcher searcher  =   new  ManagementObjectSearcher( selectQuery );
 5 
 6  foreach  (ManagementObject mo  in  searcher.Get())
 7  {
 8  PropertyDataCollection searcherProperties  =  mo.Properties;
 9  foreach  (PropertyData sp  in  searcherProperties)
10  {
11     Console.WriteLine(sp.Name  +   "    "   +  sp.Value);
12  }
13  }

 

 

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'"操作系統

4.1經常使用WMI列表 線程

// 硬件
Win32_Processor, // CPU 處理器
Win32_PhysicalMemory, // 物理內存條
Win32_Keyboard, // 鍵盤
Win32_PointingDevice, // 點輸入設備,包括鼠標。
Win32_FloppyDrive, // 軟盤驅動器
Win32_DiskDrive, // 硬盤驅動器
Win32_CDROMDrive, // 光盤驅動器
Win32_BaseBoard, // 主板
Win32_BIOS, // BIOS 芯片
Win32_ParallelPort, // 並口
Win32_SerialPort, // 串口
Win32_SerialPortConfiguration, // 串口配置
Win32_SoundDevice, // 多媒體設置,通常指聲卡。
Win32_SystemSlot, // 主板插槽 (ISA & PCI & AGP)
Win32_USBController, // USB 控制器
Win32_NetworkAdapter, // 網絡適配器
Win32_NetworkAdapterConfiguration, // 網絡適配器設置
Win32_Printer, // 打印機
Win32_PrinterConfiguration, // 打印機設置
Win32_PrintJob, // 打印機任務
Win32_TCPIPPrinterPort, // 打印機端口
Win32_POTSModem, // MODEM
Win32_POTSModemToSerialPort, // MODEM 端口
Win32_DesktopMonitor, // 顯示器
Win32_DisplayConfiguration, // 顯卡
Win32_DisplayControllerConfiguration, // 顯卡設置
Win32_VideoController, // 顯卡細節。
Win32_VideoSettings, // 顯卡支持的顯示模式。
code

// 操做系統
Win32_TimeZone, // 時區
Win32_SystemDriver, // 驅動程序
Win32_DiskPartition, // 磁盤分區
Win32_LogicalDisk, // 邏輯磁盤
Win32_LogicalDiskToPartition, // 邏輯磁盤所在分區及始末位置。
Win32_LogicalMemoryConfiguration, // 邏輯內存配置
Win32_PageFile, // 系統頁文件信息
Win32_PageFileSetting, // 頁文件設置
Win32_BootConfiguration, // 系統啓動配置
Win32_ComputerSystem, // 計算機信息簡要
Win32_OperatingSystem, // 操做系統信息
Win32_StartupCommand, // 系統自動啓動程序
Win32_Service, // 系統安裝的服務
Win32_Group, // 系統管理組
Win32_GroupUser, // 系統組賬號
Win32_UserAccount, // 用戶賬號
Win32_Process, // 系統進程
Win32_Thread, // 系統線程
Win32_Share, // 共享
Win32_NetworkClient, // 已安裝的網絡客戶端
Win32_NetworkProtocol, // 已安裝的網絡協議
對象

 

Win32_USBHub Win32_1394Controller Win32_BaseBoard Win32_Battery Win32_BIOS Win32_Bus Win32_CacheMemory Win32_CDROMDrive Win32_CurrentProbe Win32_DesktopMonitor Win32_DeviceMemoryAddress Win32_DiskDrive Win32_DisplayConfiguration Win32_DisplayControllerConfiguration Win32_DMAChannel Win32_Fan Win32_FloppyController Win32_FloppyDrive Win32_HeatPipe Win32_IDEController Win32_InfraredDevice Win32_IRQResource Win32_Keyboard Win32_MemoryArray Win32_MemoryDevice Win32_MotherboardDevice Win32_NetworkAdapter Win32_NetworkAdapterConfiguration Win32_OnBoardDevice Win32_ParallelPort Win32_PCMCIAController Win32_PhysicalMemory Win32_PhysicalMemoryArray Win32_PnPEntity Win32_PointingDevice Win32_PortableBattery Win32_PortConnector Win32_PortResource Win32_POTSModem Win32_PowerManagementEvent Win32_Printer Win32_PrinterConfiguration Win32_PrintJob Win32_Processor Win32_Refrigeration Win32_SerialPort Win32_SerialPortConfiguration Win32_SMBIOSMemory Win32_SoundDevice Win32_SystemEnclosure Win32_SystemMemoryResource Win32_SystemSlot Win32_TapeDrive Win32_TemperatureProbe Win32_UninterruptiblePowerSupply Win32_USBController Win32_VideoConfiguration Win32_VideoController Win32_VoltageProbe

相關文章
相關標籤/搜索