Johdanto: miksi pingata useita laitteita yhtä aikaa
Ping on yksi verkon vianmäärityksen perustyökaluista, jonka avulla testataan, onko toinen laite verkossa ja kuinka nopeasti se vastaa. Verkonvalvojat, IT-tukihenkilöt ja järjestelmänvalvojat joutuvat usein tarkistamaan kymmenien tai jopa satojen laitteiden tilan samanaikaisesti. Reitittimet, kytkimet, palvelimet, työasemat ja IoT-laitteet voivat kaikki olla samassa aliverkossa, ja niiden saatavuuden selvittäminen yksitellen veisi kohtuuttoman paljon aikaa. Siksi on kehitetty menetelmiä suorittaa ping usealle IP-osoitteelle yhtä aikaa joko komentoriviltä tai graafisten työkalujen avulla. Tässä artikkelissa käsitellään kaikki tehokkaat tavat tehdä tämä Windows-käyttöjärjestelmässä, niin perinteisellä erätiedostolla kuin modernilla PowerShellillä.
Ping-komennon peruskäyttö on yksinkertainen: kirjoitat komentoriville ping ja IP-osoitteen, ja järjestelmä lähettää neljä ICMP-pakettia kohteeseen. Ongelma alkaa siitä, kun kohteita on useita. Jokainen uusi komento vaatii oman syötteensä, ja tulosten vertailu käy työlääksi. Seuraavissa luvuissa esitellään ratkaisut Windowsin komentokehotteelle, PowerShellille ja erillisille työkaluille. Lisäksi annetaan konkreettiset komennot ja esimerkit, joiden avulla voit itse kokeilla menetelmiä.

Perinteinen eräkomento for-silmukalla
Windowsin komentokehotteessa eli cmd:ssä ei ole suoraa tapaa pingata yhtä aikaa useita osoitteita, mutta for-silmukka mahdollistaa osoitealueen läpikäynnin yhdellä rivillä. Tämä on erityisen hyödyllinen, jos haluat tarkastaa kokonaisen aliverkon, esimerkiksi 192.168.0.1 - 192.168.0.254. Syntaksi on seuraava: for /L %i in (1,1,254) do ping -n 1 -w 20 192.168.0.%i | find "Reply". Tämä komento käy silmukassa läpi kaikki verkon osoitteet ja pingaa kutakin kerran. Jos vastaus tulee, se näyttää rivin, jossa lukee Reply. Muussa tapauksessa mitään ei tulosteta. Väliin tuleva | find "Reply" suodattaa tulosteen ja näyttää vain onnistuneet yhteydet, mikä tekee tulosten lukemisesta huomattavasti nopeampaa.
Jos haluat nähdä kaikki vastaukset, voit jättää find-osan pois ja tulostaa kaikki pakit ja onnistuneet tulokset. Tässä menetelmässä pingit suoritetaan peräkkäin eli yksi kerrallaan, eivät rinnakkain. Useimmille käyttäjille tämä riittää, koska yhden pingin vasteaika on tyypillisesti alle sekunti, joten koko luokan 254 osoitteen läpikäynti kestää vain muutaman minuutin. Kannattaa huomata, että -w 20 asettaa aikakatkaisuksi 20 millisekuntia, mikä nopeuttaa skannausta paikallisverkossa. Tämä menetelmä on dokumentoitu muun muassa SuperUser-sivustolla, jossa käyttäjät jakavat parhaita käytäntöjä komentorivityöskentelyyn.

Lista for-silmukan edellyttämistä vaiheista on seuraava:
- Määritä aliverkon osoite ja aloitus- ja lopetusarvot.
- Valitse ping-komennon parametrit: -n (lähetettävien pakettien määrä), -w (aikakatkaisu).
- Liitä mukaan find-komento halutessasi suodattaaksesi tulosteen.
- Suorita komento komentokehotteessa, jossa olet avannut kansion tai käytät suoraa syntaksia.

Tämä tapa on erinomainen nopeaan tarkastukseen, mutta se ei sovellu reaaliaikaiseen seurantaan, koska jokainen ping odottaa edellisen valmistumista.
Usean IP-osoitteen pingaus yhdellä komennolla
Windowsin ping-komento tukee yllättäen usean osoitteen antamista samalla rivillä. Voit kirjoittaa esimerkiksi ping 8.8.8.8 1.1.1.1 8.8.4.4, ja järjestelmä pingaa kaikki kolme osoitetta peräkkäin yhden komennon alla. Tämä on nopea tapa testata muutamaa tunnettua palvelinta, mutta se ei sovellu laajalle osoitealueelle, koska jokainen osoite on kirjoitettava erikseen. Käytännössä tämä menetelmä on hyödyllinen silloin, kun haluat tarkastaa juuri tietyt kriittiset kohteet, kuten DNS-palvelimet tai oletusyhdyskäytävän. Tulosteessa jokainen kohde saa oman lohkonsa, ja voit nähdä, onko yhteys toiminnassa.

Yksi tärkeä huomio on, että tässä syntaksissa ei ole mahdollisuutta asettaa eri aikakatkaisua tai lähetysmäärää kullekin osoitteelle erikseen. Siksi se sopii parhaiten valvontatilanteisiin, joissa parametrit ovat samat kaikille. Microsoftin dokumentaation mukaan ping-komennon syntaksi sallii useita kohteita, mikä on hyödyllistä nopeissa testeissä. Jos haluat kattavamman valvonnan, kannattaa siirtyä PowerShellin puolelle.
PowerShell ja Test-Connection cmdlet
PowerShell tarjoaa modernimman ja joustavamman tavan pingata useita laitteita. Test-Connection-cmdlet on ping-komennon seuraaja, ja se pystyy oletuksena lähettämään yhden paketin usealle kohteelle rinnakkain. Komento Test-Connection -ComputerName 8.8.8.8, 1.1.1.1, 8.8.4.4 -Count 1 lähettää jokaiselle osoitteelle yhden paketin ja palauttaa tulokset objektina. Tämä tekee tulosten käsittelystä ohjelmallisesti helppoa: voit tallentaa tulokset muuttujiin, suodattaa niitä tai ohjata ne tiedostoon.

Hieno ominaisuus Test-Connectionissa on, että se tukee rinnakkaisuutta automaattisesti, kun annat useita kohteita. Voit myös asettaa -AsJob parametrin, jolloin pinging suoritetaan taustatehtävinä, mikä nopeuttaa suurten osoitejoukkojen käsittelyä. PowerShell tarjoaa lisäksi mahdollisuuden määrittää aikakatkaisu ja pakettien kokoa, mikä tekee siitä monipuolisemman kuin perinteinen ping. Tämä cmdlet on dokumentoitu Microsoftin oppimisalustalla, jossa on esimerkkejä ja lisäparametreja.
Taulukko vertailee eri menetelmiä:
Menetelmä | Edut | Haitat | Soveltuvuus
For-silmukka cmd | Yksinkertainen, ei vaadi asennuksia | Ei rinnakkainen, hidas suurilla verkoilla | Pienet aliverkot ja nopeat tarkistukset
Usean IP:n ping cmd | Helppo kirjoittaa, nopea | Vain muutama osoite kerrallaan | Kriittisten palvelinten testaus
Test-Connection PowerShell | Rinnakkainen, joustava, olio-pohjainen | Vaatii PowerShellin | Keskisuuret ja suuret ympäristöt
Start-Job PowerShell | Täysin rinnakkainen, jatkuva valvonta | Monimutkaisempi, resurssi-intensiivinen | Jatkuva verkon monitorointi
PingInfoView | Graafinen, reaaliaikainen | Kolmannen osapuolen työkalu | Helppo graafinen käyttö
Rinnakkainen pingaus PowerShellin Start-Job avulla
Jos tarvitset aidosti rinnakkaista ja jatkuvaa pingausta useille IP-osoitteille samanaikaisesti, Start-Job on oikea työkalu. Start-Job avaa jokaiselle kohteelle oman taustatehtävän, jossa ping-komento suoritetaan toistuvasti esimerkiksi -t-parametrilla. Käytännössä voit kirjoittaa skriptin, joka käy läpi IP-listalta ja luo jokaiselle oman tehtävän. Komento voisi olla: $ips = @("8.8.8.8","1.1.1.1","8.8.4.4"); foreach ($ip in $ips) { Start-Job -ScriptBlock { param($ip) while($true) { ping -n 1 $ip | Out-Null } } -ArgumentList $ip }. Tämä skripti lähettää jokaiselle kohteelle yhden ping-paketin sekunnissa ikuisessa silmukassa.
Tämän menetelmän etuna on se, että voit valvoa useita kohteita reaaliajassa ilman, että mikään jää odottamaan toista. Haittapuolena on resurssien käyttö: jokainen taustatehtävä vie oman säikeensä, joten suurilla määrillä (yli 50) kannattaa harkita kevyempiä vaihtoehtoja. Tulosten kerääminen tehtävistä onnistuu Get-Job ja Receive-Job komentojen avulla. Redditin PowerShell-yhteisössä on jaettu useita esimerkkejä tällaisten skriptien optimoinnista, ja niitä kannattaa hyödyntää, jos haluaa välttää sudenkuopat.
Kolmannen osapuolen työkalu: PingInfoView
Moni ei halua kirjoittaa komentoja, vaan tarvitsee graafisen työkalun, jossa voidaan syöttää lista IP-osoitteita ja nähdä tulos reaaliaikaisesti. PingInfoView on NirSoftin kehittämä ilmainen työkalu, joka tekee juuri tämän. Ohjelmaan voit ladata tekstitiedoston, jossa on jokaisella rivillä yksi IP-osoite tai isäntänimi, ja se alkaa pingata niitä kaikkia samanaikaisesti. Näkymässä näkyy vihreä pallo, jos yhteys toimii, ja punainen, jos se on katkennut. Lisäksi ohjelma näytt





