PowerShell设置机器的DNS地址 5


前一段时间访问某网站被畜生给屏蔽了,于是我搜索出了一个国外的DNS地址,企图通过国外的DNS请求来获取一个该网站的其它IP,心存侥幸,不曾想竟然成功了。其原理是此DNS服务器不是智能解析,或着网站所有者没有启用智能解析,以至于来自中国的请求,它返回给了我一个欧洲的IP地址。

但是这样的DNS服务器,毕竟在国外,解析速度本来就不理想,甚至有时访问国内的网站,它解析成了国外的镜像地址:比如我今天访问PowerShell中文博客(www.pstips.net)时,明显感觉速度不是很理想,ping了一下,发现ping值在300-400之间,于是再查了一下这个IP地址:162.159.208.42,它是美国加利福尼亚的IP地址,恍然大悟,是由于上次更改DNS服务器引发的后遗症。

那就改回来呗,个人比较喜欢阿里的公共DNS,顺便秀一下,如何用PowerShell一键配置阿里云的DNS:

Get-DnsClientServerAddress -AddressFamily IPv4 | 
Out-GridView -PassThru | 
foreach { 
 Set-DnsClientServerAddress -InterfaceIndex $_.InterfaceIndex -Addresses '223.5.5.5','223.6.6.6' 
}
ipconfig /flushdns

使用上面的脚本,需要PowerShell 4.0支持,中途会弹出一个GridView,选择你要设置的网卡,记得支持多选奥,然后确定即可。

注意:要使用管理员权限运行才能设置成功,否则抛出异常:
Set-DnsClientServerAddress : 无法从客户端中访问 CIM 资源。

这异常未免太豪放了!

本文链接: https://www.pstips.net/set-dns-address.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

回复 不正常人类研究中心 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

5 条评论 “PowerShell设置机器的DNS地址

  • 九叔

    $wmi=get-wmiobject -class win32_networkadapterconfiguration -filter ipenabled=true -computername .
    # 设置IP地址和子网掩码
    $wmi.EnableStatic(‘192.168.0.100′,’255.255.255.0’)
    # 设置网关
    $wmi.SetGateways(‘192.168.56.254’)
    # 设置DNS
    $wmi.SetDNSServerSearchOrder(‘192.168.70.1’)

    这个方法也可以设置dns地址,不过缺点是貌似只能设置一个,我用get-member查了一下,貌似也只有一个。

    • Mooser Lee 文章作者

      感谢九叔的分享!我相信Set-DnsClientServerAddress 底层调用的也是WMI。

      PS> $wmi.SetDNSServerSearchOrder
      
      OverloadDefinitions
      -------------------
      System.Management.ManagementBaseObject SetDNSServerSearchOrder(System.String[] DNSServerSearchOrder)
      

      从定义来看,是支持设置多个DNS地址的!

      • Seele

        根据google到的信息,需要添加一个数组,通过引用的方式设置一个以上的DNS

        $wmi=get-wmiobject -class win32_networkadapterconfiguration -filter ipenabled=true -computername .
        $dnsSearchOrder =”8.8.8.8″,”114.114.114.114″
        $wmi.SetDNSServerSearchOrder($dnsSearchOrder)

        以上命令已测试,可以正常生效。不过如果想要全部设置成DHCP的是什么函数呢。

  • shareman

    这个脚本在windows 8之前的平台应该是无法有效运行的,因为即使更新到PS 4
    WIN8之前依然不支持 Get-DnsClientServerAddress等等若干网络地址相关的CMDLET
    结果还是得去调用netsh来搞定,蛋疼