We help IT Professionals succeed at work.

Change DNS using Powershell

Colchester_Institute
on
1,130 Views
Last Modified: 2012-05-10
Hi there.

I've managed to find the attached powershell script that allows me to change dns setting on a server.

If works fine except that i can only add two addresses.

I'm looking to add more than that within the advanced setting on the nic.  how do i go about this?
FUNCTION Set-DNSWINS {
#Get NICS via WMI
$Nics = get-WMIObject -class Win32_NetworkAdapterConfiguration -ComputerName $_ -Filter "IPEnabled=TRUE"

foreach ($NIC in $NICs){
$DNSSERVERS = "xxx.xxx.xxx.xxx","xxx.xxx.xxx.xxx"
$NIC.SetDNSServerSearchOrder($DNSServers)
$NIC.SetDynamicDNSRegistration("True")
$NIC.SetWINSServer.count("xxx.xxx.xxx.xxx","xxx.xxx.xxx.xxx") 
}
}

function Get-filename{
$computer = "e:\Txt_Files\dns.txt"
return $Computer
}

$f = Get-Filename
get-content $f | foreach {set-DNSWINS}

Open in new window

Comment
Watch Question

PowerShell Developer
CERTIFIED EXPERT
Top Expert 2010
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION
ahh yes that works...

it was my own fault also where i'd played around with the syntax

it doesnt however let me put more than two wins addresses in...is there a way out of curiosity i can do that?
Chris DentPowerShell Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:

Unfortunately the SetWINSServer method is a bit limited, NetSh should be able to do it, but I can't seem to get the syntax right for more than one address.

The last resort is hitting the registry, WINS addresses hide here:

HKLM:\System\CurrentControlSet\services\NetBT\parameters\Interfaces\Tcpip_<YourInterface>

There's a NameServerList beneath that. We can set that like this:
$DnsServers = "xxx.xxx.xxx.xxx","xxx.xxx.xxx.xxx", "xxx.xxx.xxx.xxx"
[String[]]$WinsServers = "yyy.yyy.yyy.yyy", "yyy.yyy.yyy.yyy", "yyy.yyy.yyy.yyy"

Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$True" | ForEach-Object {
  $_.SetDNSServerSearchOrder($DNSServers)
  $_.SetDynamicDNSRegistration($True)

  Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\services\NetBT\parameters\Interfaces\Tcpip_$($_.SettingID)" `
    -Name "NameServerList" -Value $WinsServers
}

Open in new window

Note that we have to force $WinsServers to be a String array (String[]) or it'll tell us to get lost.

A bit more convoluted that I prefer, but it should work :)

HTH

Chris
why thank

my manager has said hes not fussed bout the wins but it was for my own learning curve.
Unlock the solution to this question.
Join our community and discover your potential

Experts Exchange is the only place where you can interact directly with leading experts in the technology field. Become a member today and access the collective knowledge of thousands of technology experts.

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.