C#实现WMI读取远程计算机信息

C#实现WMI读取远程计算机信息【原】
原创lnddlzq 最后发布于2013-05-31 11:36:10 阅读数 1096  收藏
展开
用途:在内网中远程获得计算机的配置信息;

网络环境:基于域管理的网络环境;

开发环境: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(this, new 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();
        }
    }
}
 
————————————————
版权声明:本文为CSDN博主「lnddlzq」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lnddlzq/article/details/8998635

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值