C# - Active Directory - accountExpires属性无法正确读取

时间:2011-11-07 20:47:23

标签: c# active-directory passwords

我正在开发一个工具,列出了活动目录用户的许多属性。目前,我可以通过向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;
        }
    }

2 个答案:

答案 0 :(得分:1)

你变得越来越长.MaxValue,“永远”的好价值。您的代码不一致,您正在阅读“accountExpires”属性,但是分配给名为“passChanged”的变量。这表明您实际上想要读取与密码相关的属性。像“maxPwdAge”和“PasswordLastChanged”。帐户通常不会过期,密码也会过期。

答案 1 :(得分:0)

我想DateTime expiry = DateTime.FromFileTime((int)ent.Properties["accountExpires"].Value)会为你做这个伎俩