2009-12-27 140 views
1

我想检查一个OU中是否存在选定的用户(通过他/她登录的用户名),完成此操作的最重要的方法是什么? 之后,我想选择用户并更改他/她的密码。检查用户是否存在于ou

我发现了一些帮助在这里:http://www.codeproject.com/KB/system/everythingInAD.aspx#46

但我发现的代码是这样的:

 
public static bool Exists(string objectPath) 
{ 
    bool found = false; 
    if (DirectoryEntry.Exists("LDAP://" + objectPath)) 
    { 
     found = true; 
    } 
    return found; 
} 

至极可以summeried为:

 
return DirectoryEntry.Exists("LDAP://" + objectPath); 

所以,我真的不如果我拥有的是一个用户名和OU名称以及一个域名,我知道该信任谁,以及我应该传递给objectPath的信息。

请帮忙。

谢谢。

回答

4

由于用户名在域内必须是唯一的,我不认为我会过分关心OU。构建此代码可能会使代码更加脆弱,并且会使代码更加复杂。如果可以,我会尝试使用新的UserPrincipal类。

using (var context = new PrincipalContext(ContextType.Domain)) 
{ 
    using (var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, userName)) 
    { 
     if (user != null) 
     { 
      user.ChangePassword(oldPassword, newPassword); 
      // or if you don't have the user's old password and 
      // do have enough privileges. 
      // user.SetPassword(newPassword);   
     } 
    } 
} 
+0

请问您能解释为什么我应该使用关键字Using? – 2009-12-27 14:10:49

+1

PrincipalContext和UserPrincipal都实现了IDisposable。通过将它们包装在using语句中,确保在完成对象时调用Dispose并释放对象使用的非托管资源。 – tvanfosson 2009-12-27 16:01:19