【问题标题】:How to read "msDS-ResultantPSO" attribute value of AD user using C#如何使用 C# 读取 AD 用户的“msDS-ResultantPSO”属性值
【发布时间】:2016-07-04 05:29:39
【问题描述】:

我正在尝试使用 C# 访问 AD 用户的“msDS-ResultantPSO”属性值,我对用户应用了密码策略,并在“msDS-ResultantPSO”属性中显示该值。现在,我正在尝试获取此值使用 C# 以相同的方式获取 AD 用户的正常属性,例如“FirstName,LastName,Email ...”。我添加了 ResulantPSO 属性以及其他正常属性来加载。我的代码带来了除“msDS”之外的所有正常属性值-结果PSO”。

请任何人在这方面帮助我。

【问题讨论】:

    标签: c# active-directory


    【解决方案1】:

    我必须确保运行我的程序的用户具有适当的 AD 读取权限,而不是让您关闭:

    var ad = new PrincipalContext(ContextType.Domain, _domain, _ldapPathOu);
    
    UserPrincipal user = UserPrincipal.FindByIdentity(ad, username);
    DirectoryEntry entry = user.GetUnderlyingObject() as DirectoryEntry;
    DirectorySearcher mySearcher = new DirectorySearcher(entry);
    SearchResultCollection results;
    mySearcher.PropertiesToLoad.Add("msDS-ResultantPSO");
    
    results = mySearcher.FindAll();
    
    if (results.Count >= 1)
    {
        string pso = results[0].Properties["msDS-ResultantPSO"][0].ToString();
    
        //do something with the pso..
        DirectoryEntry d = new DirectoryEntry(@"LDAP://corp.example.com/"+ pso);
    
        var searchForPassPolicy = new DirectorySearcher(d);
        searchForPassPolicy.Filter = @"(objectClass=msDS-PasswordSettings)";
        searchForPassPolicy.SearchScope = System.DirectoryServices.SearchScope.Subtree;
    
        searchForPassPolicy.PropertiesToLoad.AddRange(new string[] {"msDS-MaximumPasswordAge"});
        var x = searchForPassPolicy.FindAll();
    
        var maxAge = (Int64)x[0].Properties["msDS-MaximumPasswordAge"][0];
        var maxPwdAgeInDays = ConvertTimeToDays(maxAge);
    }
    

    【讨论】:

    • 感谢您抽出宝贵时间提供此答案,它与我正在寻找的非常相似。我的问题是 msDS-ResultantPSO 是一个构造属性,我无法像您的示例中那样通过 directorysearcher 检索它。有什么建议吗?
    • 搞定了,问题出在我头上,你的例子很完美!谢谢!
    • @MattSanders 没问题!刚刚看到这个,很高兴你能够让它工作!
    猜你喜欢
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2022-01-12
    • 2022-01-22
    相关资源
    最近更新 更多