使用PowerShell设置DNS

时间:2013-09-10 16:20:22

标签: windows powershell windows-7 dns

我想要完成的任务:我正在尝试使用PowerShell在我的计算机上设置DNS地址。

这是我的代码:

$dnsserver = (,"192.168.0.5")
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE | Invoke-WmiMethod -Name SetDNSServerSearchOrder -ArgumentList (,$dnsserver)

我将此作为参考:

Using Invoke-WmiMethod to set the DNS servers

问题:当我运行脚本时,没有任何变化。如果我运行脚本并重新启动计算机,则没有任何反应。我在本地计算机上运行脚本不是远程的。

我只想添加1个DNS地址。

我是否可能需要以不同的用户身份运行或执行其他特殊操作以使其正常工作?

7 个答案:

答案 0 :(得分:6)

使用netsh.exe程序编写对网络接口的更改脚本是自动配置它们的好方法。更改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

一些注意事项:

  • 您需要将"Local Area Connection"更改为您正在使用的连接的名称。虽然这通常是默认设置 - 它可能只适用于您的情况。 DNS服务器地址也需要特定于您的方案。
  • 更改IP信息通常需要提升权限,因此请确保您使用提升的权限运行PowerShell - 默认情况下Windows Vista以及稍后启动PowerShell而不提升它。您需要右键单击它并选择“以管理员身份运行”。

答案 1 :(得分:5)

$DC = read-host "Please enter a primary DNS"
$Internet = read-host "Please enter secondary DNS"
$dns = "$DC", "$Internet"

对于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.

对于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)

我从昨天写的一个脚本中摘取了这些脚本,这个脚本需要为自从DC失败后的奇数200台计算机设置DNS范围。

如果您有兴趣,我可以给您整个脚本。 脚本的要点是在域中运行,并将每台计算机的DNS设置为域。

编辑,制作执行部件的更好版本(PS4 +)

如果出现问题,此脚本不应显示任何错误。与以前的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."

答案 2 :(得分:3)

管理网络接口通常需要管理权限,因此您必须在高架的PowerShell控制台中运行脚本。

答案 3 :(得分:3)

这个答案需要Powershell 4。

  1. 运行Get-DNSClientServerAddress。在输出中,查找要更改的适配器的接口索引。您将在第2步中使用此功能。
  2. 在提升的提示中,运行Set-DNSClientServerAddress –interfaceIndex ? –ServerAddresses ("8.8.8.8"),其中?是您要更改DNS服务器地址的接口的接口索引(8.8.8.8是Google的DNS - 始终是一个良好的待机状态,但将其更改为您想要的任何DNS服务器的地址。
  3. 如果您想将界面更改回“自动获取DNS服务器地址”,在提示提示中,请运行Set-DnsClientServerAddress -InterfaceIndex ? -ResetServerAddresses(感谢this blog获取此提示) ,再次将您在步骤1中查找的接口索引替换为?

答案 4 :(得分:2)

$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)

多年来使用这个。将它用于许多数据中心以在虚拟机上配置DNS。

答案 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

在Vmware和HyperV部署中大量使用此功能。

答案 6 :(得分:0)

如果您有一个网络适配器,则可以使用Get-NetAdapter | Set-DnsClientServerAddress -ServerAddresses 8.8.8.8,8.8.4.4

如果您有许多适配器,则需要添加名称,请运行Get-NetAdapter

以检查名称。

Get-NetAdapter -Name "vEthernet (DockerNAT)" | Set-DnsClientServerAddress -ServerAddresses 8.8.8.8,8.8.4.4