我试图找到一种在 ActiveDirectory 中查询大量用户帐户的有效方法,但我遇到了一些问题。
我有一个脚本,它遍历从另一个员工管理程序导出的文件,获取员工 ID,然后我在 ActiveDirectory 中搜索。每个用户帐户都有一个关联的employeeID,我使用是否在A/D中找到某个ID来显示是否应该创建或删除帐户(如果在文件中但不在A/D中,则创建;如果在A/D中但不是文件,删除)。我的问题是我找不到一种有效的方法来做到这一点。
我的旧方法是使用 Get-ADUser 一次搜索每个员工 ID,但这非常慢。我还尝试拉下所有非系统帐户,然后使用列表中的 Where-Object 过滤掉匹配的帐户。对于大量帐户,这也会变得非常慢,因为 Where-Object 正在检查我的帐户数组中的每个帐户。
我认为必须有一种更快的方法来做到这一点,因为我能够在我试图匹配的属性上猛击 -contains 并在一分钟左右的时间内获得每个 ID 的响应,而不是 20运行一个 where 对象。有什么建议吗?
一些注意事项:
我已经对来自文件的 ID 和 ActiveDirectory 中的 ID 进行了预处理,以确保没有重复,因此只获取第一个结果就可以了。
旧方法(去掉处理代码简化):
$csv = Import-CSV -Path $someFile
Foreach($line in $csv){
$DoesAccountExist = Get-Aduser -filter {employeeID -eq $line.employeeID}
}
Run Code Online (Sandbox Code Playgroud)
工作记忆法:
$csv = Import-CSV -Path $someFile
$Users = Get-Aduser -filter *
$NonSystemUsers = $users | Where-Object {$_.employeeID -match $employeeIDPattern}
#This is the part that is slow
foreach($line in $csv){
$DoesAccountExist = $NonSystemUsers …Run Code Online (Sandbox Code Playgroud)