C#中操做WMI的類庫-實現遠程登陸共享

WMI是Windows Management Instrumentation的簡稱,即:視窗管理規範。在Windows 2000或之後的版本中均安裝得有,NT4.0則須要安裝WMI的核心組件。經過WMI能夠獲取遠程計算機的各類數據信息,控制遠程計算機的各類行爲,而這就像操做本地機同樣方便、簡單。

  一.WMI簡介
  WMI從根本上說應該爲一種服務,而且對於本地不一樣的用戶,WMI全部的權限也不同。計算機超級用戶能夠爲計算機中的每個用戶,設定不一樣的WMI權限。在默認狀態下,超級用戶擁有WMI的一切權限。提供WMI服務是經過程序"WinMgmt.exe"來實現的。能夠從"System32\Wbem"目錄中找到這個文件。

  既然是服務,計算機使用者就能夠享受這種服務,一樣也能夠關閉這種服務。具體的操做是:按順序打開【控制面板】|【管理工具】|【組件服務】。WMI服務在組件服務中的顯示名稱爲"Windows Management Instrumentation"。具體以下圖01所示:

web

VisualC#中用WMI編寫網絡應用程序
圖01:組件服務窗口


  選中【名稱】欄中"Windows Management Instrumentation",點擊鼠標右鍵,在彈出的菜單中,選擇【屬性】,在【啓動類型】選擇框中選擇"已禁用",而後在單擊【中止】按鈕,這樣本地的WMI服務也就被關閉了。此時全部本地和遠程的WMI調用均爲非法。下圖爲關閉WMI服務後的界面:

安全

VisualC#中用WMI編寫網絡應用程序
關閉WMI服務


  計算機的超級用戶在默認狀態下擁有WMI的一切權限,而且能夠爲本地其餘用戶設置WMI權限。具體操做是,按順序打開:【控制面板】|【管理工具】|【計算機管理】。選中【計算機管理】右邊的【服務和應用程序】中的【WMI控件】。具體如圖02所示:

服務器

VisualC#中用WMI編寫網絡應用程序
圖02:【計算機管理】對話框


  點擊鼠標右鍵,在彈出的菜單中,選擇【屬性】。彈出【WMI控件屬性】對話框中,選擇【安全】頁面。具體如圖03所示:

網絡

VisualC#中用WMI編寫網絡應用程序
圖03: 打開WMI安全設置界面


  單擊圖9-4中【安全設置】按鈕,彈出【安全設置Root】對話框,經過其中的【添加】和【刪除】按鈕,能夠設定本地有哪些用戶擁有WMI權限,並經過【權限】選擇欄爲每個用戶設置不一樣的權限,具體如圖04所示:

函數

VisualC#中用WMI編寫網絡應用程序
圖04:設定本地用戶的WMI權限


  經過上圖,也能夠發現計算機超級用戶在默認狀態的WMI權限都是容許的,而且這些權限都是沒法刪除的。


二.Visual C#中操做WMI的類庫簡介
  .Net FrameWork SDK對WMI提供了全面的支持,.Net FrameWork SDK爲Visual C#可以操做WMI提供了一個專門的命名空間"System.Management"。在命名空間"System.Management"中提供了大量用以處理和WMI相關的類、接口和枚舉。

  命名空間"System.Management"中的成員是很是複雜的,因爲篇幅所限徹底介紹這些成員是不可能的,也是沒有要的。根據個人經驗,認爲要了解、掌握在Visual C#中使用WMI,下面六個類應該是學習的重點,分別是ConnectionOptions、ManagementScope、ObjectQuery、ManagementObjectSearcher、ManagementObjectCollection和ManagementObject。下面就簡單介紹一下六個類:

  ·ConnectionOptions類

  ConnectionOptions類主要的功能是爲創建的WMI鏈接提供所需的全部設置。在利用WMI對遠程計算機進行操做的時候,首先要進行WMI鏈接,WMI鏈接主要是使用的是ManagementScope 類,成功完成WMI鏈接就要提供遠程計算機WMI用戶名和口令。ConnectionOptions類能夠經過其屬性來提供這些信息。表01是ConnectionOptions類的一些主要屬性及其簡單的說明。

工具

屬性 說明
Authority 獲取或設置將用於驗證指定用戶的權利。
Locale 獲取或設置將用於鏈接操做的區域設置。
Password 提供用於WMI鏈接操做的口令。
Username 提供用於WMI鏈接操做的用戶名。

     表01:ConnectionOptions類經常使用屬性及其說明

  其中最經常使用的屬性是Password和Username。

  ·ManagementScope 類

  經過ManagementScope類可以創建和遠程計算機(或者本地計算機)的WMI鏈接,表示管理可操做範圍。建立WMI鏈接能夠經過二種方法:

  ( 1 ) . 利用構造函數,當使用下面構造函數初始化ManagementScope 類實例,同時也就創建了WMI鏈接,具體以下:

學習

public ManagementScope (  string path , ConnectionOptions options ) ;


  參數:

  path ManagementScope的服務器和命名空間。 

  options 包含有關鏈接的選項的 ConnectionOptions。

  使用構造函數是有風險的,由於若是不能根據提供的選項創建WMI鏈接,程序會程序異常,出現錯誤。 

  下列代碼是利用此構造函數構建創建ManagementScope實例,並創建於遠程計算機majinhu的WMI鏈接:

spa

System.Management.ConnectionOptions Conn = new ConnectionOptions ( ) ; //設定用於WMI鏈接操做的用戶名 Conn.Username = "WMI用戶名"; //設定用戶的口令 Conn.Password = "此用戶名對應口令"; System.Management.ManagementScope Ms = new ManagementScope("\\majinhu\root\cimv2", Conn ) ;


  ( 2 ) . 利用ManagementScope中提供的Connect方法:

  ManagementScope中的成員是很是少的,最經常使用的方法和屬性各一個:經常使用屬性是Options,主要爲WMI創建提供參數;經常使用方法是Connect,經過它能夠創建於遠程計算機的WMI鏈接。下列是利用Connect方法創建WMI鏈接的具體代碼:

3d

System.Management.ConnectionOptions Conn = new ConnectionOptions ( ) ; //設定用於WMI鏈接操做的用戶名 Conn.Username = "WMI用戶名"; //設定用戶的口令 Conn.Password = "此用戶名對應口令"; System.Management.ManagementScope Ms = new ManagementScope("\\majinhu\root\cimv2" ) ; Ms.Options = Conn ; Ms.Connect ( ) ; //創建WMI鏈接


  ·ObjectQuery類

  ObjectQuery類或其派生類用於在ManagementObjectSearcher中指定查詢。程序中通常採用查詢字符串來構造ObjectQuery實例。其中的查詢字符串是一種相似SQL語言的WQL語言。下面的ObjectQuery類構造函數中最多見的一種,具體語法以下:

code

public ObjectQuery ( string query ) ;


  參數:

  query 查詢的字符串

  ·ManagementObjectSearcher類

  ManagementObjectSearcher主要是根據指定的查詢檢索WMI對象的集合。ManagementObjectSearcher組成成員也很是簡單,其方法Get方法是很是重要的,ManagementObjectSearcher經過Get方法進行WMI查詢,並把獲得的結果集合。Get方法的返回值是一個ManagementObjectCollection實例,它包含匹配指定查詢的對象。

  表02是其ManagementObjectSearcher類的經常使用屬性及其說明。

屬性 說明
Options 有關如何搜索對象的選項
Query 在搜索器中調用的查詢
Scope 在其中查找對象的範圍

      表02:ManagementObjectSearcher類經常使用屬性及其說明

  ·ManagementObjectCollection類

  ManagementObjectCollection類很是簡單,它主要表示 WMI 實例的不一樣集合其中包括命名空間、範圍和查詢觀察程序等。建立ManagementObjectCollection類沒有構造函數。

  ·ManagementObject類

  ManagementObject類爲單個管理對象或類。經過ManagementObject中的方法能夠調用ManagementObject對應的對象,從而執行相應的操做。ManagementObject類是一個內容豐富的類,表03和表04分別是其經常使用的屬性和方法。

屬性 說明
ClassPath 對象的類的路徑。
Options 檢索對象時要使用的其餘信息。
Path 對象的 WMI 路徑。
Scope 此對象在其中駐留的範圍。

       表03:ManagementObject類經常使用屬性及其說明

方法 說明
Clone 建立對象的一個副本。
CopyTo 將對象複製到另外一個位置。
Delete 刪除對象。
Get 綁定到管理對象。
GetRelated 獲取與該對象(聯繫對象)相關的對象的集合。
GetRelationships 獲取該對象的關聯的集合。
InvokeMethod 調用對應的對象方法。
Put 提交對對象所作的更改。

      表04:ManagementObject類經常使用方法及其說明

  下面就結合二個具體的示例來介紹Visual C#中利用上述類,提供WMI掌握如何利用WMI編寫網絡應用程序,所使用的類庫主要是使用了上面接收的這六個類。

例子:

 1            ConnectionOptions conOptions=new ConnectionOptions();
 2             conOptions.Username = "Administrator";
 3             conOptions.Password="Abc123";
 4             conOptions.Impersonation = ImpersonationLevel.Impersonate;
 5             conOptions.EnablePrivileges = true;
 6             ManagementScope ms = new ManagementScope("\\\\192.168.11.21\\root\\cimv2", conOptions);
 7             try
 8             {
 9                 ms.Connect();
10                 FileStream fWrite = File.Create("\\\\192.168.11.21\\test\\te.txt");
11             }
12             catch (Exception)
13             {
14                 throw;
15             }
相關文章
相關標籤/搜索