![如何查找 AD 网络上所有工作站的 DNS 设置?](https://linux22.com/image/670341/%E5%A6%82%E4%BD%95%E6%9F%A5%E6%89%BE%20AD%20%E7%BD%91%E7%BB%9C%E4%B8%8A%E6%89%80%E6%9C%89%E5%B7%A5%E4%BD%9C%E7%AB%99%E7%9A%84%20DNS%20%E8%AE%BE%E7%BD%AE%EF%BC%9F.png)
我们与一位客户合作的复印机供应商有 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 服务器时,我成功地使用了这一点。