WMIを使用してリモートコンピュータに接続
1.wmi接続前提
wmiを使用してリモートコンピュータに接続するには、まずリモートコンピュータ管理者のユーザー名とパスワードが必要です.コンピュータがドメインにある場合は、ドメイン管理者のユーザー名とパスワードを持つか、ドメインアカウントをネイティブ管理者グループに追加してもいいです.
2.関連クラスの使い方---ConnectionOptionsとManagementScope
ConnectionOptionsは、接続するマシンのドメイン、ユーザー名、パスワードなどの接続オプションを設定するために使用します.ManagementScopeは、接続の実際の操作に使用されます.
コードは次のとおりです.
3.コード説明
リモートマシンを接続することはすべてのwmi操作の最初のステップであるため、私たちはwmiを接続することをベースクラスとし、後でwmi操作のすべてのクラスがこのクラスを継承します.
ここでConnection()関数は、リモート接続を確立することです.ドメイン、ユーザ名、パスワード、IP、wmiネーミングスペースなどの属性設定が完了すれば、wmiが提供するscopeを利用することができる.Connect();リモートマシンに接続してみましょう.
Wmiには接続を解放する関数はありません.すなわち,このクラスがGCによって回収されると,遠隔接続は自動的に解放され,そうでなければ遠隔機器とは常に接続状態にある.
転載する場合は、CSDN TJVictorコラム:http://blog.csdn.net/tjvictorよりオリジナルであることを明記してください.
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よりオリジナルであることを明記してください.