nih*_*ser 4 windows dns powershell windows-7
我想要完成的任务:我正在尝试使用PowerShell在我的机器上设置DNS地址.
这是我的代码:
$dnsserver = (,"192.168.0.5")
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE | Invoke-WmiMethod -Name SetDNSServerSearchOrder -ArgumentList (,$dnsserver)
Run Code Online (Sandbox Code Playgroud)
我用这个作为参考:
问题:当我运行脚本时,没有任何变化.如果我运行脚本并重新启动计算机,则没有任何反应.我在本地计算机上运行脚本不是远程的.
我只想添加1个DNS地址.
我是否可能需要以不同的用户身份运行或执行其他特殊操作才能使其正常工作?
使用该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
Run Code Online (Sandbox Code Playgroud)
几点说明:
"Local Area Connection"为您正在使用的连接的名称.虽然这通常是默认设置 - 它可能只适用于您的情况.DNS服务器地址也需要特定于您的方案.小智 6
如果您有一个网络适配器,您可以使用 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
$DC = read-host "Please enter a primary DNS"
$Internet = read-host "Please enter secondary DNS"
$dns = "$DC", "$Internet"
Run Code Online (Sandbox Code Playgroud)
对于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.
Run Code Online (Sandbox Code Playgroud)
对于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)
Run Code Online (Sandbox Code Playgroud)
我从昨天写的一个脚本中摘取了这些脚本,这个脚本需要为自从DC失败后的奇数200台计算机设置DNS范围.
如果你有兴趣,我可以给你整个脚本.脚本的要点是在域中运行,并在域中设置每台计算机的DNS.
如果出现问题,此脚本不应显示任何错误.与以前的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."
Run Code Online (Sandbox Code Playgroud)
该答案需要Powershell 4。
Get-DNSClientServerAddress。在输出中,查找要更改的适配器的接口索引。您将在第2步中需要它。Set-DNSClientServerAddress –interfaceIndex ? –ServerAddresses ("8.8.8.8")在哪里?(8.8.8.8是Google的DNS-始终是一个良好的备用数据库,但请将其更改为所需的任何DNS服务器的地址)。Set-DnsClientServerAddress -InterfaceIndex ? -ResetServerAddresses(感谢这个博客的提示),再次取代你在步骤1中查找接口索引?。