c#——Active Directory——accountExpires属性读取错误

本文关键字:读取 取错误 属性 Directory Active accountExpires | 更新日期: 2023-09-27 18:13:40

我正在开发一个工具,该工具列出了活动目录用户的许多属性。目前,我可以通过向lastPasswordSet属性添加90天(典型策略)来显示到期日期。但是,有些帐户设置为永不过期。

我做了一些研究,发现如果属性,当转换成一个长整数,等于9223372036854775807比密码永远不会过期(或我被告知)。

我遇到的问题是,我查找的每个帐户都有9223372036854775807作为accountExpires值。我有微软的AD工具,可以验证哪些帐户实际上设置为永远不会过期,哪些在90天内到期。我不知道我做错了什么:

    public bool doesPWExpire(string userDN)
    {
        DirectoryEntry ent = new DirectoryEntry(userDN);
        //get account expires property
        LargeInteger passChanged = ent.Properties["accountExpires"].Value as LargeInteger;
        //convert to data type long
        long int64Value = (long)((uint)passChanged.LowPart | (((long)passChanged.HighPart) << 32));
        if (int64Value == 9223372036854775807)
        {
            return false;
        }
        else
        {
            return true;
        }
    }

c#——Active Directory——accountExpires属性读取错误

你太长了。MaxValue,"never"的好值。你的代码不一致,你正在读取"accountExpires"属性,但分配给一个名为"passChanged"的变量。这表明您实际上想要读取与密码相关的属性。比如"maxPwdAge"answers"PasswordLastChanged"。帐户通常不会过期,密码会。

我想DateTime expiry = DateTime.FromFileTime((int)ent.Properties["accountExpires"].Value)会帮你解决这个问题的