#%windir%\system32\WindowsPowerShell\v1.0\powershell.exe D:\PSScript\ERP_Production_Script\ERPRF_UpdateCheck.ps1
############脚本功能说明-2014-10-21############
#该脚本用来判断当前的DNS服务器是否可用,如果第一个DNS服务器可用,则脚本结束,否则将继续判断其他DNS服务器是否可用,最终将可用DNS服务器设置为第一个
###############################################

#####脚本开始######
#定义用于判断的域名
$dname = "www.baidu.com"
#$dname = "chkdns.idc4"

#根据是否配置网关查找使用中网卡
$index = (gwmi Win32_NetworkAdapterConfiguration |?{ $_.DefaultIPGateway -ne $null}).Index
$dnss = (gwmi Win32_NetworkAdapterConfiguration -filter "index = $index").DNSServerSearchOrder
$ConnectionID = (gwmi win32_networkadapter -filter "index = $index").NetConnectionID
#初始化用于存储DNS服务器列表的临时对象
$dnslists_new = $null
$dnslists_new = @()

#如果第一个DNS服务器可用,则脚本中断执行
$nsresult = nslookup.exe $dname $dnss[0]
If (!([string]::concat($nsresult)).contains("request timed out"))
{break}
Else {
#记录第一个不可用DNS服务器IP到临时对象
$dnslist=""|select IP,Status
$dnslist.IP = $dnss[0]
$dnslist.Status = "Error"
$dnslists_new +=$dnslist
#判断剩余的DNS服务器IP是否可用,并将其记录到临时对象
foreach ($dns in $dnss[1..$dnss.count])
{
If ($dns -ne $null)
{
$nsresult = nslookup.exe $dname $dns
#[string]::concat($nsresult)
If (!([string]::concat($nsresult)).contains("request timed out"))
{
$dnslist=""|select IP,Status
$dnslist.IP = $dns
$dnslist.Status = "OK"
$dnslists_new +=$dnslist
}
Else {
$dnslist=""|select IP,Status
$dnslist.IP = $dns
$dnslist.Status = "Error"
$dnslists_new +=$dnslist
}
}
}
#$dnslists_new
#判断当前系统是2003(5),还是2008,在设置DNS服务器的时候所使用的命令不同
If ((gwmi win32_operatingsystem).version.split(".")[0] -eq 5)
{
#查找可用的DNS服务器列表
[array]$dnslists_ok = $dnslists_new |? {$_.Status -eq "OK"}
If ($dnslists_ok -ne $null)
{
$dnsserver0 = $dnslists_ok[0].IP
netsh.exe interface ip set dns "$ConnectionID" static $dnsserver0 primary
$dnslists_ok[1..$dnslists_ok.count] | % { netsh.exe interface ip add dns "$ConnectionID" $_.IP }
}
#查找不可用的DNS服务器列表
$dnslists_new |? {$_.Status -ne "OK"} | % { netsh.exe interface ip add dns "$ConnectionID" $_.IP }
}
Else
{
#查找可用的DNS服务器列表
[array]$dnslists_ok = $dnslists_new |? {$_.Status -eq "OK"}
If ($dnslists_ok -ne $null)
{
$dnsserver0 = $dnslists_ok[0].IP
netsh.exe interface ip set dnsservers "$ConnectionID" static $dnsserver0 primary validate=no
$dnslists_ok[1..$dnslists_ok.count] | % { netsh.exe interface ip add dnsservers "$ConnectionID" $_.IP validate=no }
}
#查找不可用的DNS服务器列表
$dnslists_new |? {$_.Status -ne "OK"} | % { netsh.exe interface ip add dnsservers "$ConnectionID" $_.IP validate=no }
}

}

#查看当前的DNS服务器列表
#$dnss=gwmi win32_networkadapter -filter "NetConnectionStatus = 2"|foreach {(gwmi Win32_NetworkAdapterConfiguration -filter "index = $($_.index)").DNSServerSearchOrder}
#$dnss

检查dns服务器是否可用的更多相关文章

  1. SQL Server ->> 高可用与灾难恢复(HADR)技术 -- AlwaysOn(实战篇)之建立活动目录域、DNS服务器和Windows故障转移群集(准备工作)

    因为篇幅原因,AlwaysOn可用性组被拆成了两部分:理论部分和实战部分.而实战部分又被拆成了准备工作和AlwaysOn可用性组搭建. 三篇文章各自的链接: SQL Server ->> ...

  2. IP地址,子网掩码,默认网关,DNS服务器知识详解(转)

    转自:http://www.cnblogs.com/JuneWang/p/3917697.html 为了更深入的学习TCP/IP协议,最近看了不少有关资料,收集整理记录如下,以备后面的使用和方便各位学 ...

  3. IP地址,子网掩码,默认网关,DNS服务器详解

    为了更深入的学习TCP/IP协议,最近看了不少有关资料,收集整理记录如下,以备后面的使用和方便各位学习: IP地址,子网掩码,默认网关,DNS服务器是什么意思? (一)  问题解析 001.   问: ...

  4. 计算机网络: IP地址,子网掩码,默认网关,DNS服务器详解

    楔子: 以Windows系统中IP地址设置界面为参考(如图1), IP地址, 子网掩码, 默认网关 和 DNS服务器, 这些都是什么意思呢? 学习IP地址的相关知识时还会遇到网络地址,广播地址,子网等 ...

  5. Linux系统下搭建DNS服务器——DNS原理总结

    2017-01-07 整理 DNS原理 域名到IP地址的解析过程 IP地址到域名的反向域名解析过程 抓包分析DNS报文和具体解析过程 DNS服务器搭建和配置 这个东东也是今年博主参见校招的时候被很多公 ...

  6. linux系统中的DNS服务器介绍

    http://lq2419.blog.51cto.com/1365130/1172269 DNS:Domain Name Service,linux上的DNS服务是基于一种软件BIND实现的.BIND ...

  7. 计算机网络: IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解

    楔子: 以Windows系统中IP地址设置界面为参考(如图1), IP地址, 子网掩码, 默认网关 和 DNS服务器, 这些都是什么意思呢? 学习IP地址的相关知识时还会遇到网络地址,广播地址,子网等 ...

  8. Debian9.5系统DNS服务器BIND软件配置说明

    DNS的出现的历史 网络出现的早期是使用IP地址通讯的,那时就几台主机通讯.但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linux和W ...

  9. CentOS7-1810 系统DNS服务器BIND软件配置说明

    DNS的出现的历史 网络出现的早期是使用IP地址通讯的,那时就几台主机通讯.但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linux和W ...

随机推荐

  1. Java [Leetcode 225]Implement Stack using Queues

    题目描述: Implement the following operations of a stack using queues. push(x) -- Push element x onto sta ...

  2. 专题:Windows编译x264、SDL、faac、ffmpeg过程

    Windows上编译ffmpeg完整过程,包括编译x264.SDL.faac.在Windows上编译ffmpeg需要用MinGW+msys,本专题用于记录编译过程中遇到的各种问题及解决方法,转载请注明 ...

  3. HDU 5489 Removed Interval

    题意:求一段序列中删掉L个连续元素后的LIS. 解法:我的想法很复杂= =怎么说呢……首先用nlogn的方法求LIS得到的序列dp的第i项的意义为上升子序列所有长度为i的序列结尾元素的最小值,那么先倒 ...

  4. TortoiseHg简单的入门使用说明

    参考资料: 互普的 TortoiseHg使用说明_百度文库 Mercurial(Hg)基本操作 - Tim Gong - 博客园 Mercurial与TortoiseHg使用入门教程(转) - mee ...

  5. bzoj 1576 [Usaco2009 Jan]安全路经Travel(树链剖分,线段树)

    [题意] 给定一个无向图,找到1-i所有的次短路经,要求与最短路径的最后一条边不重叠. [思路] 首先用dijkstra算法构造以1为根的最短路树. 将一条无向边看作两条有向边,考察一条不在最短路树上 ...

  6. Linux中MySQL5.5解压版普通用户安装

    #查看本机mysql 安装路径 [hadoop@SY-0134 toolkit]$ rpm -qa|grep -i mysql [hadoop@SY-0134 toolkit]$ whereis my ...

  7. Mahout应用(一)

    Mahout应用(一) Mahout 是应用于hadoop上的数据挖掘工具(废话不多说) 这里先简单介绍一下mahout的一般使用方法. 拿kmeans为列子 Mahout中的kmeans所需要的输入 ...

  8. java动态代理与老式AOP实现

    JAVA的动态代理 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会 ...

  9. PhoneGap搭建运行环境(3.2版本)

    一. 1.准备环境nodejs(http://nodejs.org/download/) 2.ant(http://ant.apache.org/bindownload.cgi) 3.Android ...

  10. 单节点伪分布集群(weekend110)的Hive子项目启动顺序

    因为,我的mysql是用root用户,在/home/hadoop/app/目录下,创建的. 第一步:开启mysql服务 第二步:启动hive [hadoop@weekend110 app]$ su r ...