首先,我一般对编程还是比较陌生的。我正在使用一个简单的监视工具。
我正在尝试获取所有锁定的AD用户的列表。多亏了stackoverflow,我找到了曾经有同样问题的人,不幸的是,他的回答对我没有用。而且我无法弄清楚为什么,但是我想我搜索正确了。下面的代码抛出以下错误。
(粗略翻译:值不能为null。参数名称:IdentityValue)
尝试在下面的代码中搜索“域用户”的替代方法,但是没有运气。
GroupPrincipal grp = GroupPrincipal.FindByIdentity(context,
IdentityType.SamAccountName, "Domain Users");
这是我正在使用的代码。
var lockedUsers = new List<UserPrincipal>();
using (var context = new PrincipalContext(ContextType.Domain,
"domainname"))
{
GroupPrincipal grp =
GroupPrincipal.FindByIdentity(context, IdentityType.SamAccountName,
"Domain Users");
foreach (var userPrincipal in grp.GetMembers(false))
{
var user = UserPrincipal.FindByIdentity(context,
IdentityType.SamAccountName, userPrincipal.UserPrincipalName);
if (user != null)
{
if (user.IsAccountLockedOut())
{
lockedUsers.Add(user);
}
}
}
}
答案 0 :(得分:0)
我能够复制该问题,并且错误在以下行中:var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, userPrincipal.UserPrincipalName);
您正在尝试通过SamAccountName
查找身份,因为FindIdentity
的第二个参数-method是要过滤的身份类型,但是您提供的是UserPrincipalName
而不是SamAccountName
。以下选项可以解决您的问题:
var user = UserPrincipal.FindByIdentity(context, IdentityType.UserPrincipalName, userPrincipal.UserPrincipalName);
或:
var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, userPrincipal.SamAccountName);