http://rracko.sk

Monitorovanie internetu cez powershell

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:
    • Otvorte Priečinok Startup: Stlačte Win + R, napíšte shell:startup a stlačte Enter.
    • Presuňte vytvorenú skratku do tohto priečinka.

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.


Všetko