【问题标题】:Checking if a user exists in an ou检查用户是否存在于ou中
【发布时间】:2009-12-27 13:42:55
【问题描述】:

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

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

但是我找到的代码是这样的:

公共静态布尔存在(字符串对象路径) { 布尔发现=假; if (DirectoryEntry.Exists("LDAP://" + objectPath)) { 找到=真; } 发现退货; }

这可以概括为:

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

所以我真的不知道该信任谁,如果我只有一个用户名和 OU 名称以及一个域名,我应该作为 objectPath 传递什么。

请帮忙。

谢谢。

【问题讨论】:

    标签: c# active-directory ou


    【解决方案1】:

    由于用户名在域中必须是唯一的,我认为我不会过度关注 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 );        
             }
        }
    }
    

    【讨论】:

    • 你能解释一下为什么我应该使用关键字Using吗?
    • PrincipalContext 和 UserPrincipal 都实现了 IDisposable。通过将它们包装在 using 语句中,您可以确保在完成对象后调用 Dispose 并释放对象使用的非托管资源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多