Powershell script to configure DNS setting

Posted on 2016-07-15
Medium Priority
Last Modified: 2016-07-28
Need some help

I need to come up with a Powershell script to change multiple Domain Controllers DNS settings.  

Please note: Ip address does not need to change, only dns address & dns search order

Sites 1&,2 should have dns address:, (search order test.lab, testb.lab)   &  Site 3 should have,, (Search order Testb.lab, Test.lab)

DNS Settings:,,      
DNS Search order:  Test.lab, TestB.lab

I will like to use either csv(import-csv) or txt(get-content) file will lists all of my DC's.    CSV file will likely have columns which lists DNS address, DNS search order, Site Location.

Domain controllers, DC1,DC2,DC3,DC4,DC5,DC6 ,DC7,DC8,DC9

Site 1 - DC1,DC2,DC3
Site 2 - DC4,DC5,DC6
Site 3 - DC7,DC8,DC9

Please note: The reason I list the sites so that I can organize which DC's will receive DNS settings and DNS search order base on its site location.
Question by:JCJohnson76
  • 2
LVL 72

Expert Comment

ID: 41712939
Your text or CSV file does not allow to assign the DNS suffix search order. Best structure would be
1, DC1
1, DC2
1, DC3
2, DC4
2, DC5

Open in new window

and another one for DNS and suffixes
site, DNS, order
1, ",,", "Test.lab, TestB.lab"

Open in new window

Which OS are those DCs running? W8/2012 allows to use some cmdlets, prior OS requires to use e.g. netsh.

Author Comment

ID: 41712965
Running 2008 R2 DC's,

Can you provide detail syntax on the setup of this solution,  

Thanks for the reply, & getting back to so soon
LVL 72

Accepted Solution

Qlemo earned 2000 total points
ID: 41713150
That's getting pretty involved. Looks like we have to mix up some different tools.
Are you able to run PS commands remotely (using WSMAN) on those DCs?
As an intermediate step, here what I would run locally using variables as they came from the CSVs I suggested:
$DNSServers = ',,'
$DNSSuffixes = 'test.lab, testb.lab'
Set-ItemProperty HKLM:System\CurrentControlSet\Services\TCPIP\Parameters SearchList $DNSSuffixes
set idx=1
$DNSServers.Split(',') | 
  % {
    if ($idx -eq 1) {
      "set dnsservers ""LAN""  $_ "
    } else {
      "add dnsservers ""LAN"" $_ index=$idx no"
  } | netsh interface IP

Open in new window


Featured Post

Simplify Active Directory Administration

Administration of Active Directory does not have to be hard.  Too often what should be a simple task is made more difficult than it needs to be.The solution?  Hyena from SystemTools Software.  With ease-of-use as well as powerful importing and bulk updating capabilities.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Auditing domain password hashes is a commonly overlooked but critical requirement to ensuring secure passwords practices are followed. Methods exist to extract hashes directly for a live domain however this article describes a process to extract u…
Recently we ran in to an issue while running some SQL jobs where we were trying to process the cubes.  We got an error saying failure stating 'NT SERVICE\SQLSERVERAGENT does not have access to Analysis Services. So this is a way to automate that wit…
Exchange organizations may use the Journaling Agent of the Transport Service to archive messages going through Exchange. However, if the Transport Service is integrated with some email content management application (such as an anti-spam), the admin…
Did you know PowerShell can save you time with SaaS platforms? Simply leverage RESTfulAPIs to build your own PowerShell modules. These will kill repetitive tickets and tabs, using the command Invoke-RestMethod. Tune into this webinar to learn how…

586 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question