Wprowadzenie do jednoczesnego pingowania wielu adresów
W codziennej pracy administratora sieci lub zaawansowanego użytkownika systemu Windows często pojawia się potrzeba sprawdzenia dostępności wielu hostów jednocześnie. Standardowe polecenie ping wysyła pakiety ICMP do jednego adresu i czeka na odpowiedź, co przy monitorowaniu całej podsieci lub listy serwerów staje się czasochłonne. W tym artykule omówimy różne metody pozwalające na pingowanie wielu adresów IP naraz w wierszu poleceń, zarówno w klasycznym cmd, jak i w nowoczesnym PowerShell. Przedstawimy rozwiązania od prostych pętli batchowych po zaawansowane polecenia równoległe, a także wspomnimy o narzędziach zewnętrznych ułatwiających to zadanie.
Ograniczenia standardowego polecenia ping
Wbudowane w Windows narzędzie ping działa w sposób sekwencyjny – pojedyncze wywołanie obsługuje tylko jeden adres docelowy. Aby sprawdzić kilka adresów, użytkownik musi ręcznie wpisać każde polecenie osobno lub użyć skryptu. Domyślny parametr -n (liczba wysyłanych pakietów) oraz -w (limit czasu oczekiwania) można dostosować, ale nadal nie zmienia to faktu, że proces jest liniowy. W środowiskach, gdzie czas reakcji ma znaczenie, konieczne jest uruchomienie wielu zapytań równolegle lub w bardzo szybkiej sekwencji. Poniższe metody pozwalają ominąć to ograniczenie i znacznie przyspieszyć diagnostykę sieci.

Pętla for w wierszu poleceń Windows
Najprostszą metodą pingowania zakresu adresów IP w klasycznym cmd jest wykorzystanie pętli for. Polecenie to iteruje przez zadaną sekwencję liczb i wykonuje ping dla każdego adresu. Przykładowe wywołanie dla podsieci 192.168.0.0/24 wygląda następująco: for /L %i in (1,1,254) do ping -n 1 -w 20 192.168.0.%i | find "Reply". Dzięki użyciu operatora potoku i polecenia find, na ekranie wyświetlane są tylko te linie, które zawierają słowo Reply, co pozwala szybko zidentyfikować aktywne hosty. Parametr -n 1 ogranicza liczbę wysłanych pakietów do jednego, a -w 20 ustawia bardzo krótki limit czasu oczekiwania (20 milisekund), co przyspiesza działanie całej pętli. Więcej informacji na temat tego podejścia można znaleźć na SuperUser.
Lista zalet i wad stosowania pętli for do pingowania wielu adresów:

- Zalety: łatwość implementacji, brak konieczności instalowania dodatkowego oprogramowania, możliwość filtrowania rezultatów za pomocą find.
- Wady: sekwencyjne wykonywanie pingów wydłuża czas skanowania całej podsieci, ograniczona kontrola nad błędami, brak równoległości.
- Możliwości rozszerzenia: pętla może być zapisana w pliku .bat, a wyniki przekierowane do pliku tekstowego za pomocą operatora >.
- Uwaga: w pętli for w pliku batch należy użyć podwójnego znaku procentu (%%i), natomiast w konsoli cmd pojedynczego (%i).
Pingowanie wielu konkretnych adresów w jednym poleceniu
W systemie Windows istnieje możliwość podania kilku adresów IP w jednym wywołaniu ping, oddzielając je spacjami. Polecenie ping 8.8.8.8 1.1.1.1 8.8.4.4 powoduje wysłanie pakietów do każdego z wymienionych hostów, ale wykonywane jest sekwencyjnie – dopóki nie zakończy się odpowiedź z pierwszego adresu, nie rozpocznie się drugi. Jest to wygodne dla krótkich list, ale nie przynosi zysku czasowego przy większej liczbie adresów. Oficjalna dokumentacja Microsoftu opisuje tę składnię jako dopuszcającą wiele adresów docelowych, choć nie określa ich maksymalnej liczby. Praktyka pokazuje, że przy dłuższych listach lepiej sprawdzają się pętle lub PowerShell. Szczegółowe omówienie polecenia ping znajduje się w dokumentacji Microsoft Learn.
PowerShell i polecenie Test-Connection
Nowoczesna powłoka PowerShell oferuje znacznie bardziej zaawansowane narzędzie do testowania łączności. Polecenie Test-Connection -ComputerName 8.8.8.8, 1.1.1.1, 8.8.4.4 -Count 1 pozwala na pingowanie wielu adresów jednocześnie, ponieważ domyślnie uruchamia zapytania równolegle. Jest to ogromna zaleta w porównaniu do klasycznego cmd, szczególnie gdy zależy nam na czasie. Dodatkowo Test-Connection zwraca obiekty, które można łatwo przetwarzać, filtrować i eksportować do plików CSV. W porównaniu z pętlą for w cmd, PowerShell zapewnia większą kontrolę nad parametrami timeout, liczbą prób oraz formatem wyjściowym.

Poniższa tabela porównuje najpopularniejsze metody pingowania wielu adresów w środowisku Windows:
| Metoda | Narzędzie | Równoległość | Łatwość użycia | Zalecany przypadek |
|---|---|---|---|---|
| Pętla for w cmd | Command Prompt | Nie | Średnia | Szybkie skanowanie podsieci |
| Wiele adresów w ping | Command Prompt | Nie (sekwencyjnie) | Bardzo łatwa | Sprawdzanie kilku hostów |
| Test-Connection | PowerShell | Tak (domyślnie) | Łatwa | Równoległe testowanie wielu IP |
| Start-Job z ping.exe | PowerShell | Tak (w tle) | Zaawansowana | Ciągłe monitorowanie wielu hostów |
| PingInfoView (NirSoft) | GUI | Tak | Bardzo łatwa | Użytkownicy preferujący interfejs graficzny |
PowerShell Jobs dla ciągłego pingowania równoległego
Gdy potrzebujemy monitorować wiele adresów w sposób ciągły (np. z parametrem -t w klasycznym ping), pomocne okazują się zadania tła PowerShell. Polecenie Start-Job -ScriptBlock {While($true){ping -n 1 8.8.8.8}} uruchamia ping w osobnym wątku, który działa w tle aż do ręcznego zatrzymania. Dla kilku adresów można utworzyć osobne zadania, a ich wyniki odbierać za pomocą Receive-Job. Jest to rozwiązanie bardzo elastyczne, choć wymaga znajomości składni PowerShell i zarządzania zadaniami. Dla początkujących bardziej przyjazne może być użycie pętli for z krótkim limitem czasu lub graficzne narzędzia firm trzecich.

Narzędzia zewnętrzne ułatwiające pingowanie wielu hostów
Jeśli wiersz poleceń nie jest komfortowym środowiskiem, warto sięgnąć po dedykowane aplikacje. Doskonałym przykładem jest PingInfoView autorstwa NirSoft. Program umożliwia wprowadzenie listy adresów IP lub nazw hostów, a następnie pinguje je wszystkie jednocześnie, wyświetlając wyniki w formie tabeli. Obsługuje także eksport danych do plików tekstowych i CSV. Podobne funkcjonalności oferują także inne narzędzia, takie jak Advanced IP Scanner lub Angry IP Scanner, które dodatkowo potrafią skanować porty. Dla użytkowników korporacyjnych ciekawą alternatywą są rozwiązania oparte na SNMP lub agentach, jednak w codziennej diagnostyce proste skrypty lub małe programy często wystarczają.
Praktyczne zastosowania i wskazówki
Jednoczesne pingowanie wielu adresów przydaje się w wielu sytuacjach: podczas audytu sieci, monitorowania floty urządzeń, sprawdzania dostępności serwerów w chmurze czy testowania stabilności łącza. W przypadku skryptów warto pamiętać o kilku regułach. W cmd używajmy opcji -w z małą wartością (np. 20), aby przyspieszyć działanie pętli. W PowerShell z kolei warto korzystać z parametru -ThrottleLimit w poleceniu Test-Connection, który pozwala kontrolować stopień równoległości. Jeśli planujemy regularne monitorowanie, lepiej zapisać skrypt w pliku .ps1 lub .bat i uruchamiać go z harmonogramu zadań. Nie zapominajmy też o uprawnieniach – pingowanie nie wymaga administratora, ale niektóre zaawansowane funkcje PowerShell mogą wymagać podniesionego poziomu dostępu.

Podsumowanie
Możliwość pingowania wielu adresów IP jednocześnie to kluczowa umiejętność każdego administratora sieci. Windows oferuje kilka ścieżek realizacji tego zadania – od prostej pętli for w cmd, przez wieloadresowe wywołanie ping, aż po równoległe Test-Connection w PowerShell i zaawansowane zadania tła. Każda z tych metod ma swoje mocne i słabe strony, które warto dopasować do konkretnej sytuacji. Dla szybkich skanów podsieci sprawdzi się pętla z filtrem find, do monitorowania kilku hostów – PowerShell z Test-Connection, a do ciągłego nadzoru – Start-Job lub narzędzia graficzne jak PingInfoView. Znajomość tych technik pozwala zaoszczędzić czas i skuteczniej diagnozować problemy sieciowe.
Źródła i referencje
W artykule wykorzystano informacje z następujących źródeł: dokumentacja Microsoft Learn dotycząca polecenia ping (learn.microsoft.com/en-us/windows-server/administration/windows-commands/ping), wpis na forum SuperUser dotyczący pętli for w cmd (superuser.com/questions/420714/cmd-exe-command-to-ping-a-range-of-addresses), opis polecenia Test-Connection na portalu Microsoft Docs (learn.microsoft.com/powershell/module/microsoft.powershell.management/test-connection), a także dyskusje na Reddit o ciągłym pingowaniu w PowerShell (reddit.com/r/PowerShell/comments/17949iu/how_to_do_continuous_ping_to_multiple_ips_and). Dodatkowo skorzystano z opisu narzędzia PingInfoView dostępnego na stronie NirSoft (nirsoft.net/utils/pinginfoview.html). Wszystkie źródła były dostępne w dniu pisania artykułu.




