http://www.fangsi.net/archives/249.html
鉴于此方法功力强大请各位武林好汉不要拿来做坏事哟,下面进入正题。
C#修改电脑密码方法如下:
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) |
11 | DirectoryEntry localMachine = new DirectoryEntry( "WinNT://" + Environment.MachineName + ",computer" ); |
12 | DirectoryEntry user = localMachine.Children.Find(username, "user" ); |
13 | object [] password = new object [] { oldPwd, newPwd }; |
14 | object ret = user.Invoke( "ChangePassword" , password); |
C#重置电脑密码如下:
04 | /// <param name="userName">用户名</param> |
05 | /// <param name="password">新密码</param> |
06 | public static void ResetUserPassword( string userName, string password) |
08 | string _Path = "WinNT://" + Environment.MachineName; |
10 | DirectoryEntry machine = new DirectoryEntry(_Path); |
11 | DirectoryEntry user = machine.Children.Find(userName, "User" ); |
14 | user.Invoke( "SetPassword" , password); |
下面提供一下类大家可以参考一下
005 | /// <param name="pathname"></param> |
006 | /// <returns></returns> |
007 | public static void CreateLocalUser( string username, string password, string description) |
009 | DirectoryEntry localMachine = new DirectoryEntry( "WinNT://" + Environment.MachineName + ",computer" ); |
010 | var newUser = localMachine.Children.Add(username, "user" ); |
011 | newUser.Invoke( "SetPassword" , new object [] { password }); |
012 | newUser.Invoke( "Put" , new object [] { "Description" , description }); |
013 | newUser.CommitChanges(); |
014 | localMachine.Close(); |
023 | /// <param name="username"></param> |
024 | /// <param name="oldPwd"></param> |
025 | /// <param name="newPwd"></param> |
026 | public static void ChangeWinUserPasswd( string username, string oldPwd, string newPwd) |
028 | DirectoryEntry localMachine = new DirectoryEntry( "WinNT://" + Environment.MachineName + ",computer" ); |
029 | DirectoryEntry user = localMachine.Children.Find(username, "user" ); |
030 | object [] password = new object [] { oldPwd, newPwd }; |
031 | object ret = user.Invoke( "ChangePassword" , password); |
032 | user.CommitChanges(); |
033 | localMachine.Close(); |
042 | /// <param name="username"></param> |
043 | /// <returns></returns> |
044 | public static bool ExistWinUser( string username) |
048 | using (DirectoryEntry localMachine = new DirectoryEntry( "WinNT://" + Environment.MachineName + ",computer" )) |
050 | var user = localMachine.Children.Find(username, "user" ); |
065 | /// <param name="username"></param> |
066 | /// <returns></returns> |
067 | public static bool DeleteWinUser( string username) |
071 | using (DirectoryEntry localMachine = new DirectoryEntry( "WinNT://" + Environment.MachineName + ",computer" )) |
074 | var delUser = localMachine.Children.Find(username, "user" ); |
077 | localMachine.Children.Remove(delUser); |
093 | /// <param name="username"></param> |
094 | public static void Disable( string username, bool isDisable) |
096 | var userDn = "WinNT://" + Environment.MachineName + "/" + username + ",user" ; |
097 | DirectoryEntry user = new DirectoryEntry(userDn); |
098 | user.InvokeSet( "AccountDisabled" , isDisable); |
099 | user.CommitChanges(); |
操作windows帐户的方法的诀窍在于通过DirectoryEntry 实例调用Invoke,InvokeGet,InvokeSet这三个方法。此三个方法可以对对本机 Active Directory 对象调用方法。操作win帐户的Active Directory 对象就是IADsUser接口。DirectoryEntry 实例通过调用Invoke方法调用IADsUser接口的方法,如上面修改Windows帐户密码就是通过调用IADsUser接口的“ChangePassword”方法;通过InvokeGet和InvokeSet方法调用IADsUser接口的属性,如上面的启用/禁用windows帐户,调用IADsUser接口的“AccountDisabled”属性