我尝试了各种方法来获取与 Active Directory 用户关联的组,但每种方法都非常慢。
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain.Text, username.Text, password.Text))
{
UserPrincipal user = UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, username.Text);
if (user != null)
{
int userGroupTmp = 0;
var group1Principal = GroupPrincipal.FindByIdentity(pc, IdentityType.Name, group1.Text);
var group2Principal = GroupPrincipal.FindByIdentity(pc, IdentityType.Name, group2.Text);
var group3Principal = GroupPrincipal.FindByIdentity(pc, IdentityType.Name, group3.Text);
var group4Principal = GroupPrincipal.FindByIdentity(pc, IdentityType.Name, group4.Text);
if (group1Principal != null && user.IsMemberOf(group1Principal))
{
userGroupTmp = 1;
}
else if (group2Principal != null && user.IsMemberOf(group2Principal))
{
userGroupTmp = 2;
}
else if (group3Principal != null && user.IsMemberOf(group3Principal))
{
userGroupTmp = 3;
}
else if (group4Principal != null && user.IsMemberOf(group4Principal))
{
userGroupTmp = 4;
}
// ...
}
}
看来无论如何都是慢的。我也尝试过
user.GetAuthorizationGroups()
但我得到了相同的结果。
有什么建议或不同的方法来获得群组吗?
我尝试了不同的方法,期望在时间方面有更好的表现。
您可以使用 Get-ADPrincipalGroupMembership cmdlet。
例如:获取 ADPrincipalGroupMembership - 身份管理员