Порядок поиска DNS-сервера для сетевого интерфейса можно прочитать из Win32_NetworkAdapterConfiguration, как в Powershell, или программно с помощью .Net ManagementObjects:
> $NICs = Get-WMIObject Win32_NetworkAdapterConfiguration | where{$_.IPEnabled -eq “TRUE”}
> $NICs[0]["DnsServerSearchOrder"]
192.168.1.1
192.168.1.2
Свойство WMI настроено на активные DNS-серверы, независимо от того, настроен ли интерфейс для их получения от DHCP, или если они установлены вручную.
Вы можете установить их на фиксированные серверы следующим образом:
> $DNSServers = “198.102.234.125″,”198.102.234.126″
> $NIC.SetDNSServerSearchOrder($DNSServers)
Чтобы настроить адаптер на использование DNS с DHCP-сервера, вы вызываете функцию set с null следующим образом:
> $NIC.SetDNSServerSearchOrder()
Мне не удалось найти в реестре каких-либо отличительных следов этой настройки.
Есть ли вообще способ узнать, что интерфейс в настоящее время настроен на использование DHCP для получения своих DNS-серверов?
Обычно, если клиент получает IP-адрес от DHCP, он также получает 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
------------------------------------ ---------- -------------------------
Из вышеперечисленных ... никто конкретно не показывает ничего, что могло бы сказать вам, что он получает DNS-серверы от DHCP. DNSServerSearchOrder
перечислит серверы в массиве, но не скажет: «Я получил их от DHCP-сервера.
РЕДАКТИРОВАТЬ: однако, все, что было сказано о WMI, я вижу один из способов использования старого netsh
команда.
В частности:
netsh interface ipv4 show dns
обратите внимание, будет строка с именем: «DNS-серверы, настроенные через DHCP» если они настроены таким образом.
Запустите 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
Если DNS статический DNSserverSearchOrder установлен ... Тогда
Get-WmiObject Win32_NetworkAdapterConfiguration | ForEach-Object { if ($_.DNSServerSearchOrder){Write-Host "$($_.Description) ----> STATIC"}else{Write-Host "$($_.Description) ----> DHCP"}}