可以从 Win32_NetworkAdapterConfiguration 中读取网络接口的 DNS 服务器搜索顺序,就像在 Powershell 中一样,或者以编程方式使用 .Net ManagementObjects:
> $NICs = Get-WMIObject Win32_NetworkAdapterConfiguration | where{$_.IPEnabled -eq “TRUE”}
> $NICs[0]["DnsServerSearchOrder"]
192.168.1.1
192.168.1.2
无论接口配置为从 DHCP 获取 DNS 服务器,还是手动设置 DNS 服务器,WMI 属性都会设置为活动的 DNS 服务器。
您可以将它们设置为固定服务器,如下所示:
> $DNSServers = “198.102.234.125″,”198.102.234.126″
> $NIC.SetDNSServerSearchOrder($DNSServers)
要将适配器设置为使用来自 DHCP 服务器的 DNS,您可以调用 set 函数并使用 null,如下所示:
> $NIC.SetDNSServerSearchOrder()
我无法在注册表中找到此设置的任何独特痕迹。
有没有什么方法可以知道某个接口当前设置为使用 DHCP 来获取其 DNS 服务器?
答案1
通常,如果客户端从 DHCP 获取 IP,它也会获取 DNS 服务器...通常如此。
但是对于您对 WMI 的请求,我不这么认为。
对于 DNS,您具有以下属性:
------------------------------------ ---------- -------------------------
Class Name Type Property Name
------------------------------------ ---------- -------------------------
Win32_ComputerSystem String DNSHostName
Win32_NetworkAdapterConfiguration String DNSDomain
Win32_NetworkAdapterConfiguration String DNSDomainSuffixSearchOrder
Win32_NetworkAdapterConfiguration Boolean DNSEnabledForWINSResolution
Win32_NetworkAdapterConfiguration String DNSHostName
Win32_NetworkAdapterConfiguration String DNSServerSearchOrder
Win32_NetworkAdapterConfiguration Boolean DomainDNSRegistrationEnabled
Win32_NetworkAdapterConfiguration Boolean FullDNSRegistrationEnabled
Win32_NTDomain String DnsForestName
Win32_NTDomain Boolean DSDnsControllerFlag
Win32_NTDomain Boolean DSDnsDomainFlag
Win32_NTDomain Boolean DSDnsForestFlag
------------------------------------ ---------- -------------------------
对于 DHCP 您有:
------------------------------------ ---------- -------------------------
Class Name Type Property Name
------------------------------------ ---------- -------------------------
Win32_NetworkAdapterConfiguration Boolean DHCPEnabled
Win32_NetworkAdapterConfiguration DateTime DHCPLeaseExpires
Win32_NetworkAdapterConfiguration DateTime DHCPLeaseObtained
Win32_NetworkAdapterConfiguration String DHCPServer
------------------------------------ ---------- -------------------------
除上述内容外……没有一个具体显示任何内容来告诉您它正在从 DHCP 获取 DNS 服务器。 DNSServerSearchOrder
将列出数组中的服务器,但不会说“我从 DHCP 服务器获得了这些服务器。
编辑:然而,关于 WMI 的所有内容,我看到的一种方法是使用旧netsh
命令。
具体来说:
netsh interface ipv4 show dns
注意会有一行名为:“通过 DHCP 配置的 DNS 服务器”如果它们是这样配置的。
答案2
在系统上运行 Get-WMIObject Win32_NetworkAdapterConfiguration,你将看到第一个属性输出是:
DHCPEnabled:True
不幸的是,这是您最接近 DHCP 信息的地方,而且显然它没有指定 DNS 信息。从 Microsoft 的文档来看,WMI 对象 Win32_NEtworkAdapterConfiguration 不包含该设置。
http://msdn.microsoft.com/en-us/library/aa394217%28v=vs.85%29.aspx
答案3
如果 DNS 是静态的 DNSserverSearchOrder 已设置...则
Get-WmiObject Win32_NetworkAdapterConfiguration | ForEach-Object { if ($_.DNSServerSearchOrder){Write-Host "$($_.Description) ----> STATIC"}else{Write-Host "$($_.Description) ----> DHCP"}}