如何查找 AD 网络上所有工作站的 DNS 设置?

如何查找 AD 网络上所有工作站的 DNS 设置?

我们与一位客户合作的复印机供应商有 IT 网络方面的背景,他在现场遇到了一个问题,发现网络上某个工作站的 DNS 设置不正确:主 DNS 设置为不存在的 IP。但辅助 DNS 是正确的。这让我想知道我是否应该检查所有工作站,它们全部是 Win 7 Pro。网络操作系统是 Windows Small Business Server 2011。DHCP 由 Sonicwall 提供。

由于客户距离很远,我需要找到一种方法来做到这一点,而无需亲自到现场检查每台机器。是否有一个工具(例如 nmap 之类的工具)可以为我从网络上运行的每个工作站中提取 DNS 设置?

谢谢

J.P

答案1

您应该能够使用 Powershell 通过 WMI 读取 DNSServerSearchOrder 来获取信息。假设您在文本文件中拥有要扫描的计算机列表...

$strFilter = "computer"

$objDomain = New-Object System.DirectoryServices.DirectoryEntry

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.SearchScope = "Subtree" 
$objSearcher.PageSize = 1000 

$objSearcher.Filter = "(objectCategory=$strFilter)"

$colResults = $objSearcher.FindAll()

foreach ($i in $colResults) 
    {
        $objComputer = $i.GetDirectoryEntry()
        $networkAdapter = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Property DNSServerSearchOrder -ComputerName $objComputer.Name -Filter "IPEnabled='True'"
        $computer = New-Object PSObject -Property @{
            ComputerName = $objComputer.Name
            DNSServer = $networkAdapter.DNSServerSearchOrder
        }

        Write-Output $computer
    }

循环遍历 AD 的代码取自这里

答案2

为什么不使用组策略来设置您想要的整个域的设置,而不是提取工作站的 DNS 设置呢?无论如何,您最终可能会使用它来强制执行修复。您还应该检查 Sonicwall 上的 DHCP 设置,以确保您分发了您想要的地址。

答案3

简短 - 谁在乎它们当前设置为何,只要确保它们设置正确即可

您实际上应该通过 DHCP 设置来执行此操作,因为这正是范围设置的定义目的。据我所知,您无法通过组策略对象定义 DNS 服务器。不过,您可以使用批处理文件来执行此操作,并将其部署为登录脚本:

@echo off
interface ip set dns “Local Area Connection” static 192.168.1.5
interface ip set dns “Local Area Connection” static 192.168.1.6 index=2

如果它是无线适配器,或者 PC 有多个 LAN 卡,则可能必须更改“本地连接”以适合您的适配器名称。

我只需推送此脚本,无需浪费时间查看 PC 当前设置为何值。推送到您想要的值即可完成。

当我们在一次重大升级中在几周内更换了两个 DNS 服务器时,我成功地使用了这一点。

相关内容