【问题标题】:Fast way to search against a large list of computer names and multiple domains using Get-ADComputer in Powershell在 Powershell 中使用 Get-ADComputer 搜索大量计算机名称和多个域的快速方法
【发布时间】:2019-02-28 10:30:06
【问题描述】:

我想知道使用 Get-ADComputer 针对 5 个域搜索大型列表 (50k+) 主机名的最佳方法是什么。

我的想法是你有一个 $domains 数组和一个主机名列表。 Foreach ($domain in $domains) { $results = $hostnames | ForEach-Object { Get-ADComputer -Server $domain -Filter "Name -eq '$($_)'" -Properties * } | Out-DataTable

没有 SearchBase,因为我们不确定机器可以在 AD 结构中的哪个位置,而且显然我们不知道它是哪个域。属性是*,因为我正在寻找所有东西。即使它是有限的,我们至少会寻找至少 8-10 个属性。我玩弄了从 $hostnames 列表中删除项目的想法,因为发现了一些东西。

【问题讨论】:

  • 您是否为每个域打开了至少一个带有 PS 3 或更高版本的 DC 的 wsman 端口?
  • 您最好先获取所有 ADComputer 数据的完整列表,然后将您的列表与该集合进行比较。数千次访问 AD 服务器...似乎是一种花费数小时、数小时和数小时的绝妙方法……[grin]
  • @brendan62269 - 实际上我不确定那件作品
  • @Lee_Dailey - 是的,我也这么认为!

标签: powershell active-directory


【解决方案1】:

网络请求对你的伤害最大。速度的关键是减少网络请求的数量。

我写了一篇关于在使用 AD 时获得更好性能的文章。我谈到的一件事是asking for as much as you can at a time。这个想法是使用多个“或”条件在一个查询中获取多个对象。我在那里写的例子是用 C# 编写的,但你可以将它改编为 PowerShell,我在下面进行了尝试。它将搜索一组 50 个计算机名称。您可能会逃脱 100 或更多。一个 LDAP 查询(不仅仅是查询字符串,而是整个查询包)的限制为 10MB。

删除您找到的名称也是一个好主意,我冒昧地添加了它。您必须将数组转换为 List 才能使用 .Remove()

$hostnames = [Collections.Generic.List[String]]$hostnames
Foreach ($domain in $domains) {
    $filter = ""
    $count = 0
    For ($i=0; $i -lt $hostnames.Count; $i++) {
        if ($filter -eq "") {
            $filter += "Name -eq $($hostnames[$i])"
        } else {
            $filter += " -or Name -eq $($hostnames[$i])"
        }
        $count++

        #check if we have 50 names in the filter, or we're on our last one
        if ($count -eq 50 -or $i -eq $hostnames.Count - 1) {
            $found = Get-ADComputer -Server $domain -Filter $filter -Properties *
            $found | Out-DataTable

            $found | ForEach {
                $hostnames.Remove($_.Name) > $null
            }
            $filter = ""
        }
    }
}

如果所有 5 个域都在同一个 AD 林中,那么您可以摆脱域循环并搜索全局目录。然后,您也无需费心从列表中删除找到的名称。您可以通过将 GC 端口传递给 -Server 参数来做到这一点:

$found = Get-ADComputer -Server "$($domain):3268" -Filter $filter -Properties *

【讨论】:

    猜你喜欢
    • 2017-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 2021-01-24
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多