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

C#--Active Directory--accountExpires属性读取不正确,c#,active-directory,passwords,C#,Active Directory,Passwords,我正在开发一个工具,其中列出了active directory用户的许多属性。目前,我可以通过向lastPasswordSet属性添加90天(典型策略)来显示过期日期。但是,有些帐户设置为永不过期 我做了一些研究,发现如果属性在转换为长整数时等于9223372036854775807,那么密码永远不会过期(或者我被告知如此) 我遇到的问题是,我查找的每个帐户都有9223372036854775807作为accountExpires值。我有microsoft AD工具,可以验证哪些帐户实际上设置为

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

我做了一些研究,发现如果属性在转换为长整数时等于9223372036854775807,那么密码永远不会过期(或者我被告知如此)

我遇到的问题是,我查找的每个帐户都有9223372036854775807作为accountExpires值。我有microsoft 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;
        }
    }
public bool doesPWExpire(字符串userDN)
{
DirectoryEntry ent=新的DirectoryEntry(userDN);
//获取帐户过期属性
LargeInteger passChanged=ent.Properties[“accountExpires”]。值为LargeInteger;
//转换为长数据类型

long int64Value=(long)((uint)passChanged.LowPart |)((long)passChanged.HighPart)您得到了long.MaxValue,这是一个很好的“从不”值。您的代码不一致,您正在读取“accountExpires”属性,但分配给一个名为“passChanged”的变量。这表明您实际上想要读取与密码相关的属性。例如“maxPwdAge”和“PasswordLastChanged”。帐户通常不会过期,密码会过期。

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

我想象
DateTime expire=DateTime.FromFileTime((int)ent.Properties[“accountExpires”].Value)
会帮你解决这个问题

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

谢谢你的回复。我收到了一个无效的强制转换异常。我会继续使用它,但如果你有任何其他想法,请告诉我。你可能必须将它强制转换为字符串并调用int.parse或尝试强制转换为long。我手头没有测试环境。谢谢你的回复。我收到了一封电子邮件n此代码出现无效的强制转换异常。我将继续使用它,但如果您有任何其他想法,请告诉我。您可能必须将其强制转换为字符串并调用int.parse或尝试强制转换为long。我手头没有测试环境。感谢您的回复。这很有意义。您知道确定“密码不会过期"检查是在AD中设置的?为什么不试试呢?创建一个密码不过期的帐户,检查阅读MaxpDage时得到的信息。要阅读和设置“密码永不过期”,请查看“userAccountControl”属性和ADS\u UF\u don\u expire\u password帐户通常不会过期,密码会过期。过期日期不正确。可以n帐户和密码都可以设置,两者都可能过期。请注意“通常”一词。谢谢您的回复。这很有意义。您知道确定“密码未过期”的其他方法吗检查是在AD中设置的?为什么不试试呢?创建一个密码不过期的帐户,检查读取MaxpDage时得到的信息。要读取和设置“密码永不过期”,请查看“userAccountControl”属性和ADS\u UF\u don\u expire\u password帐户通常不会过期,密码会过期。过期日期不正确。可以n必须同时设置帐户和密码,两者都可能过期。请注意“通常”一词。