Битлента
Сетевые команды и утилиты5 мин чтения·

Test-Connection: как делать ping в PowerShell и чем он отличается от ping.exe

Командлет Test-Connection посылает эхо-запросы и возвращает объекты: время ответа, адрес, статус. Параметры -Count и -Quiet, различия версий.

Кратко

Test-Connection — PowerShell-версия ping: по умолчанию посылает четыре эхо-запроса и возвращает объекты с адресом и временем ответа. Ключ -Quiet даёт просто True или False, что удобно для скриптов. В Windows PowerShell 5.1 и в PowerShell 7 набор параметров различается.

Чем это отличается от привычного ping

Обычный ping.exe печатает текст, который читает человек. Test-Connection возвращает объекты, с которыми работают как с данными: можно взять среднее время, отфильтровать неудачные ответы, записать результат в таблицу. Для разовой проверки разницы почти нет, а для регулярных проверок и скриптов она существенна.

Лучше сразу учесть, что в мире PowerShell существуют две ветки с разным поведением. В Windows PowerShell 5.1, встроенной в систему, вывод содержит столбцы вроде Source, Destination, IPV4Address и ResponseTime. В современной PowerShell 7 вывод компактнее и показывает Ping, Status и Latency. Поэтому пример из интернета может не совпасть с вашим выводом.

О ключах классического ping.exe рассказывает отдельная страница; здесь только командлет.

Базовые команды и параметры

Основные запуски:

  • Test-Connection имя-или-адрес выполняет четыре эхо-запроса;
  • -Count 10 задаёт число запросов;
  • -Quiet возвращает только True или False;
  • -BufferSize меняет размер данных в пакете;
  • -TimeoutSeconds ограничивает ожидание в новых версиях.

Параметр цели в разных версиях называется по-разному: в Windows PowerShell 5.1 это -ComputerName, в PowerShell 7 — -TargetName. Если вы не указываете имя параметра, а просто пишете адрес после команды, он сработает в обеих версиях. Это самый безопасный способ при переносе команд между компьютерами.

Если вы не уверены, какая версия установлена, выполните $PSVersionTable.PSVersion.

Как читать результат

Смысл вывода близок к классическому ping.

Что видитеКак понимать
Время ответа в миллисекундахЗадержка до узла и обратно
Ответ на все запросыУзел доступен по ICMP
Часть запросов без ответаПотери пакетов, нестабильная связь
Нет ответов вообщеУзел недоступен или не отвечает на ICMP
Ошибка разрешения имениПроблема с DNS, а не со связью

Отсутствие ответа не всегда означает, что узел выключен. Многие устройства и сети намеренно не отвечают на ICMP-запросы. Поэтому для проверки конкретной службы лучше использовать Test-NetConnection с номером порта.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Режим Quiet для условий и скриптов

Когда нужно просто узнать, доступен ли адрес, помогает ключ -Quiet. Выражение if (Test-Connection адрес -Count 2 -Quiet) { "в сети" } else { "нет ответа" } даёт понятный текст без разбора вывода. Такая проверка пригодится, например, перед запуском копирования на сетевой диск: сначала убедитесь, что до сервера дошли запросы.

Помните про ограничения. Один успешный ответ из двух запросов уже даёт True, поэтому ключ показывает «хоть что-то отвечает», а не «связь стабильна». Для оценки стабильности используйте большее число запросов и анализируйте потери и разброс задержки.

Для длительного наблюдения за линией лучше подойдёт журнал, как на странице про ping с записью в файл.

Проверка нескольких адресов и ограничения командлета

В PowerShell легко проверить сразу несколько узлов, перечислив их через запятую: Test-Connection шлюз, внешний-адрес, имя-сайта -Count 2. Так вы быстро определите, на каком участке пропадает связь. Если шлюз отвечает, а внешний адрес нет, причина находится за роутером. Если не отвечает уже шлюз, проверяйте кабель, Wi-Fi и локальные настройки.

Порядок проверки от ближнего к дальнему экономит время: сначала сам компьютер, потом роутер, затем внешний адрес по числовому значению и в конце имя сайта. Расхождение между внешним адресом и именем указывает на DNS.

Более подробная схема пошаговой диагностики приведена на странице про Wi-Fi без доступа в интернет.

Test-Connection проверяет только ICMP и не отвечает на вопрос, работает ли конкретная программа или порт. Он не показывает маршрут: для этого есть tracert. Результаты зависят от того, как сеть и устройства обрабатывают ICMP: брандмауэры и роутеры могут ограничивать ответы.

Не делайте выводов по одному запуску. Задержка колеблется, и единичный всплеск ничего не доказывает. Сравнивайте серии измерений в разное время.

Пример регулярной проверки и типичные ошибки при использовании

Допустим, вы хотите знать, доступен ли роутер каждые несколько секунд. В простом цикле while ($true) { Test-Connection адрес -Count 1 -Quiet; Start-Sleep 5 } вы получите ряд значений True и False. Каждое False — момент, когда ответ не пришёл. Добавьте вывод времени командой Get-Date, и получится журнал обрывов.

Для долгих наблюдений журнал лучше писать в файл, а не смотреть в окно. Остановить цикл можно сочетанием клавиш Ctrl+C. Если нужно запустить проверку в фоне, обратитесь к материалам про планировщик заданий, это отдельная тема.

Не ставьте слишком маленький интервал: частые запросы создают лишнюю нагрузку и могут восприниматься удалённым узлом как излишняя активность.

Первая ошибка — путать недоступность по ICMP с недоступностью службы. Вторая — копировать команды между версиями PowerShell без проверки параметров: несовпадение имён параметров приводит к ошибке. Третья — делать выводы по одному запуску: сеть нестабильна по природе, и важна серия.

Если команда выдаёт сообщение о невозможности разрешить имя, проверьте DNS, а не сам узел. Если выдаёт отказ или недоступность узла для адреса из локальной сети, проверьте брандмауэр целевого компьютера: ответы на эхо-запросы там могут быть отключены.

Когда нужен подробный отчёт по каждому узлу маршрута, переходите к tracert и pathping.

Для сравнения откройте и классический ping в соседнем окне и убедитесь, что результаты согласуются. Небольшие расхождения нормальны, потому что команды измеряют время немного по-разному. Если расхождения большие, проверьте нагрузку на компьютер и параллельные загрузки: они искажают задержку. Для сопоставимых измерений выполняйте проверки в одинаковых условиях.

И последнее: если вы используете командлет в скриптах для других людей, добавьте проверку версии PowerShell или указывайте цель без имени параметра. Тогда скрипт сработает на обоих вариантах и не упадёт из-за различий в названиях. Небольшая предусмотрительность избавляет от обращений вида «у меня не запускается».

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
powershellpingwindowsдиагностика

Часто задаваемые вопросы

Читайте также