-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPinger.ps1
More file actions
95 lines (87 loc) · 4.36 KB
/
Pinger.ps1
File metadata and controls
95 lines (87 loc) · 4.36 KB
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<#
.SYNOPSIS
Pings a comma separated list of addresses for a certain time with a specified interval.
.DESCRIPTION
Pings a comma separated list of addresses for a specified time with a specified interval frequency.
The times are specified through the parameters -Delay and -Seconds. They are expressed in seconds.
If the parameter -Seconds is omitted or set to zero the script runs continuously.
.PARAMETER IpList
A comma separated list of hosts or IPs
Optionally you can add a description using this format IP:Description. Example: 10.0.0.1:server1,10.0.0.3:serverTwo,.. etc.
.PARAMETER Delay
The interval between Pings. It is expressed in seconds and, if is not specified, it defaults to 160 seconds.
.PARAMETER Seconds
It determines for how long the program runs. It is expressed in seconds and if it is not specified, or set to zero, the program never terminates.
.EXAMPLE
Pinger 10.0.0.1,10.0.0.2:ServerHTTP,10.0.0.10:MyPEDHSM -Delay 30 -Seconds 300
.NOTES
Author: Marco S. Zuppone - msz@msz.eu - https://msz.eu
Version: 1.3
License: AGPL 3.0 - Please abide to the Affero AGPL 3.0 license rules! It's free but give credits to the author :-)
For donations: https://buymeacoffee.com/readitalians
#>
param (
[Parameter(Mandatory)]
$AddrIPandDescs,
[int]$Delay = 160,
[int]$Seconds = 0
)
Write-Host $Delay
$StartTime = Get-Date
Do {
Get-Date
$Exit = $False
$Results = @()
foreach ($AddrIPandDesc in $AddrIPandDescs) {
$AddDescArray=$AddrIPandDesc.split(':')
$Address = $AddDescArray[0]
$Pingo = Get-WmiObject Win32_PingStatus -f "Address='$Address'"
switch ($Pingo.StatusCode) {
0 { $ResultMessage = "Success"; break }
11001 { $ResultMessage = "Buffer Too Small"; break }
11002 { $ResultMessage = "Destination Net Unreachable"; break }
11003 { $ResultMessage = "Destination Host Unreachable" ; break }
11004 { $ResultMessage = "Destination Protocol Unreachable"; break }
11005 { $ResultMessage = "Destination Port Unreachable" ; break }
11006 { $ResultMessage = "No Resources" ; break }
11007 { $ResultMessage = "Bad Option" ; break }
11008 { $ResultMessage = "Hardware Error" ; break }
11009 { $ResultMessage = "Packet Too Big" ; break }
11010 { $ResultMessage = "Request Timed Out" ; break }
11011 { $ResultMessage = "Bad Request" ; break }
11012 { $ResultMessage = "Bad Route" ; break }
11013 { $ResultMessage = "TimeToLive Expired Transit" ; break }
11014 { $ResultMessage = "TimeToLive Expired Reassembly" ; break }
11015 { $ResultMessage = "Parameter Problem" ; break }
11016 { $ResultMessage = "Source Quench" ; break }
11017 { $ResultMessage = "Option Too Big" ; break }
11018 { $ResultMessage = "Bad Destination" ; break }
11032 { $ResultMessage = "Negotiating IPSEC" ; break }
11050 { $ResultMessage = "General Failure" ; break }
Default { $ResultMessage = "Unknown Error" }
}
$Results += @([pscustomobject]@{
Address = $Pingo.Address;
Description = if($AddDescArray.Length -gt 1){$AddDescArray[1]} else {""};
ResponseTime = $Pingo.ResponseTime;
StatusCode = $Pingo.StatusCode;
Message = $ResultMessage;
TimeStamp = Get-Date
})
}
$Results | Format-Table Address, Description,
@{L = "Response Time"; E = { $_.ResponseTime } },
@{L = "Status Code"; E = { $_.StatusCode } },
Message,
@{L = "Timestamp"; E = { $_.TimeStamp } } -AutoSize
Write-Host "Waiting for $Delay seconds..."
Write-Host "Next Ping cycle will start at "(Get-Date).AddSeconds($Delay)
Start-Sleep -seconds $Delay
if ($Seconds -ne 0) {
$timeNow = Get-Date
If ( $timeNow -ge $StartTime.AddSeconds($Seconds)) {
$Exit = $True
}
}
}
until ($Exit)