首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# -- Active Directory -- accountExpires属性未正确读取

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

Stack Overflow用户
提问于 2011-11-08 04:47:23
回答 2查看 4.8K关注 0票数 1

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

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

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

代码语言:javascript
复制
    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;
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-08 05:34:57

你得到了long.MaxValue,对于“从不”来说,这是一个很好的值。您的代码不一致,您正在读取"accountExpires“属性,但却将其赋值给名为"passChanged”的变量。这表明您实际上希望读取与密码相关的属性。比如"maxPwdAge“和"PasswordLastChanged”。帐户通常不会过期,密码才会过期。

票数 1
EN

Stack Overflow用户

发布于 2011-11-08 06:07:25

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8042398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档