博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用WMI来连接远端计算机
阅读量:6583 次
发布时间:2019-06-24

本文共 5545 字,大约阅读时间需要 18 分钟。

1. wmi连接前提

利用wmi来连接远端计算机首先要具有远端计算机管理员的用户名和密码。如果计算机在域中的话,要有域管理员用户名和密码,或者是把域帐户加入本机管理员组中也可以。

2. 相关类的用法--- ConnectionOptions和ManagementScope

ConnectionOptions用于设置连接选项,比如设置所连接机器的域,用户名,密码等。ManagementScope用于连接的实际操作。

1:  using System;   2:  using System.Collections.Generic;   3:  using System.Text;   4:  using System.Management;   5:      6:  namespace TJVictor.WMI   7:  {   8:      public class WMIBaseClass   9:      {  10:          #region Property  11:          private ConnectionOptions connection;  12:     13:          private ManagementScope scope;  14:          public ManagementScope Scope  15:          {  16:              get { return scope; }  17:              set { scope = value; }  18:          }  19:     20:          private string domain;  21:          public string Domain  22:          {  23:              get { return domain; }  24:              set { domain = value; }  25:          }  26:     27:          private string ip;  28:          public string Ip  29:          {  30:              get { return ip; }  31:              set { ip = value; }  32:          }  33:     34:          private string user;  35:          public string User  36:          {  37:              get { return user; }  38:              set { user = value; }  39:          }  40:     41:          private string password;  42:          public string Password  43:          {  44:              get { return password; }  45:              set { password = value; }  46:          }  47:     48:          private string nameSpace;  49:          public string NameSpace  50:          {  51:              get { return nameSpace; }  52:              set { nameSpace = value; }  53:          }  54:          #endregion  55:     56:          #region Construction  57:          public WMIBaseClass()  58:          {  59:              this.domain = string.Empty;  60:              this.ip = string.Empty;  61:              this.user = string.Empty;  62:              this.password = string.Empty;  63:              this.nameSpace = "root//cimv2";  64:          }  65:     66:          public WMIBaseClass(string ip, string user, string password)  67:          {  68:              this.domain = string.Empty;  69:              this.ip = ip;  70:              this.user = user;  71:              this.password = password;  72:              this.nameSpace = "root//cimv2";  73:          }  74:     75:          public WMIBaseClass(string domain, string ip, string user, string password)  76:          {  77:              this.domain = domain;  78:              this.ip = ip;  79:              this.user = user;  80:              this.password = password;  81:              this.nameSpace = "root//cimv2";  82:          }  83:     84:          public WMIBaseClass(string domain, string ip, string user, string password, string nameSpace)  85:          {  86:              this.domain = domain;  87:              this.ip = ip;  88:              this.user = user;  89:              this.password = password;  90:              this.nameSpace = nameSpace;  91:          }  92:          #endregion  93:     94:          #region protected function  95:          protected virtual void Connection()  96:          {  97:              this.scope = Cache.CacheClass.Get(this.ip) as ManagementScope;  98:              if (this.scope == null)  99:              { 100:                  connection = new ConnectionOptions(); 101:                  if (!domain.Equals(string.Empty)) 102:                      connection.Authority = "ntlmdomain:" + this.domain; 103:                  if (!user.Equals(string.Empty)) 104:                      connection.Username = this.user; 105:                  if (!password.Equals(string.Empty)) 106:                      connection.Password = this.password; 107:                  string temp = string.Empty; 108:                  if (ip.Equals(string.Empty)) 109:                      temp = "" + "." + "//" + this.nameSpace;////" + this.ip + "//" + this.nameSpace; 110:                  else 111:                      temp = "113:                  scope = new ManagementScope(temp, connection);115:                  if (!scope.IsConnected) 116:                      scope.Connect();118:                  Cache.CacheClass.Insert(this.ip, scope); 119:              } 120:              else 121:              { 122:                  if (!scope.IsConnected) 123:                      scope.Connect(); 124:              } 125:          } 126:    127:          protected virtual void DisConnection(string key) 128:          { 129:              Cache.CacheClass.Remove(key); 130:          } 131:    132:          protected virtual ManagementObjectCollection GetSelectQueryCollection(string wqlSelect, string condition) 133:          { 134:              SelectQuery query = new SelectQuery(string.Format(wqlSelect, condition)); 135:              ManagementObjectSearcher mos = new ManagementObjectSearcher(scope, query); 136:              return mos.Get(); 137:          } 138:    139:          protected virtual ManagementObjectSearcher GetObjectSearcher(string wqlSelect, string condition) 140:          { 141:              SelectQuery query = new SelectQuery(string.Format(wqlSelect, condition)); 142:              return new ManagementObjectSearcher(scope, query); 143:          } 144:          #endregion 145:      } 146:  }3. 代码说明由于连接远端机器是所有wmi操作的第一步,所以我们把连接wmi作为一个基类,以后所有对wmi操作的类都继承这个类。其中Connection()函数就是建立远端连接。其实很简单,如果只要把域、用户名、密码、IP、wmi命名空间等属性设置完成,就可以利用wmi提供的scope.Connect();来尝试连接远端机器。Wmi中没有释放连接的函数。也就是说,当这个类被GC回收后,远端连接也就自动被释放了,否则与远端机器一直都处于连接状态。

 

转载地址:http://quxno.baihongyu.com/

你可能感兴趣的文章
阿里云NFS NAS数据保护实战
查看>>
Spring cloud配置客户端
查看>>
产品研发项目管理软件哪个好?
查看>>
【阿里云北京峰会】一图看懂机器学习PAI如何帮助企业应用智能化升级
查看>>
Android API中文文档(111) —— MailTo
查看>>
Linux 中如何卸载已安装的软件
查看>>
thinkphp 3.2 增加每页显示条数
查看>>
oracle日常简单数据备份与还原
查看>>
我的友情链接
查看>>
黑马程序员__反射总结
查看>>
Scala学习笔记(5)-类和方法
查看>>
Quartz原理
查看>>
完全卸载oracle|oracle卸载|彻底卸载oracle
查看>>
垃圾收集基础
查看>>
Docker安装及基本命令
查看>>
控制namenode检查点发生的频率
查看>>
2、递归遍历文件夹下每一个文件
查看>>
Remove auto_increment from Schema Dumps (mysqld...
查看>>
解决activity加上Theme.Translucent.NoTitleBar 页面跳转显示桌面
查看>>
php类库
查看>>