我正在尝试通过WMI建立静态的网络接口的DNS服务器(由用户放置)。除了静态部分,我有这个脚本可以工作:
Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object {$_.DNSServerSearchOrder -ne $null} | Select DnsServerSearchOrder,Index,InterfaceIndex
这将导致如下输出:
DnsServerSearchOrder Index InterfaceIndex
-------------------- ----- --------------
{192.168.122.1} 1 6
{1.1.1.1} 2 10
具有192.168.122.1
的接口已将DNS设置为DHCP,因此该值对我不利。如何过滤掉dns不是静态的接口?有什么想法吗?
netsh interface ip show config
:
Configuration for interface "Ethernet"
DHCP enabled: Yes
IP Address: 192.168.122.130
Subnet Prefix: 192.168.122.0/24 (mask 255.255.255.0)
Default Gateway: 192.168.122.1
Gateway Metric: 0
InterfaceMetric: 35
DNS servers configured through DHCP: 192.168.122.1
Register with which suffix: Primary only
WINS servers configured through DHCP: None
Configuration for interface "Ethernet 2"
DHCP enabled: Yes
IP Address: 10.0.0.17
Subnet Prefix: 10.0.0.0/24 (mask 255.255.255.0)
Default Gateway: 10.0.0.1
Gateway Metric: 0
InterfaceMetric: 35
Statically Configured DNS Servers: 1.1.1.1
Register with which suffix: Primary only
WINS servers configured through DHCP: None
注意Statically Configured DNS Servers
和DNS servers configured through DHCP
之间的术语差异。我以为我可以解析此输出,但是我不确定如果更改了Windows语言/区域设置,是否可以依靠此文本,并且我宁愿使用WMI界面。
经过足够的扑朔迷离,我找到了解决方案,但我不是100%积极的正确方法。在所有DHCP DNS服务器上,DNS值包含一个IP地址,并且该IP地址等于Default Gateway
值。当这些值匹配时,我们正在处理DHCP DNS服务器,并且未进行静态配置。