-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathShow-ComputerPingChangev2.ps1
More file actions
133 lines (113 loc) · 5.12 KB
/
Show-ComputerPingChangev2.ps1
File metadata and controls
133 lines (113 loc) · 5.12 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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<#
.SYNOPSIS
This script loops through a computer status, and display reachability status change.
.PARAMETER Computer
The Computer to monitor reachability
.PARAMETER FileName
If specified, logs the ping change into a file
.INPUTS
None. You cannot pipe objects to that script.
.OUTPUTS
None for now
.EXAMPLE
.\Do-Something.ps1
This will launch the script and do someting
.EXAMPLE
.\Do-Something.ps1 -CheckVersion
This will dump the script name and current version like :
SCRIPT NAME : Do-Something.ps1
VERSION : v1.0
.NOTES
None
.LINK
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comment_based_help?view=powershell-6
.LINK
https://github.com/SammyKrosoft
#>
[CmdLetBinding(DefaultParameterSetName = "NormalRun")]
Param(
[Parameter(Mandatory = $False, Position = 0, ParameterSetName = "NormalRun")][string]$ComputerName = $($ENV:ComputerName),
[Parameter(Mandatory = $False, Position = 1, ParameterSetName = "NormalRun")][string]$FileName = $null,
[Parameter(Mandatory = $false, Position = 0, ParameterSetName = "CheckOnly")][switch]$CheckVersion
)
<# ------- SCRIPT_HEADER (Only Get-Help comments and Param() above this point) ------- #>
#Initializing a $Stopwatch variable to use to measure script execution
$stopwatch = [system.diagnostics.stopwatch]::StartNew()
#Using Write-Debug and playing with $DebugPreference -> "Continue" will output whatever you put on Write-Debug "Your text/values"
# and "SilentlyContinue" will output nothing on Write-Debug "Your text/values"
$DebugPreference = "Continue"
# Set Error Action to your needs
$ErrorActionPreference = "SilentlyContinue"
#Script Version
$ScriptVersion = "0.1"
<# Version changes
v0.1 : first script version
v0.1 -> v0.5 :
#>
$ScriptName = $MyInvocation.MyCommand.Name
If ($CheckVersion) {Write-Host "SCRIPT NAME : $ScriptName `nSCRIPT VERSION : $ScriptVersion";exit}
# Log or report file definition
# NOTE: use $PSScriptRoot in Powershell 3.0 and later or use $scriptPath = split-path -parent $MyInvocation.MyCommand.Definition in Powershell 2.0
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
$OutputReport = "$ScriptPath\$($ScriptName)_$(get-date -f yyyy-MM-dd-hh-mm-ss).csv"
# Other Option for Log or report file definition (use one of these)
$ScriptLog = "$ScriptPath\$($ScriptName)-$(Get-Date -Format 'dd-MMMM-yyyy-hh-mm-ss-tt').txt"
<# ---------------------------- /SCRIPT_HEADER ---------------------------- #>
<# -------------------------- DECLARATIONS -------------------------- #>
<# /DECLARATIONS #>
<# -------------------------- FUNCTIONS -------------------------- #>
Function IsComputerReachable {
[CmdLetBinding(DefaultParameterSetName = "NormalRun")]
Param(
[Parameter(Mandatory = $False, Position = 0, ParameterSetName = "NormalRun")][string]$ComputerName = $($ENV:ComputerName),
[Parameter(Mandatory = $false, Position = 1, ParameterSetName = "CheckOnly")][switch]$CheckVersion
)
If (Test-Connection $ComputerName -Count 1 -ErrorAction SilentlyContinue) {
Return $True
} Else {
Return $False
}
}
Function Show-ComputerStatusChange ($ComputerName,$SleepTime=2,$FileName=$null) {
$FirstStatus = IsComputerReachable $ComputerName
$CurrentTest = $FirstStatus
$CurrentTime = $((Get-Date).ToString())
Write-Host "Beginning..."
if ($FileName) {
$FileLine = "$CurrentTime#$ComputerName#is up#$CurrentTest"
Add-Content -Value $FileLine -Path $FileName -Force
}
Write-host "$ComputerName" -ForegroundColor Yellow -NoNewline
Write-Host " at " -NoNewLine
Write-Host "$CurrentTime" -foregroundcolor Cyan -NoNewline
Write-Host ", is reachable => " -NoNewLine
If ($CurrentTest -eq $True) {$StatusColor = "Green"} Else {$StatusColor = "Red"}
Write-Host "$CurrentTest" -ForegroundColor $StatusColor
While ($True) {
$LastTest = $CurrentTest
$LastTime = $CurrentTime
Sleep $SleepTime
$CurrentTest = IsComputerReachable $ComputerName
$CurrentTime = $((Get-Date).ToString())
# write-host ("Last Test and time") + $LastTime + $LastTest
# Write-Host ("Current Test and time") + $CurrentTime + $CurrentTest
If ($CurrentTest -ne $LastTest){
Write-Host "Status changed - Last status was = $LastTest, and it changed at $CurrentTime to => $CurrentTest" -BackgroundColor Yellow -ForegroundColor Blue
}
}
}
<# /FUNCTIONS #>
<# -------------------------- EXECUTIONS -------------------------- #>
cls
Show-ComputerStatusChange -ComputerName $ComputerName -FileName $OutputReport
<# /EXECUTIONS #>
<# -------------------------- CLEANUP VARIABLES -------------------------- #>
<# /CLEANUP VARIABLES#>
<# ---------------------------- SCRIPT_FOOTER ---------------------------- #>
#Stopping StopWatch and report total elapsed time (TotalSeconds, TotalMilliseconds, TotalMinutes, etc...
$stopwatch.Stop()
$msg = "`n`nThe script took $([math]::round($($StopWatch.Elapsed.TotalSeconds),2)) seconds to execute..."
Write-Host $msg
$msg = $null
$StopWatch = $null
<# ---------------- /SCRIPT_FOOTER (NOTHING BEYOND THIS POINT) ----------- #>