C# 如何阅读;msDS ResultantPSO“;使用C的AD用户属性值#

C# 如何阅读;msDS ResultantPSO“;使用C的AD用户属性值#,c#,active-directory,C#,Active Directory,我正在尝试使用C#访问AD用户的“msDS ResultantPSO”属性值,我在一个用户上应用了密码策略,并在“msDS ResultantPSO”属性中显示该值。现在,我正在尝试使用C#获取该值,方法与获取AD用户的正常属性(如“FirstName、LastName、Email…”相同.I添加了ResultantPSO属性以及其他要加载的普通属性。我的代码带来了除“msDS ResultantPSO”之外的所有普通属性值 在这方面,任何人都可以帮助我。我必须确保运行我的程序的用户具有适当的广

我正在尝试使用C#访问AD用户的“msDS ResultantPSO”属性值,我在一个用户上应用了密码策略,并在“msDS ResultantPSO”属性中显示该值。现在,我正在尝试使用C#获取该值,方法与获取AD用户的正常属性(如“FirstName、LastName、Email…”相同.I添加了ResultantPSO属性以及其他要加载的普通属性。我的代码带来了除“msDS ResultantPSO”之外的所有普通属性值


在这方面,任何人都可以帮助我。

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

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);
}

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

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检索它,如您的示例所示。有什么建议吗?成功了,问题就在我这边,你们的例子很完美!谢谢@没问题!刚看到这个,很高兴你能成功!我感谢你花时间提供这个答案,它与我所寻找的非常相似。我的问题是msDS ResultantPSO是一个构造属性,我无法通过directorysearcher检索它,如您的示例所示。有什么建议吗?成功了,问题就在我这边,你们的例子很完美!谢谢@没问题!刚看到这个,很高兴你能成功!