[英]Set DNS with PowerShell
What I am trying to accomplish: I am trying to set the DNS address on my machine using powershell. 我想要完成的任务:我正在尝试使用PowerShell在我的机器上设置DNS地址。
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 使用Invoke-WmiMethod设置DNS服务器
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. 我只想添加1个DNS地址。
Do I perhaps need to run as a different user or do something else special in order for this to work? 我是否可能需要以不同的用户身份运行或执行其他特殊操作才能使其正常工作?
using the netsh.exe
program to script changes to the network interfaces is a great way to automate configuring them. 使用
netsh.exe
程序编写对网络接口的更改脚本是自动配置它们的好方法。 Changing DNS is simple: 更改DNS很简单:
# 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. "Local Area Connection"
更改为您正在使用的连接的名称。 Though this is generally the default - it may just work in your case. $DC = read-host "Please enter a primary DNS"
$Internet = read-host "Please enter secondary DNS"
$dns = "$DC", "$Internet"
For powershell 4: 对于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. 对于Powershell 1,2和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. 我从昨天写的一个脚本中摘取了这些脚本,这个脚本需要为自从DC失败后的奇数200台计算机设置DNS范围。
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.
脚本的要点是在域中运行,并在域中设置每台计算机的DNS。
This script should not show any errors, if it does something went wrong. 如果出现问题,此脚本不应显示任何错误。 Unlike previous script for ps4, it would always output several errors.
与以前的ps4脚本不同,它总是会输出几个错误。
$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."
This answer requires Powershell 4. 这个答案需要Powershell 4。
Get-DNSClientServerAddress
. Get-DNSClientServerAddress
。 In the output, look for the Interface Index of the adapter you want to change. Set-DNSClientServerAddress –interfaceIndex ? –ServerAddresses ("8.8.8.8")
Set-DNSClientServerAddress –interfaceIndex ? –ServerAddresses ("8.8.8.8")
Set-DNSClientServerAddress –interfaceIndex ? –ServerAddresses ("8.8.8.8")
where ?
Set-DNSClientServerAddress –interfaceIndex ? –ServerAddresses ("8.8.8.8")
在哪里?
is the Interface Index of the interface you want to change DNS server address for (8.8.8.8 is Google's DNS - always a good standby, but change this to the address of whatever DNS server you want). Set-DnsClientServerAddress -InterfaceIndex ? -ResetServerAddresses
Set-DnsClientServerAddress -InterfaceIndex ? -ResetServerAddresses
Set-DnsClientServerAddress -InterfaceIndex ? -ResetServerAddresses
(Thanks to this blog for this tip), again substituting the Interface Index you looked up in step 1 for ?
Set-DnsClientServerAddress -InterfaceIndex ? -ResetServerAddresses
(感谢此博客提供此技巧),再次替换您在步骤1中查找的接口索引?
. 管理网络接口通常需要管理权限,因此您必须在elethled PowerShell控制台中运行脚本。
$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.
将它用于许多数据中心以在虚拟机上配置DNS。
This is what I use.. PS 5.1 这是我用的.. PS 5.1
$ipaddress = <ip>
$Gateway = <gateway IP>
$netadapter = <InterfaceAlias>
$primary = <First DNS record or comma seperated IP's>
$NetScript = @"
Get-Netadapter -Name $netadapter | New-NetIPAddress -AddressFamily IPv4 -IPAddress $IP -PrefixLength 23 -Type Unicast -DefaultGateway $Gateway
Set-DnsClientServerAddress -InterfaceAlias 'Ethernet0' -ServerAddresses $primary
Disable-NetAdapterBinding -Name "Ethernet0" -ComponentID ms_tcpip6
Disable-NetAdapterBinding -Name "Ethernet0" -DisplayName "QoS Packet Scheduler"
"@
$NetScript = $NetScript.Replace('#netadapter#', $netadapter).Replace('#Ipaddress#', $IP).Replace('#Gateway#', $Gateway)
#Where Ethernet0 = InterfaceAlias
Use this alot in Vmware and HyperV deployments. 在Vmware和HyperV部署中使用这个很多。
If you have one network adapter you can use Get-NetAdapter | Set-DnsClientServerAddress -ServerAddresses 8.8.8.8,8.8.4.4
如果您有一个网络适配器,则可以使用
Get-NetAdapter | Set-DnsClientServerAddress -ServerAddresses 8.8.8.8,8.8.4.4
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
Get-NetAdapter -Name "vEthernet (DockerNAT)" | Set-DnsClientServerAddress -ServerAddresses 8.8.8.8,8.8.4.4
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.