• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1113
  • Last Modified:

Change DNS using Powershell

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

0
Colchester_Institute
Asked:
Colchester_Institute
  • 2
  • 2
1 Solution
 
Chris DentPowerShell DeveloperCommented:

Hmm why do you think you can only set two?

This should work:
$DNSServers = "1.2.3.4", "2.3.4.5", "3.4.5.6"
$NIC.SetDNSServerSearchOrder($DNSServers)

Open in new window

There's no reason to limit the number there to two.

Chris
0
 
Colchester_InstituteAuthor Commented:
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?
0
 
Chris DentPowerShell DeveloperCommented:

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
0
 
Colchester_InstituteAuthor Commented:
why thank

my manager has said hes not fussed bout the wins but it was for my own learning curve.
0

Featured Post

SMB Security Just Got a Layer Stronger

WatchGuard acquires Percipient Networks to extend protection to the DNS layer, further increasing the value of Total Security Suite.  Learn more about what this means for you and how you can improve your security with WatchGuard today!

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now