我正在尝试创建一个可以切换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;
}
}
}
答案 0 :(得分:0)
您需要检查其Count属性以确保存在值。试试这个,
if (Entry.Properties["pwdLastSet"].Count > 0)
{
return (Entry.Properties["pwdLastSet"][0] == 0)
}
else
return false;
编辑:
似乎问题来自于您正在查询DirectoryEntry的属性而不是SearchResult。见this question。我有一份工作代码的副本,也在查询SearchResult。