目前我们有一个脚本,可以将100个用户添加到100个不同的组中。这样就可以处理10.000'行代码。
对于我们所做的每一行:
Try {
add-adgroupmember -identity "CN=...." -Members "CN=..."
} catch {
Add-content ...
}
如果脚本相当小,那么这不是问题。但是如果你必须授予100.000组成员资格,这将花费很多时间。我已经使用了将用户数组添加到组的方法。这样做的速度要快得多,但当1个用户发出错误或者其中一个错误时,您只会收到1条错误消息。并且为了确定知道哪一个,您需要遍历这些用户以检查哪个不在组中。
有没有办法加快这个过程?
答案 0 :(得分:0)
直接使用AD的.net类而不是AD cmdlet应该更快,特别是在System.DirectoryServices.AccountManagement命名空间下找到的那些应该可以很快地工作。
作为替代方案,您可以尝试并行运行“添加”(通过工作流程或作业)。
答案 1 :(得分:0)
此方案中最可能出现的错误是:
这些很容易解决:
# List of Users
$Users = "John01","Joe02","Kyle45"
# List of groups we want to make them members of
$Groups = "Finance Users","Accountants"
# Remove all users that don't exist or are disabled
$Users = $Users |Where-Object { try {
Get-ADUser -Filter "Enabled -eq $true -and SAMAccountName -eq $_" -ErrorAction Stop
$true
} catch { $false } }
foreach($Group in $Groups){
# Check if any of the users are already members of the group
$CurrentGroupMembers = Get-ADGroupMember -Identity $Group | Select-Object -ExpandProperty SAMAccountName
$NewMembers = $Users |Where-Object { $CurrentGroupMembers -notcontains $_ }
# Add the remaining users to the group all at once
Add-ADGroupMember -Identity $Group -Members $NewMembers
}
现在我们已经将10.000个LDAP请求减少到最多300个(yay)