使用WMI来连接远端计算机
来源:互联网 发布:关联规则算法应用实例 编辑:程序博客网 时间:2024/05/21 15:40
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 = "
112:
113: scope = new ManagementScope(temp, connection);
114:
115: if (!scope.IsConnected)
116: scope.Connect();
117:
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回收后,远端连接也就自动被释放了,否则与远端机器一直都处于连接状态。
如需转载,请注明本文原创自CSDN TJVictor专栏:http://blog.csdn.net/tjvictor
- 使用WMI来连接远端计算机
- mysql使用Workbench连接远端数据库
- 使用WMI得到计算机的信息
- 使用WMI和Remoting的完美组合来实现在远程计算机上创建进程及与之通讯
- 使用WMI来获取CPU序列号
- 使用WMI来控制Windows服务
- 使用WMI来控制Windows目录
- 使用WMI来操作Windows共享机制
- 丢掉PSEXEC使用wmi来横向渗透
- 编程使用WMI 控制连接属性
- 编程使用WMI 控制连接属性
- 编程使用WMI 控制连接属性
- 编程使用WMI 控制连接属性
- Oracel 连接远端服务器
- MySQL远端连接设置
- 连接远端oracle数据库
- 使用WMI
- 无法连接到WMI提供程序。你没有权限或者该服务器无法访问。请注意你只能使用SQL SERVER 配置管理器来管理sql server 2005服务器
- oracle 实现identity
- QT的正则表达式
- Ubuntu 9.04 Desktop version installation 菜鸟步步高(1)
- C++位操作介绍
- 变量声明和变量定义的区别
- 使用WMI来连接远端计算机
- 字符编码(unicode,utf-8等)学习
- 通过JS计算两个数字值
- 好心情决定生活质量
- 我的技术博客
- jQuery新手入门(二) 万能的选择器
- jQuery新手入门(三) 管理jQuery包装集
- 不可恢复的生成错误
- jQuery新手入门(四) 使用jQuery操作元素的属性与样式