WMI不僅可以獲取想要的計算機數據,而且還可以用以遠程控制。遠程控制計算機不僅是黑客們的夢想,也是大多數網絡管理者所渴望得到的,尤其在現代的網絡中,每一個網絡管理者所面對的局域網,都是由一個龐大的計算機群組成,如果有效的管理網絡的每一台計算機就顯得格外重要了。目前網絡管理軟件通常的做法是,在遠程計算機上運行客戶端後台程序,在本地計算機上運行一個服務器端前台控制程序,通過這二個程序直接的通訊實現對計算機的遠程控制。這種作法的缺點是十分明顯的,當客戶端關閉了後台程序,這種遠程管理就無法實現了,所以為了克服這個缺點,遠程控制軟件的客戶端程序就做的非常隱蔽,使用戶在不知覺中運行程序。
其實做遠程控制軟件,WMI是一個很好的選擇,尤其是在目前,Windows 2000已經成為了主流的操作系統,利用WMI編寫遠程控制軟件可以省略了已往遠程控制軟件最頭痛的一個環節--分發客戶端程序。
本節中介紹的遠程控制程序,能夠讓使用者重啟和關閉遠程計算機。其所使用的就是WMI,下面是Visual C#中利用WMI控制遠程計算機具體實現步驟。
1. 首先啟動Visual Studio .Net,依次選擇"文件"、"新建"、"項目"菜單後,在彈出"新建項目"對話框中將"項目類型"設置為"Visual C#項目",將"模板"設置為"Windows應用程序",在"名稱"文本框中輸入"利用WMI控制遠程計算機",在"位置"的文本框中輸入"E:\VS.NET項目",然後單擊"確定"按鈕。這樣在"E:\VS.NET項目"目錄中就創建了一個新的文件夾"利用WMI控制遠程計算機",裡面存放的就是"利用WMI控制遠程計算機"的項目文件。
2. 重新執行一下實現【獲取遠程計算機硬盤信息】項目中的第二至第四步驟。
3. 把Visual Studio .Net當前窗口切換到【Form1.cs(設計)】窗口,並從【工具箱】中的【Windows窗體組件】選項卡中往窗體中拖入下列組件,並執行相應操作:
三個TextBox組件,用以輸入遠程計算機名稱(或IP地址)、遠程計算機WMI操作用戶名和口令。
一個ComboBox組件,用以選擇對遠程計算機執行的操作類型。
四個Label組件。
一個Button組件,名稱為button1,拖入窗體後,雙擊此組件,則系統會在Form1.cs文件中自動產生其Click事件對應的處理代碼。
4. 按照表06中的數據調整各組件屬性對應的數值:
組件類型 組件名稱 屬性 設置結果 Form Form1 Text 利用WMI控制遠程計算機 Form1 FormBorderStyle FixedSingle Form1 MaximizeBox False Label label1 Text 機器名稱或IP地址: label2 Text 具有WMI權限的超級用戶名: label3 Text 口令: label4 Text 選擇控制類型: TextBox textBox1 Text "" textBox2 Text "" textBox3 PasswordChar * textBox3 Text "" Button button1 Text 執行 button1 FlatStyle Flat表06:【利用WMI控制遠程計算機】項目窗體中各組件的主要屬性設定數值表
並按照圖09中各組件的位置和排列順序調整窗體中組件的位置和排列順序:
圖09:【利用WMI控制遠程計算機】的設計界面
5. 把Visual Studio .Net的當前窗口切換到Form1.cs文件的編輯窗口,並用下列代碼替換Form1.cs中的button1的Click事件對應的處理代碼。下列代碼的作用是對根據用戶的選擇對遠程計算機進行進行相應的遠程控制:
private void button1_Click ( object sender , System.EventArgs e )
{
//確定WMI操作的范圍
ConnectionOptions options = new ConnectionOptions ( ) ;
//設定用於WMI連接操作的用戶名
options.Username = textBox2.Text ;
//設定用戶的口令
options.Password = textBox3.Text ;
try
{
ManagementScope Conn = new ManagementScope( "\\\\" + textBox1.Text + "\\root\\cimv2", options ) ;
Conn.Connect();
//確定WMI操作的內容
ObjectQuery oq = new ObjectQuery ( "SELECT * FROM Win32_OperatingSystem" ) ;
ManagementObjectSearcher query1 = new ManagementObjectSearcher ( Conn , oq ) ;
//獲取WMI操作內容
ManagementObjectCollection queryCollection1 = query1.Get ( ) ;
//根據使用者選擇,執行相應的遠程操作
foreach ( ManagementObject mo in queryCollection1 )
{
string [ ] ss= { "" } ;
//執行重啟操作
if (comboBox1.Text =="重新啟動")
{
mo.InvokeMethod ( "Reboot" , ss ) ;
} else
//執行遠程關機
if ( comboBox1.Text =="遠程關機")
{
mo.InvokeMethod ( "Shutdown" , ss ) ;
}else
MessageBox.Show ("選擇不正確的操作!","錯誤!");
}
}
//報錯
catch ( Exception ee )
{
MessageBox.Show ( "連接" + textBox1.Text + "出錯,出錯信息為:" + ee.Message ) ;
}
}
6. 至此,在上述步驟都正確完成,並全部保存後,【利用WMI控制遠程計算機】下面的全部工作就完成了。此時單擊【F5】快捷鍵,就可以運行程序了。在程序的【計算機名稱或IP地址】文本框中輸入要控制的遠程計算機名稱或IP地址,在【具有WMI權限的用戶名】和【口令】文本框中輸入具有WMI操作的帳戶和口令,在【選擇控制類型】組合框中選擇對遠程計算機的控制類型後,單擊【執行】按鈕,則程序就能夠對指定的遠程計算機進行相應的控制了。圖10是【利用WMI控制遠程計算機】的運行界面。
圖10:【利用WMI控制遠程計算機】的運行界面
總結:
通過以上示例,可見WMI的確是一個非常有用的東西,但由於它還比較新,國內甚至國外還沒有完整的介紹資料,因此只是簡要的浏覽了一下WMI的應用,希望本文的內容能夠對大家了解、掌握使用Visual C#調用WMI的方法有所幫助。