引用 http://www.cnblogs.com/skynothing/archive/2010/07/26/1785344.html
这几天使用C#操作windows帐户相当纠结,以前没做过,google翻阅了不少资料,尝试不少方法,终于解决了我的问题。
1.创建windows帐户
view sourceprint?01 /// <summary>
02 /// 创建Windows帐户
03 /// </summary>
04 /// <param name="pathname"></param>
05 /// <returns></returns>
06 public static void CreateLocalUser(string username, string password, string description)
07 {
08 DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
09 var newUser = localMachine.Children.Add(username, "user");
10 newUser.Invoke("SetPassword", new object[] { password });
11 newUser.Invoke("Put", new object[] { "Description", description });
12 newUser.CommitChanges();
13 localMachine.Close();
14 newUser.Close();
15 }
2.更改Windows帐户密码
view sourceprint?01 /// <summary>
02 /// 更改Windows帐户密码
03 /// </summary>
04 /// <param name="username"></param>
05 /// <param name="oldPwd"></param>
06 /// <param name="newPwd"></param>
07 public static void ChangeWinUserPasswd(string username, string oldPwd, string newPwd)
08 {
09 DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
10 DirectoryEntry user = localMachine.Children.Find(username, "user");
11 object[] password = new object[] { oldPwd, newPwd };
12 object ret = user.Invoke("ChangePassword", password);
13 user.CommitChanges();
14 localMachine.Close();
15 user.Close();
16 }
3.判断Windows用户是否存在
view sourceprint?01 /// <summary>
02 /// 判断Windows用户是否存在
03 /// </summary>
04 /// <param name="username"></param>
05 /// <returns></returns>
06 public static bool ExistWinUser(string username)
07 {
08 try
09 {
10 using (DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer"))
11 {
12 var user = localMachine.Children.Find(username, "user");
13 return user != null;
14 }
15 }
16 catch
17 {
18 return false;
19 }
20 }
4.删除Windows用户view sourceprint?01 /// <summary>
02 /// 删除Windows用户
03 /// </summary>
04 /// <param name="username"></param>
05 /// <returns></returns>
06 public static bool DeleteWinUser(string username)
07 {
08 try
09 {
10 using (DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer"))
11 {
12 //删除存在用户
13 var delUser = localMachine.Children.Find(username, "user");
14 if (delUser != null)
15 {
16 localMachine.Children.Remove(delUser);
17 }
18 }
19 return true;
20 }
21 catch
22 {
23 return false;
24 }
25 }
5.启用/禁用windows帐户
view sourceprint?01 /// <summary>
02 /// 启用/禁用windows帐户
03 /// </summary>
04 /// <param name="username"></param>
05 public static void Disable(string username, bool isDisable)
06 {
07 var userDn = "WinNT://" + Environment.MachineName + "/" + username + ",user";
08 DirectoryEntry user = new DirectoryEntry(userDn);
09 user.InvokeSet("AccountDisabled", isDisable);
10 user.CommitChanges();
11 user.Close();
12 }
操作windows帐户的方法的诀窍在于通过DirectoryEntry 实例调用Invoke,InvokeGet,InvokeSet这三个方法。此三个方法可以对对本机 Active Directory 对象调用方法。操作win帐户的Active Directory 对象就是IADsUser接口。DirectoryEntry 实例通过调用Invoke方法调用IADsUser接口的方法,如上面修改Windows帐户密码就是通过调用IADsUser接口的“ChangePassword”方法;通过InvokeGet和InvokeSet方法调用IADsUser接口的属性,如上面的启用/禁用windows帐户,调用IADsUser接口的“AccountDisabled”属性。IADsUser接口具体有什么方法和属性可参考:http://msdn.microsoft.com/zh-cn/library/aa746340(v=VS.85).aspx
这几天使用C#操作windows帐户相当纠结,以前没做过,google翻阅了不少资料,尝试不少方法,终于解决了我的问题。
1.创建windows帐户
view sourceprint?01 /// <summary>
02 /// 创建Windows帐户
03 /// </summary>
04 /// <param name="pathname"></param>
05 /// <returns></returns>
06 public static void CreateLocalUser(string username, string password, string description)
07 {
08 DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
09 var newUser = localMachine.Children.Add(username, "user");
10 newUser.Invoke("SetPassword", new object[] { password });
11 newUser.Invoke("Put", new object[] { "Description", description });
12 newUser.CommitChanges();
13 localMachine.Close();
14 newUser.Close();
15 }
2.更改Windows帐户密码
view sourceprint?01 /// <summary>
02 /// 更改Windows帐户密码
03 /// </summary>
04 /// <param name="username"></param>
05 /// <param name="oldPwd"></param>
06 /// <param name="newPwd"></param>
07 public static void ChangeWinUserPasswd(string username, string oldPwd, string newPwd)
08 {
09 DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
10 DirectoryEntry user = localMachine.Children.Find(username, "user");
11 object[] password = new object[] { oldPwd, newPwd };
12 object ret = user.Invoke("ChangePassword", password);
13 user.CommitChanges();
14 localMachine.Close();
15 user.Close();
16 }
3.判断Windows用户是否存在
view sourceprint?01 /// <summary>
02 /// 判断Windows用户是否存在
03 /// </summary>
04 /// <param name="username"></param>
05 /// <returns></returns>
06 public static bool ExistWinUser(string username)
07 {
08 try
09 {
10 using (DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer"))
11 {
12 var user = localMachine.Children.Find(username, "user");
13 return user != null;
14 }
15 }
16 catch
17 {
18 return false;
19 }
20 }
4.删除Windows用户view sourceprint?01 /// <summary>
02 /// 删除Windows用户
03 /// </summary>
04 /// <param name="username"></param>
05 /// <returns></returns>
06 public static bool DeleteWinUser(string username)
07 {
08 try
09 {
10 using (DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer"))
11 {
12 //删除存在用户
13 var delUser = localMachine.Children.Find(username, "user");
14 if (delUser != null)
15 {
16 localMachine.Children.Remove(delUser);
17 }
18 }
19 return true;
20 }
21 catch
22 {
23 return false;
24 }
25 }
5.启用/禁用windows帐户
view sourceprint?01 /// <summary>
02 /// 启用/禁用windows帐户
03 /// </summary>
04 /// <param name="username"></param>
05 public static void Disable(string username, bool isDisable)
06 {
07 var userDn = "WinNT://" + Environment.MachineName + "/" + username + ",user";
08 DirectoryEntry user = new DirectoryEntry(userDn);
09 user.InvokeSet("AccountDisabled", isDisable);
10 user.CommitChanges();
11 user.Close();
12 }
操作windows帐户的方法的诀窍在于通过DirectoryEntry 实例调用Invoke,InvokeGet,InvokeSet这三个方法。此三个方法可以对对本机 Active Directory 对象调用方法。操作win帐户的Active Directory 对象就是IADsUser接口。DirectoryEntry 实例通过调用Invoke方法调用IADsUser接口的方法,如上面修改Windows帐户密码就是通过调用IADsUser接口的“ChangePassword”方法;通过InvokeGet和InvokeSet方法调用IADsUser接口的属性,如上面的启用/禁用windows帐户,调用IADsUser接口的“AccountDisabled”属性。IADsUser接口具体有什么方法和属性可参考:http://msdn.microsoft.com/zh-cn/library/aa746340(v=VS.85).aspx