active directory -如何读取msDS-ResultantPSO"使用c#设置AD用户属性值

本文关键字:使用 quot 设置 AD 属性 用户 msDS-ResultantPSO directory 何读取 读取 active | 更新日期: 2023-09-27 17:54:35

我试图使用c#访问AD用户的"msDS-ResultantPSO"属性值,我在用户上应用了密码策略,它显示了"msDS-ResultantPSO"属性中的值。现在,我正试图使用c#以同样的方式获取此值,以获取AD用户的正常属性,如"FirstName, LastName,Email…"。我添加了ResulantPSO属性以及其他正常属性来加载。我的代码带来了所有正常的属性值,除了"msDS-ResultantPSO"。

在这方面有谁能帮我吗

active directory -如何读取msDS-ResultantPSO"使用c#设置AD用户属性值

我必须确保运行我的程序的用户具有适当的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);
}
相关文章: