zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }
  • 相关阅读:
    【转载】浮点数在内存中的存储格式
    流媒体完全手册
    Windows Mobile 5.0 SDK 下载地址
    实时传输协议 RTP
    JDK环境变量配置
    扩展Windows Mobile模拟器存储空间的方法
    WinSock学习笔记
    实时传输协议 RTCP
    NHibernate从入门到精通系列(4)——持久对象的生命周期(上)
    实时流协议 RTSP
  • 原文地址:https://www.cnblogs.com/ddlzq/p/2371573.html
Copyright © 2011-2022 走看看