C#實現WMI讀取遠程計算機信息【原】

用途:在內網中遠程獲得計算機的配置信息;

網絡環境:基於域管理的網絡環境;

開發環境:C#  VSTO

客戶機要求:XP以上操作系統,同時啓動Windows Managerment服務,可以通過組策略開啓所有客戶機的該項服務。

 

/*
* 由SharpDevelop創建。
* 用戶: eric
* 日期: 2012-02-24
* 時間: 11:07

* 要改變這種模板請點擊 工具|選項|代碼編寫|編輯標準頭文件
*/
using System;
using System.Collections.Generic;
using System.Management; 
using System.Windows.Forms ;
namespace RomateComputerManagement
{
/// <summary>
/// Description of MyClass.
/// </summary>
public class RomateComputerManagement
    {
public System.Management.ManagementScope Connection(System.Management.ManagementScope ms)
        {
try
            {
//設定生成的WMI所需的所有設置
                System.Management.ConnectionOptions Conn = new ConnectionOptions ( ) ;
//設定用於WMI連接操作的用戶名
                Conn.Username = AdminName ;
//設定用戶的口令
                Conn.Password = Password ;
//設定用於執行WMI操作的範圍
                ms = new ManagementScope ( "\\\\" + RomoteIp + "\\root\\cimv2" , Conn ) ;
                ms.Connect();
if(ms.IsConnected)
return ms;
else
return null;
            }
catch( Exception ee )
            {
//MessageBox.Show ( "連接" + RomoteIp + "出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return null;
            }
        }
public string GetProcessorInfo()
        {
            System.Management.ManagementScope ms=new System.Management.ManagementScope();
            ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string cpu="";
try
            {
                ObjectQuery Query = new ObjectQuery ( "select * from Win32_Processor" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
              ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
                ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
                 {
                     cpu=cpu + "CPU:" + Return["NAME"].ToString ( ).Trim() +" "  ;
                     }
return cpu;
            }
catch(Exception ee)
            {
//                MessageBox.Show ( "獲得CPU信息出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
            }
        }
public string GetBaseBoardInfo()
        {
            System.Management.ManagementScope ms=new System.Management.ManagementScope();
            ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string BaseBoard="";
try
            {
                ObjectQuery Query = new ObjectQuery ( "select * from Win32_BaseBoard" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
              ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
                ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
                 {
                     BaseBoard=( "主板:" + Return["SERIALNUMBER"].ToString ( ).Trim()+";"+Return["PRODUCT"].ToString ( ).Trim()+";"+Return["MANUFACTURER"].ToString ( ).Trim() ) ;
                     }
return BaseBoard;
            }
catch(Exception ee)
            {
//                MessageBox.Show ( "獲得主板信息出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
            }
        }
public string GetDisplayConfigurationInfo()
        {
            System.Management.ManagementScope ms=new System.Management.ManagementScope();
            ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string Display="";
try
            {
                ObjectQuery Query = new ObjectQuery ( "select * from Win32_DisplayConfiguration" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
              ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
                ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
                 {
                     Display=Display + "顯卡:" + Return["Description"].ToString ( ).Trim()+" " ;
                     }
return Display;
            }
catch(Exception ee)
            {
//                MessageBox.Show ( "獲得顯卡信息出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
            }
        }
public string GetMemoryInfo()
        {
            System.Management.ManagementScope ms=new System.Management.ManagementScope();
            ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string Memory="";
try
            {
                ObjectQuery Query = new ObjectQuery ( "select * from Win32_ComputerSystem" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
              ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
                ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
                {
                   Memory= ( "內存:" + Return["TotalPhysicalMemory"].ToString ( ).Trim()) ;
               }
return Memory;
            }
catch(Exception ee)
            {
//                MessageBox.Show ( "獲得內存信息出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
            }
        }
public string GetNetworkAdapterInfo()
        {
            System.Management.ManagementScope ms=new System.Management.ManagementScope();
            ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string NetWorkAddpter="";
try
            {
                ObjectQuery Query = new ObjectQuery ( "select * from Win32_NetworkAdapterConfiguration" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
              ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
                ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
                 {
if ((bool)Return["IPEnabled"] == true)
                        {
                            NetWorkAddpter=NetWorkAddpter +  "網卡:" + Return["MacAddress"].ToString ( ).Trim() +" " ;
                         }
                    }
return NetWorkAddpter;
            }
catch(Exception ee)
            {
//                MessageBox.Show ( "獲得網卡信息出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
            }
        }    
public string GetDiskDriveInfo()
        {
            System.Management.ManagementScope ms=new System.Management.ManagementScope();
            ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string DiskDrive="";
try
            {
                ObjectQuery Query = new ObjectQuery ( "select * from Win32_DiskDrive" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
              ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
                ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
                 {
                     DiskDrive=DiskDrive +  "硬盤:" + Return["Model"].ToString ( ).Trim() +" " ;
                    }
return DiskDrive;
            }
catch(Exception ee)
            {
//                MessageBox.Show ( "獲得硬盤信息出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
            }
        }    
public string GetLoginUserInfo()
        {
            System.Management.ManagementScope ms=new System.Management.ManagementScope();
            ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string User="";
try
            {
                ObjectQuery Query = new ObjectQuery ( "select * from Win32_ComputerSystem" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
              ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
                ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
                 {
                     User="當前用戶:" + Return["UserName"].ToString ( ).Trim() +" " ;
                    }
return User;
            }
catch(Exception ee)
            {
//                MessageBox.Show ( "獲得用戶信息出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
            }
        }
public string GetPCTypeInfo()
        {
            System.Management.ManagementScope ms=new System.Management.ManagementScope();
            ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string PCType="";
try
            {
                ObjectQuery Query = new ObjectQuery ( "select * from Win32_ComputerSystem" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
              ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
                ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
                 {
                     PCType="PC類型:" + Return["SystemType"].ToString ( ).Trim() +" " ;
                    }
return PCType;
            }
catch(Exception ee)
            {
//                MessageBox.Show ( "獲得PC類型出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
            }
        }
public string GetDomainName()
        {
            System.Management.ManagementScope ms=new System.Management.ManagementScope();
            ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string DomainName="";
try
            {
                ObjectQuery Query = new ObjectQuery ( "select * from Win32_ComputerSystem" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
              ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
                ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
                 {
                     DomainName="域名稱:" + Return["Domain"].ToString ( ).Trim() +" " ;
                    }
return DomainName;
            }
catch(Exception ee)
            {
//                MessageBox.Show ( "獲得域名稱出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
            }
        }
public string GetComputerName()
        {
            System.Management.ManagementScope ms=new System.Management.ManagementScope();
            ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string ComputerName="";
try
            {
                ObjectQuery Query = new ObjectQuery ( "select * from Win32_ComputerSystem" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
              ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
                ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
                 {
                     ComputerName="計算機名稱:" + Return["Name"].ToString ( ).Trim() +" " ;
                    }
return ComputerName;
            }
catch(Exception ee)
            {
//                MessageBox.Show ( "獲得PC名稱出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
            }
        }
public string GetMonitorInfo()
        {
            System.Management.ManagementScope ms=new System.Management.ManagementScope();
            ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string Monitor="";
try
            {
                ObjectQuery Query = new ObjectQuery ( "select * from Win32_DesktopMonitor" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
              ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
                ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
                 {
                     Monitor="顯示器:" + Return["MonitorType"].ToString ( ).Trim() +" " + Return["MonitorManufacturer"].ToString ( ).Trim() + " " + Return["ScreenHeight"].ToString ( ).Trim() +"*" +  Return["ScreenWidth"].ToString ( ).Trim() ;
                    }
return Monitor;
            }
catch(Exception ee)
            {
//MessageBox.Show ( "獲得顯示器信息出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
            }
        }
private string romoteIp;
public string RomoteIp {
get { return romoteIp; }
set { romoteIp = value; }
        }
private string adminName;
public string AdminName {
get { return adminName; }
set { adminName = value; }
        }
private string password;        
public string Password {
get { return password; }
set { password = value; }
        }
    }

Computers:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Tools.Ribbon;
using Microsoft.Office.Interop.Excel;
using RomateComputerManagement;
using System.Threading;
using System.Windows.Forms;
namespace Computers
{
    public partial class ExtandRibbon
    {
        private Thread threadOne;
        private event EventHandler OnNumberClear;//數據刪除完成引發的事件
        private void ExtandRibbon_Load(object sender, RibbonUIEventArgs e)
        { 

            OnNumberClear += new EventHandler(ThreadDemo_OnNumberClear); 

        }
        public void ThreadGetComputer()
        {
            //threadOne = new Thread(new ThreadStart(Run));
            int i = 0;
            Range rng2;
            Range rng1;
            Range rng3;
            Range rng4;
            Range rng5;
            Range rng6;
            Range rng7;
            Range rng8;
            Range rng9;
            Range rng10;
            Range rng11;
            System.Management.ManagementScope ms=new System.Management.ManagementScope();
            i = Globals.Computers.UsedRange.Cells.Rows.Count;
            for (int j = 2; j <= i; j++)
            {
                rng2 = (Range)Globals.Computers.Cells[j, 1];
                rng1 = (Range)Globals.Computers.Cells[j, 2];      //mac
                rng3 = (Range)Globals.Computers.Cells[j, 3];      //user
                rng4 = (Range)Globals.Computers.Cells[j, 4];      //pctype
                rng5 = (Range)Globals.Computers.Cells[j, 5];      //disk 
                rng6 = (Range)Globals.Computers.Cells[j, 6];      //BASEBORD  
                rng7 = (Range)Globals.Computers.Cells[j, 7];      //DISPLAYCARD
                rng8 = (Range)Globals.Computers.Cells[j, 8];      //DISPLAY Moniter
                rng9 = (Range)Globals.Computers.Cells[j, 9];      //CPU
                rng10 = (Range)Globals.Computers.Cells[j, 10];    //MOMERY
                rng11 = (Range)Globals.Computers.Cells[j, 11];    //NETACDPTER
                RomateComputerManagement.RomateComputerManagement rm = new RomateComputerManagement.RomateComputerManagement();
                rm.RomoteIp = rng2.Text;                       
                rm.AdminName = "Administrator";                   //通過參數獲得
                rm.Password = "Sina.com";                         //通過參數獲得
                ms = rm.Connection(ms);
                if (ms!=null)
                {
                    rng1.Value = rm.GetNetworkAdapterInfo();
                    rng3.Value = rm.GetLoginUserInfo();
                    rng4.Value = rm.GetPCTypeInfo();
                    rng5.Value = rm.GetDiskDriveInfo();
                    rng6.Value = rm.GetBaseBoardInfo();
                    rng7.Value = rm.GetDisplayConfigurationInfo();
                    rng8.Value = rm.GetMonitorInfo();
                    rng9.Value = rm.GetProcessorInfo();
                    rng10.Value = rm.GetMemoryInfo();
                    rng11.Value = rm.GetNetworkAdapterInfo();
                }
                else
                    rng1.Value = "ERROR";
            }
            OnNumberClear(thisnew EventArgs());//引發完成事件 

        }
        //執行完成之後,停止所有線程
        void ThreadDemo_OnNumberClear(object sender, EventArgs e)
        {
            MessageBox.Show("導入完畢!");
            threadOne.Abort(); 

        }
        private void GetComputer_Click(object sender, RibbonControlEventArgs e)
        {
            threadOne = new Thread(new ThreadStart(ThreadGetComputer));
            threadOne.Start();
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章