C#使用DirectoryEntry類操作Windows帳戶


1.創建windows帳戶

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/// <summary>
/// 創建Windows帳戶
/// </summary>
/// <param name="pathname"></param>
/// <returns></returns>
public  static  void  CreateLocalUser( string  username, string  password, string  description)
{
     DirectoryEntry localMachine = new  DirectoryEntry( "WinNT://"  + Environment.MachineName + ",computer" );
     var  newUser = localMachine.Children.Add(username, "user" );
     newUser.Invoke( "SetPassword" , new  object [] { password });
     newUser.Invoke( "Put" , new  object [] { "Description" , description });
     newUser.CommitChanges();
     localMachine.Close();
     newUser.Close();
}

2.更改Windows帳戶密碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/// <summary>
/// 更改Windows帳戶密碼
/// </summary>
/// <param name="username"></param>
/// <param name="oldPwd"></param>
/// <param name="newPwd"></param>
public  static  void  ChangeWinUserPasswd( string  username, string  oldPwd, string  newPwd)
{
     DirectoryEntry localMachine = new  DirectoryEntry( "WinNT://"  + Environment.MachineName + ",computer" );
     DirectoryEntry user = localMachine.Children.Find(username, "user" );
     object [] password = new  object [] { oldPwd, newPwd };
     object  ret = user.Invoke( "ChangePassword" , password);
     user.CommitChanges();
     localMachine.Close();
     user.Close();
}

3.判斷Windows用戶是否存在

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/// <summary>
/// 判斷Windows用戶是否存在
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
public  static  bool  ExistWinUser( string  username)
{
     try
     {
         using  (DirectoryEntry localMachine = new  DirectoryEntry( "WinNT://"  + Environment.MachineName + ",computer" ))
         {
             var  user = localMachine.Children.Find(username, "user" );
             return  user != null ;
         }
     }
     catch
     {
         return  false ;
     }
}

4.刪除Windows用戶

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/// <summary>
/// 刪除Windows用戶
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
public  static  bool  DeleteWinUser( string  username)
{
     try
     {
         using  (DirectoryEntry localMachine = new  DirectoryEntry( "WinNT://"  + Environment.MachineName + ",computer" ))
         {
             //刪除存在用戶
             var  delUser = localMachine.Children.Find(username, "user" );
             if  (delUser != null )
             {
                 localMachine.Children.Remove(delUser);
             }
         }
         return  true ;
     }
     catch
     {
         return  false ;
     }
}

 

5.啟用/禁用windows帳戶

1
2
3
4
5
6
7
8
9
10
11
12
/// <summary>
/// 啟用/禁用windows帳戶
/// </summary>
/// <param name="username"></param>
public  static  void  Disable( string  username, bool  isDisable)
{
     var  userDn = "WinNT://"  + Environment.MachineName + "/"  + username + ",user" ;
     DirectoryEntry user = new  DirectoryEntry(userDn);
     user.InvokeSet( "AccountDisabled" , isDisable);
     user.CommitChanges();
     user.Close();
}

 

  操作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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM