您可以使用 WMI 来确定连接是否从 DHCP 获取其 DNS 服务器吗?

您可以使用 WMI 来确定连接是否从 DHCP 获取其 DNS 服务器吗?

可以从 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"}}

相关内容