Назад | Перейти на главную страницу

Можете ли вы использовать WMI, чтобы определить, получает ли соединение свои DNS-серверы от DHCP?

Порядок поиска 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"}}