创建本地用户、修改用户密码及将用户添加到用户组的代码(C#)
时间:2011-02-28 来源:nerocool
1 /// <summary>
2 /// 创建本地用户
3 /// </summary>
4 /// <param name="userName">用户名</param>
5 /// <param name="userPassword">用户密码</param>
6 /// <param name="msg">返回消息</param>
7 /// <returns>成功与否</returns>
8 public static bool CreateLocalUserAccount(string userName, string userPassword, out string returnMsg)
9 {
10 bool bRet = false;
11 returnMsg = "";
12 DirectoryEntry oLocalMachine = null;
13 DirectoryEntry oNewUser = null;
14 try
15 {
16 oLocalMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
17 oNewUser = oLocalMachine.Children.Find(userName, "user");
18 }
19 catch
20 {
21
22 }
23 try
24 {
25 if (oNewUser == null)
26 {
27 oNewUser = oLocalMachine.Children.Add(userName, "user");
28 oNewUser.CommitChanges();
29 returnMsg = oNewUser.Guid.ToString();
30 oNewUser.Invoke("SetPassword", new object[] { userPassword });
31 oNewUser.CommitChanges();
32 oNewUser.Invoke("Put", "UserFlags", DONT_EXPIRE_PASSWORD);
33 oNewUser.CommitChanges();
34 oLocalMachine.Close();
35 oNewUser.Close();
36 bRet = true;
37 }
38 else
39 {
40 bRet = true;
41 returnMsg = string.Format("用户[{0}]已存在,无法重复创建改该用户!", userName);
42 }
43 }
44 catch (Exception ex)
45 {
46 returnMsg = ex.Message;
47 }
48 finally
49 {
50 if (oLocalMachine != null)
51 {
52 oLocalMachine.Close();
53 oLocalMachine.Dispose();
54 oLocalMachine = null;
55 }
56 if (oNewUser != null)
57 {
58 oNewUser.Close();
59 oNewUser.Dispose();
60 oNewUser = null;
61 }
62 }
63 return bRet;
64 } 1 /// <summary>
2 /// 删除本地用户
3 /// </summary>
4 /// <param name="userName">用户名</param>
5 /// <returns>成功与否</returns>
6 public static bool DeleteLocalUserAccount(string userName, out string returnMsg)
7 {
8 bool bRet = true;
9 returnMsg = "";
10 DirectoryEntry oLocalMachine = null;
11 DirectoryEntry oNewUser = null;
12 try
13 {
14 oLocalMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
15 oNewUser = oLocalMachine.Children.Find(userName, "user");
16 }
17 catch
18 {
19
20 }
21 try
22 {
23 if (oNewUser != null)
24 {
25 oLocalMachine.Children.Remove(oNewUser);
26 oLocalMachine.Close();
27 }
28 }
29 catch (Exception ex)
30 {
31 returnMsg = ex.Message;
32 bRet = false;
33 }
34 finally
35 {
36 if (oLocalMachine != null)
37 {
38 oLocalMachine.Close();
39 oLocalMachine.Dispose();
40 oLocalMachine = null;
41 }
42 if (oNewUser != null)
43 {
44 oNewUser.Close();
45 oNewUser.Dispose();
46 oNewUser = null;
47 }
48 }
49 return bRet;
50 } 1 /// <summary>
2 /// 修改用户密码
3 /// </summary>
4 /// <param name="userName">用户名</param>
5 /// <returns>成功与否</returns>
6 public static bool ChangePassword(string userName, string userPassword, out string returnMsg)
7 {
8 bool bRet = true;
9 returnMsg = "";
10 DirectoryEntry oLocalMachine = null;
11 DirectoryEntry oNewUser = null;
12 try
13 {
14 oLocalMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
15 oNewUser = oLocalMachine.Children.Find(userName, "user");
16 }
17 catch
18 {
19
20 }
21 try
22 {
23 if (oNewUser != null)
24 {
25 oNewUser.Invoke("SetPassword", new object[] { userPassword });
26 oNewUser.CommitChanges();
27 }
28 else
29 {
30 returnMsg = string.Format("用户[{0}]不存在,无法修改密码!", userName);
31 bRet = false;
32 }
33 }
34 catch (Exception ex)
35 {
36 returnMsg = ex.Message;
37 bRet = false;
38 }
39 finally
40 {
41 if (oLocalMachine != null)
42 {
43 oLocalMachine.Close();
44 oLocalMachine.Dispose();
45 oLocalMachine = null;
46 }
47 if (oNewUser != null)
48 {
49 oNewUser.Close();
50 oNewUser.Dispose();
51 oNewUser = null;
52 }
53 }
54 return bRet;
55 } 1 /// <summary>
2 /// 检查用户是否存在
3 /// </summary>
4 /// <param name="user"></param>
5 /// <param name="returnMsg"></param>
6 /// <returns></returns>
7 public static bool IsUserExists(string userName)
8 {
9 bool bRet = false;
10 DirectoryEntry oLocalMachine = null;
11 DirectoryEntry oNewUser = null;
12 try
13 {
14 oLocalMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
15 oNewUser = oLocalMachine.Children.Find(userName, "user");
16 if (oNewUser != null)
17 {
18 bRet = true;
19 }
20 }
21 catch
22 {
23 bRet = false;
24 }
25 return bRet;
26 } 1 /// <summary>
2 /// 获取本地所有用户
3 /// </summary>
4 /// <returns></returns>
5 public static List<string> GetLocalUserAccount(out string returnMsg)
6 {
7 List<string> oRet = new List<string>();
8 DirectoryEntry oLocalMachine = null;
9 DirectoryEntry oEntry = null;
10 try
11 {
12 returnMsg = null;
13 oLocalMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
14 IEnumerator oUserEnum = oLocalMachine.Children.GetEnumerator();
15 while (oUserEnum.MoveNext())
16 {
17 oEntry = oUserEnum.Current as DirectoryEntry;
18 if (oEntry != null)
19 {
20 if (oEntry.SchemaClassName.Equals("user", StringComparison.OrdinalIgnoreCase))
21 {
22 oRet.Add(oEntry.Name);
23 }
24 oEntry.Close();
25 oEntry.Dispose();
26 }
27 }
28 }
29 catch (Exception ex)
30 {
31 returnMsg = ex.Message;
32 }
33 finally
34 {
35 if (oLocalMachine != null)
36 {
37 oLocalMachine.Close();
38 oLocalMachine.Dispose();
39 oLocalMachine = null;
40 }
41 }
42 return oRet;
43 } 1 /// <summary>
2 /// 向用户组添加用户
3 /// </summary>
4 /// <param name="userName">用户名</param>
5 /// <param name="groupName">用户组名</param>
6 /// <param name="returnMsg">返回的错误消息</param>
7 /// <returns></returns>
8 public static bool AddUserToGroup(string userName, string groupName, out string returnMsg)
9 {
10 bool bRet = false;
11 returnMsg = "";
12 DirectoryEntry oLocalMachine = null;
13 DirectoryEntry oGroup = null;
14 DirectoryEntry oNewUser = null;
15 try
16 {
17 oLocalMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
18 oGroup = oLocalMachine.Children.Find(groupName, "group");
19 oNewUser = oLocalMachine.Children.Find(userName, "user");
20 }
21 catch
22 { }
23 try
24 {
25 if (oGroup != null)
26 {
27 if (oNewUser != null)
28 {
29 if (!IsUserInGroups(oNewUser, groupName))
30 {
31 oGroup.Invoke("Add", new object[] { oNewUser.Path });
32 oGroup.CommitChanges();
33 bRet = true;
34 }
35 else
36 {
37 oGroup.Invoke("Remove", new object[] { oNewUser.Path });
38 oGroup.CommitChanges();
39 bRet = true;
40 }
41 }
42 else
43 {
44 returnMsg = string.Format("没有找到用户[{0}]", userName);
45 }
46 }
47 else
48 {
49 returnMsg = string.Format("没有找到用户组[{0}]", groupName);
50 }
51 }
52 catch (Exception ex)
53 {
54 returnMsg = string.Format("往用户组[{0}]增加用户[{1}]时发生异常:\r\n{2}", groupName, userName, ex.Message);
55 }
56 finally
57 {
58 if (oLocalMachine != null)
59 {
60 oLocalMachine.Close();
61 oLocalMachine.Dispose();
62 oLocalMachine = null;
63 }
64 if (oGroup != null)
65 {
66 oGroup.Close();
67 oGroup.Dispose();
68 oGroup = null;
69 }
70 if (oNewUser != null)
71 {
72 oNewUser.Close();
73 oNewUser.Dispose();
74 oNewUser = null;
75 }
76 }
77 return bRet;
78 }
79
80 /// <summary>
81 /// 从用户组删除用户
82 /// </summary>
83 /// <param name="userName">用户名</param>
84 /// <param name="groupName">用户组名</param>
85 /// <param name="returnMsg">返回的错误消息</param>
86 /// <returns></returns>
87 public static bool RemoveUserFromGroup(string userName, string groupName, out string returnMsg)
88 {
89 bool bRet = false;
90 returnMsg = "";
91 DirectoryEntry oLocalMachine = null;
92 DirectoryEntry oGroup = null;
93 DirectoryEntry oNewUser = null;
94 try
95 {
96 oLocalMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
97 oGroup = oLocalMachine.Children.Find(groupName, "group");
98 oNewUser = oLocalMachine.Children.Find(userName, "user");
99 }
100 catch
101 { }
102 try
103 {
104 if (oGroup != null)
105 {
106 if (oNewUser != null)
107 {
108 if (IsUserInGroups(oNewUser, groupName))
109 {
110 oGroup.Invoke("Remove", new object[] { oNewUser.Path });
111 oGroup.CommitChanges();
112 }
113 bRet = true;
114 }
115 else
116 {
117 returnMsg = string.Format("没有找到用户[{0}]", userName);
118 }
119 }
120 else
121 {
122 returnMsg = string.Format("没有找到用户组[{0}]", groupName);
123 }
124 }
125 catch (Exception ex)
126 {
127 returnMsg = string.Format("从用户组[{0}]删除用户[{1}]时发生异常:\r\n{2}", groupName, userName, ex.Message);
128 }
129 finally
130 {
131 if (oLocalMachine != null)
132 {
133 oLocalMachine.Close();
134 oLocalMachine.Dispose();
135 oLocalMachine = null;
136 }
137 if (oGroup != null)
138 {
139 oGroup.Close();
140 oGroup.Dispose();
141 oGroup = null;
142 }
143 if (oNewUser != null)
144 {
145 oNewUser.Close();
146 oNewUser.Dispose();
147 oNewUser = null;
148 }
149 }
150 return bRet;
151 }
152
153 /// <summary>
154 /// 判断用户是否已在用户组中
155 /// </summary>
156 /// <param name="userObj"></param>
157 /// <param name="groupName"></param>
158 /// <returns></returns>
159 private static bool IsUserInGroups(DirectoryEntry userObj, string groupName)
160 {
161 bool bRet = false;
162 if (userObj != null)
163 {
164 object oGroups = userObj.Invoke("groups", null);
165 DirectoryEntry oGroup = null;
166 try
167 {
168 foreach (object group in (IEnumerable)oGroups)
169 {
170 oGroup = new DirectoryEntry(group);
171 if (oGroup.Name.Equals(groupName, StringComparison.OrdinalIgnoreCase))
172 {
173 bRet = true;
174 break;
175 }
176 }
177 }
178 catch { }
179 }
180 return bRet;
181 }
相关阅读 更多 +