Can you use WMI to determine if a connection gets its DNS servers from DHCP?

9,229

Solution 1

Usually if a client is getting an IP from DHCP, it obtains DNS servers as well...usually.

But for your request for WMI, I don't think so.

For DNS you have these Properties:

------------------------------------ ---------- -------------------------
 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
------------------------------------ ---------- -------------------------

For DHCP you have:

------------------------------------ ---------- -------------------------
 Class Name                           Type       Property Name
------------------------------------ ---------- -------------------------
 Win32_NetworkAdapterConfiguration    Boolean    DHCPEnabled
 Win32_NetworkAdapterConfiguration    DateTime   DHCPLeaseExpires
 Win32_NetworkAdapterConfiguration    DateTime   DHCPLeaseObtained
 Win32_NetworkAdapterConfiguration    String     DHCPServer
------------------------------------ ---------- -------------------------

Out of those above...none specifically shows anything to tell you it is getting DNS servers from DHCP. DNSServerSearchOrder will list the servers in an array, but won't say "I got these from the DHCP Server.

EDIT: however, all that said about WMI, one way I do see is to use the old netsh command.

Specifically:

netsh interface ipv4 show dns

notice there will be a line called: "DNS servers configured through DHCP" if they are configured that way.

Solution 2

Run Get-WMIObject Win32_NetworkAdapterConfiguration on the system and you will see the first property output is:

DHCPEnabled:True

Unfortunately, that is the closest you are going to get to DHCP information and obviously it doesn't specify DNS info. From Microsofts documentation, the WMI object Win32_NEtworkAdapterConfiguration does not hold that setting.

http://msdn.microsoft.com/en-us/library/aa394217%28v=vs.85%29.aspx

Share:
9,229

Related videos on Youtube

Idan.c
Author by

Idan.c

Updated on September 18, 2022

Comments

  • Idan.c
    Idan.c over 1 year

    The DNS server search order for a network interface can be read from Win32_NetworkAdapterConfiguration like this in Powershell, or programmatically using .Net ManagementObjects:

    > $NICs = Get-WMIObject Win32_NetworkAdapterConfiguration | where{$_.IPEnabled -eq “TRUE”}
    > $NICs[0]["DnsServerSearchOrder"]
    192.168.1.1
    192.168.1.2
    

    The WMI property is set to the active DNS servers whether the interface is configured to get them from DHCP, or if they are set manually.

    You can set them to fixed servers like this:

    > $DNSServers = “198.102.234.125″,”198.102.234.126″
    > $NIC.SetDNSServerSearchOrder($DNSServers)
    

    To set an adapter to use DNS from a DHCP server, you call the set function with null as so:

    > $NIC.SetDNSServerSearchOrder()
    

    I was not able to find any distinctive traces of this setting in the registry.

    Is there any way at all to tell that an interface is currently set to use DHCP to obtain its DNS servers?

    • kralyk
      kralyk about 10 years
      Is Is there any way at all to tell an interface is currently set to use DHCP? the question or is it Is there any way at all to tell an interface is currently set to get its DNS servers from DHCP? -- big difference.
    • kralyk
      kralyk about 10 years
      Derrick,, OK...I'm editing your final sentence then so it doesn't throw anyone off.
  • Idan.c
    Idan.c about 10 years
    The intent here is to [consensually] hijack the DNS servers and be able to restore the original configuration when done. It looks like using DHCPEnabled would at least let me make a better guess as to whether they were automatic or not. Thanks.
  • Byron C.
    Byron C. about 10 years
    If you are trying to change DNS entries temporarily in a script you can pull the current DNS entries from DNSServerSearchOrder and store them until ready to revert. I'm not sure if you can use netsh interface ipv4 show dns output in your script but if so you could decide if you want to set static or dhcp dns.
  • Idan.c
    Idan.c about 10 years
    C: The trouble is if you write back what you read when the settings are "auto", it takes them off auto and fixes them, this is a big problem for users who roam between networks. I've had to make the assumption that if DHCP enabled is set to true, that the settings should be set back to auto. Not the most optimal situation, but the safer one. Thanks!
  • Idan.c
    Idan.c about 10 years
    Nice find. The netsh command provides a great workaround to the deficiency in WMI. Will implement.
  • Pierre.Vriens
    Pierre.Vriens almost 6 years
    what if it is not?
  • vadim_hr
    vadim_hr about 5 years
    netsh command shows wrong result about L2TP connections. The DNS is set by DHCP, but netsh shows it is STATIC.
  • vadim_hr
    vadim_hr about 5 years
    here is useful info about this issue stackoverflow.com/questions/13367306/…