DirectoryServices DirectoryEntry获取pwdLastSet属性c#

时间:2018-02-14 00:04:18

标签: c# active-directory ldap directoryservices directoryentry

我正在尝试创建一个可以切换pwdLastSet属性的bool属性。

public bool UserMustChangePassword
{
    get { return (long)Entry.Properties["pwdLastSet"].Value == 0; }
    set
    {
        if (value) 
        {
            Entry.Properties["pwdLastSet"].Value = 0; 
        }
        else 
        { 
            Entry.Properties["pwdLastSet"].Value = -1; 
        }
    }                                                                                   
}

我可以成功设置属性但是我无法读取属性。我一直得到以下投射错误。

  

System.InvalidCastException:'指定的演员表无效。'

是否有特定的方法来阅读此属性。我知道有可能UserPrincipal,但是我想使用DirectoryEntry来保持代码的一致性。

修改:在投射前检查null

public bool UserMustChangePassword
{
    get
    {
        var value = Entry.Properties["pwdLastSet"].Value;

        if (value != null)
            return (long)Entry.Properties["pwdLastSet"].Value == 0;

        return false;
    }
    set
    {
        if (value) 
        {
            Entry.Properties["pwdLastSet"].Value = 0; 
        }
        else 
        { 
            Entry.Properties["pwdLastSet"].Value = -1; 
        }
    }                                                                                   
}

1 个答案:

答案 0 :(得分:0)

您需要检查其Count属性以确保存在值。试试这个,

if (Entry.Properties["pwdLastSet"].Count > 0)
{
    return (Entry.Properties["pwdLastSet"][0] == 0)
}
else 
    return false;

编辑:

似乎问题来自于您正在查询DirectoryEntry的属性而不是SearchResult。见this question。我有一份工作代码的副本,也在查询SearchResult。