What I am trying to accomplish: I am trying to set the DNS address on my machine using powershell.
Here is my code:
$dnsserver = (,"192.168.0.5")
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE | Invoke-WmiMethod -Name SetDNSServerSearchOrder -ArgumentList (,$dnsserver)
I am using this as reference:
Using Invoke-WmiMethod to set the DNS servers
The problem: When I run the script, nothing changes. If I run the script and restart the machine, nothing happens. I am running the script on my local machine not remotely.
I am only wanting to add 1 DNS address.
Do I perhaps need to run as a different user or do something else special in order for this to work?
$vmDNS1 = "192.0.2.1"
$vmDNS2 = "192.0.2.2"
$dns = "$vmDNS1", "$vmDNS2"
$Interface = Get-WmiObject Win32_NetworkAdapterConfiguration
Write-Host "$(Get-Date -format T):Registering DNS $dns for $server" -ForegroundColor Green
$Interface.SetDNSServerSearchOrder($dns)
Using this from years. Used it against many datacenters to configure DNS on virtual machines.
using the netsh.exe
program to script changes to the network interfaces is a great way to automate configuring them. Changing DNS is simple:
# turn on DHCP assigned DNS servers
netsh int ip set address "Local Area Connection" dhcp
# set a static DNS entry
netsh int ip set dns "Local Area Connection" static 192.168.1.1
A few notes:
"Local Area Connection"
to the name of the connection you are working with. Though this is generally the default - it may just work in your case. The DNS server address would also need to be specific to your scenario.$DC = read-host "Please enter a primary DNS"
$Internet = read-host "Please enter secondary DNS"
$dns = "$DC", "$Internet"
For powershell 4:
#I know this one is sloppy, but will get the work done.
Set-DnsClientServerAddress -InterfaceIndex 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 17, 18, 19, 20 -ServerAddresses ($DNS)
#I know this one is sloppy, but will get the work done.
For Powershell 1,2 and 3.
$Interface = Get-WmiObject Win32_NetworkAdapterConfiguration
Write-Host "$(Get-Date -format T):Registering DNS $dns for $server" -ForegroundColor Green
$Interface.SetDNSServerSearchOrder($dns)
I plucked these off a script I wrote actually yesterday for a client that needed to set the DNS range for some-odd 200 Computers since the DC was failing.
If you are interested I can give you the whole script. Point of the script is to run in a domain, and set every computer' DNS in the domain.
This script should not show any errors, if it does something went wrong. Unlike previous script for ps4, it would always output several errors.
$ErrorActionPreference = "Continue"
#Set all DNS addresses needed.
write-verbose -Verbose "Set all DNS addresses needed."
$DC = "192.168.103.30"
$Internet = "8.8.8.8" #Google
$WorkRouter = "192.168.12.254"
$HomeRouter = "10.0.0.1"
$Possible = "192.168.1.1"
$Possible2 = "192.168.0.1"
#Combine addresses
write-verbose -Verbose "Combining DNS addresses."
$dns = "$DC", "$Internet", "$WorkRouter", "$HomeRouter", "$Possible", "$Possible2"
#Set network adapter ranges
write-verbose -Verbose "Setting network adapter ranges."
#Get Network adapters
write-Verbose -Verbose "Now checking available network adapters."
$Net = Get-NetAdapter | select ifIndex | ft -a | Out-File -FilePath C:/Netadapter.txt
$Net = "C:/Netadapter.txt"
#Setting ranges to work with
$Ranges = (Get-Content $Net) -creplace "ifIndex", "" -creplace "-", "" | foreach {$_.Trim()} | Where { $_ } | Sort #| out-file C:/Netadapter.txt
#Execute DNS change
write-Warning -Verbose "Now executing DNS change to all available network adapters."
foreach ($range in $ranges) {
Set-DnsClientServerAddress -InterfaceIndex $range -ServerAddresses ($DNS)
}
write-verbose -Verbose "DNS Settings have been altered."
If you have one network adapter you can use Get-NetAdapter | Set-DnsClientServerAddress -ServerAddresses 8.8.8.8,8.8.4.4
If you have many adapters you need to add name, for checking names run Get-NetAdapter
Get-NetAdapter -Name "vEthernet (DockerNAT)" | Set-DnsClientServerAddress -ServerAddresses 8.8.8.8,8.8.4.4
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With