Návod ako pomocou powershell scriptu monitorovať internet. Script zaznamenáva čas výpadku OFFLINE a čas nabehnutia ONLINE. Upozorňuje užívateľa o momentálnom výpadku a taktiež všetky výpadky zaznamenáva s dátumom a časom do LOG súboru, ktorý je prístupný z disku.
Cez rozhranie powershell, vytvorím script ktorý je súčasťou Windows od verzie Windows7. Budem monitorovať server google.com /dá sa monitorovať hocijaká webstránka/ a nastavím trigger na hodnotu timeout 10, čo znamená, že script bude každých 10 sekúnd kontrolovať spojenie.
Tu je zdrojový kód pre script, alebo súbor k stiahnutiu
Stiahni > Script súbor v ZIP
# Načítanie zdrojov pre windows forms
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
# Cesta na disku, kde sa bude ukladať LOG súbor /ľubovolna cesta a meno súboru/
$logFile = "C:\LOG\internet_connection_log.txt"
# Funkcia pre kontrolu internetu s nastavením hodnoty v sekundách
function Test-InternetConnection {
try {
# Attempt to reach a reliable website
$webRequest = Invoke-WebRequest -Uri "https://www.google.com" -UseBasicParsing -TimeoutSec 10
return $true
} catch {
return $false
}
}
# Funkcia pre oznamovacie okno vpravo na liste baloon vyskakovacie okno
function Show-Notification {
param (
[string]$message,
[string]$title = "Internet Connection Status"
)
$notifyIcon = New-Object System.Windows.Forms.NotifyIcon
$notifyIcon.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Warning
$notifyIcon.BalloonTipText = $message
$notifyIcon.BalloonTipTitle = $title
$notifyIcon.Icon = [System.Drawing.SystemIcons]::Information
$notifyIcon.Visible = $true
$notifyIcon.ShowBalloonTip(5000)
# Vyskakovacie okno zmizne po 6 sekundách
Start-Sleep -Seconds 6
$notifyIcon.Dispose()
}
# Premenná stavu pripojenia
$wasOffline = $false
$offlineStartTime = $null
# Nekonečná slučka na nepretržitú kontrolu internetového pripojenia
while ($true) {
$isConnected = Test-InternetConnection
if (-not $isConnected -and -not $wasOffline) {
# If connection just went offline
$offlineStartTime = Get-Date
$message = "$offlineStartTime - Internet connection is offline."
Add-Content -Path $logFile -Value $message
Show-Notification -message "Internet connection is offline." -title "Connection Lost"
$wasOffline = $true
} elseif ($isConnected -and $wasOffline) {
# If connection just came back online
$onlineTime = Get-Date
$message = "$onlineTime - Internet connection is back online. It was offline from $offlineStartTime to $onlineTime."
Add-Content -Path $logFile -Value $message
Show-Notification -message "Internet connection is back online. It was offline from $offlineStartTime to $onlineTime." -title "Connection Restored"
$wasOffline = $false
}
# nastavenie hodnoty v sekundách 20 sec.
# Informacia s datumom a casom a zapis v PS okne
$now = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Write-Host "Monitoring internet connection, please do not close this session : $now"
Start-Sleep -Seconds 20
}
Po vytvorení skriptu a nastavení všetkých hodnôt script vyskúšame
klikneme pravým tlačítkom a dame run with powershell. Ak je script správne nastavený, otvorí sa okno Windows Powershell s týmto. Tu už vidno, že script funguje správne a zaznamenáva dátum a čas poslednej kontroly spojenia.
Ja som si toto okno nastavil v "properties" na minimize, aby toto okno neotravovalo. Takže keď spustím script, okno sa minimalizuje na lištu
Teraz pre skúšku manuálne vypnem sieť aby script začal pracovať . V nastaveniach sietového adaptéra dám zakázať sieť.
V scripte je nastavený interval 20 sekúnd, takže pri vypnutom sieovom adaptéri sa po 20 sekundách ozve vyskakovacie okno, že internet je nedostupný a užívateľa o tom informuje zvolenou ľubovoľnou hláškou.V tomto okamihu sa všetky výpadky a obnovenie zapisujú do LOG súboru na disku. Je to dobré, že to uchováva do súboru, tieto údaje sa dajú analyzovať a vidím v súbore napríklad koľko mám výpadkov za daný mesiac. Súbor sa dá naimportovať do excelu a pracovať s ďaľšími nástrojmi ako sú grafy a vyjadrenie percentuálne atď, atď .... V scripte bol nastavené ukladanie do C:\LOG\internet_connection_log.txt.
V logu sa informácia zobrazí nasledovne:
08/15/2024 22:02:14 - Internet connection is offline (výpadok spojenia)
Upozornenie: Adresár C:\LOG treba vytvoriť manuálne !
Tu je ukážka LOG súboru s danými výpadkami a obnoveniami spojenie, čas vyjadruje dobu výpadkuPo opätovnom pripojení spojenia sa v logu objavi informácia:
08/15/2024 22:03:21 - Internet connection is back online. It was offline from 08/15/2024 22:02:14 to 08/15/2024 22:03:21
To znamená, že spojenie bolo obnovené a výpadok trval 67 sekúnd.
Zároveň s obnovením spojenia nabehne aj hláška vo vyskakovacom okne, že internet bol obnovený a trvanie výpadku od do
Skript funguje ako má a teraz ho treba zautomatizovať, aby sa sám spúšťal a bežal v pozadí. Existuje na to viac spôsobov, napríklad cez Task scheduler, alebo Registry Editor nastaviť, že po prihláseni do Windows sa spustí.
Ja som si zvolil metódu "Startup" a skript nakopíroval tam.
Postup:
1. Stlač okno Win + R
Otvorí sa okno a do neho napíš "Shell:startup" otvorí sa okno/adresár Startup, kde Windows automaticky spúšťa všetko čo je v ňom.
Vytvorte PowerShell skript (napr. C:\Scripts\internet.ps1).
2. Vytvorte skratku na tento skript:
- Kliknite pravým tlačidlom na skript, vyberte „Create shortcut“ (Vytvoriť skratku).
- Presuňte skratku do priečinka Startup:
ako cieľ napíšem "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -file "C:\Script\internet.ps1" (Súbor je umiestnený v tomto adresári)
Ako som spomínal, aby okno neotravovalo, v sekcii Spustiť nastavím na "minimalizované"
Teraz sa po každom príhlásení do Windows, resp. zapnutí PC automaticky spustí zo Startup tento súbor a monitoruje spojenie.
Okno sa otvára minimalizované, treba upozorniť, že po otvorení sa nemôže zavrieť, ale len MINIMALIZOVAŤ, aby kontrola prebiehala v pozadi.