#%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. 【 D3.js 高级系列 — 8.0 】 标线

    有时候,需要在地图上绘制连线,表示"从某处到某处"的意思,这种时候在地图上绘制的连线,称为"标线". 1. 标线是什么 标线,是指地图上需要两个坐标以上才能表示 ...

  2. LeetCode: 3SumClosest

    Title : Given an array S of n integers, find three integers in S such that the sum is closest to a g ...

  3. FFmpeg介绍及参数详细说明

    FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/视频编解码库l ...

  4. 【转 iOS 8 Auto Layout界面自动布局系列2-使用Xcode的Interface Builder添加布局约束

    原文网址:http://blog.csdn.net/pucker/article/details/41843511 上一篇文章<iOS 8界面自动布局系列-1>简要介绍了iOS界面布局方式 ...

  5. (原创)LAMP教程1-下载虚拟机软件

    (原创)LAMP教程1 从今天开始会在我的博客更新LAMP教程,第一章节就是安装虚拟机,因为不可能所有的人都有机会操作服务器,所以今天我打算教大家用虚拟机安装配置当下比较流行的框架,lamp. 好了费 ...

  6. iOS已发布应用中对异常信息捕获和处理

    iOS已发布应用中对异常信息捕获和处理 iOS开发中我们会遇到程序抛出异常退出的情况,如果是在调试的过程中,异常的信息是一目了然,但是如果是在已经发布的程序中,获取异常的信息有时候是比较困难的. iO ...

  7. 在eclipse.ini中指定jdk的方式

    在eclisep的安装目录,打开eclipse.ini文件,加上这么一行,如下红色所示,注意加在-Vmargs前面,这两种方式的区别是:第二种方式除了会有eclipse进程外还会启动个java进程. ...

  8. ASP.NET MVC中使用ASP.NET AJAX异步访问WebService

    使用过ASP.NET AJAX的朋友都知道,怎么通过ASP.NET AJAX在客户端访问WebService,其实在ASP.NET MVC中使用ASP.NET AJAX异步访问WebService 也 ...

  9. 线性方法用于Binary clssification

    到现在,我们已经学过三种线性方法:linear classification.Linear Regression.logistic Regression.这三种方法的核心都是,不同点在于:最小化的er ...

  10. Tkinter教程之Event篇(2)

    本文转载自:http://blog.csdn.net/jcodeer/article/details/1823548 '''Tkinter教程之Event篇(2)''''''5.测试离开(Leave) ...