forked from fleschutz/PowerShell
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlist-dns-servers.ps1
executable file
·43 lines (37 loc) · 1.47 KB
/
list-dns-servers.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<#
.SYNOPSIS
Lists DNS servers
.DESCRIPTION
This PowerShell script measures the latency of public and free DNS servers and lists it.
.EXAMPLE
PS> ./list-dns-servers.ps1
Provider IPv4 Latency
-------- ---- -------
AdGuard DNS (Cyprus) 94.140.14.14 / 94.140.15.15 222 / 205 ms
...
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
function CheckDNSServer { param($Provider, $IPv4Pri, $IPv4Sec)
Write-Progress "Measuring latency of $Provider..."
$SW=[system.diagnostics.stopwatch]::startNew();$null=(nslookup fleschutz.de $IPv4Pri 2>$null);[int]$Lat1=$SW.Elapsed.TotalMilliseconds
$SW=[system.diagnostics.stopwatch]::startNew();$null=(nslookup fleschutz.de $IPv4Sec 2>$null);[int]$Lat2=$SW.Elapsed.TotalMilliseconds
New-Object PSObject -Property @{ Provider=$Provider; IPv4="$IPv4Pri / $IPv4Sec"; Latency="$Lat1 / $Lat2 ms" }
}
function List-DNS-Servers {
Write-Progress "Loading Data/public-dns-servers.csv..."
$Table = Import-CSV "$PSScriptRoot/../Data/public-dns-servers.csv"
foreach($Row in $Table) {
CheckDNSServer $Row.PROVIDER $Row.IPv4_PRI $Row.IPv4_SEC
}
Write-Progress -completed "."
}
try {
List-DNS-Servers | Format-Table -property @{e='Provider';width=50},@{e='IPv4';width=32},@{e='Latency';width=15}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}