我需要将大量用户添加到AD组。我将所有用户SAMAccountNames
存储在datagridview中。
以下代码可以缓慢运行。就好像我在呼叫g.members.add
时直接查询每个用户一样。有没有更有效的方法来添加它们?
For Each r As DataGridViewRow In dgvFinalUsers.Rows
Dim userName As String = r.Cells(0).Value
If Not g.Members.Contains(ctx, IdentityType.SamAccountName, userName) Then
g.Members.Add(ctx, IdentityType.SamAccountName, userName)
i += 1
Debug.Print(i)
End If
Next
g.save
答案 0 :(得分:1)
如果您在For Each之前加载了存在于List对象中的所有用户,然后查看该用户是否存在于List中,该怎么办?这样你只需要查询一次AD?
像这样:
var domainMembers = new List<Principal>();
using (var context = new PrincipalContext( ContextType.Domain ))
{
GroupPrincipal grp = GroupPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "Domain Users");
foreach(var user in grp.GetMembers(false))
{
if(user)
{
domainMembers.add(user);
}
}
}