В PowerShell присутствует такой командлет, как Test-Connection
, который предназначен для проверки доступности удалённого компьютера или сервера через сеть. Test-Connection
является аналогом команды ping
в командной строке. Командлет отправляет эхо-запросы на целевой хост, используя протокол ICMP, и возвращает результаты, показывающие, достиг ли запрос исследуемого узла и сколько времени это заняло.
ICMP (Internet Control Message Protocol) — это сетевой протокол, используемый для диагностики сетевых соединений и передачи сообщений об ошибках в сетевых устройствах. Он является частью семейства интернет-протоколов, работающих на сетевом уровне модели OSI (layer 3).
Когда вы в PowerShell выполняете команду Test-Connection
, она отправляет сообщения ICMP Echo Request
на указанный узел. Эти сообщения аналогичны тем, которые отправляет команда ping
.
Целевой хост получает сообщение ICMP Echo Request
и отвечает сообщением ICMP Echo Reply
. Время между отправкой запроса и получением ответа используется для измерения задержки (latency).
Командлет имеет следующий синтаксис:
Test-Connection -ComputerName <имя_узла_или_IP_адрес> [дополнительные параметры]
Например, так выглядит команда проверки доступности узла google.com
:
Test-Connection -ComputerName google.com
А так выполняется проверка доступности узла по его IP-адресу:
Test-Connection -ComputerName 8.8.8.8
В данном случае после параметра -ComputerName
необходимо указать имя или IP-адрес хоста, доступ до которого нужно проверить.
Дополнительные параметры
При запуске командлета Test-Connection
могут использоваться следующие дополнительные параметры:
-Count
: указывает количество эхо-запросов, которые нужно отправить. Значение по умолчанию — 4.-BufferSize
: указывает размер буфера для каждого эхо-запроса в байтах.-TimeoutSeconds
: указывает максимальное время ожидания ответа в секундах.-AsJob
: выполняет команду как фоновое задание, что позволяет продолжить работу в PowerShell, пока проверка выполняется.-Traceroute
: выполняет трассировку маршрута до удалённого хоста.
Примеры команд
Проверка доступности нескольких хостов:
Test-Connection -ComputerName google.com, microsoft.com, yahoo.com
Проверка доступности с указанием количества запросов:
Test-Connection -ComputerName google.com -Count 3
Проверка доступности с указанием размера буфера:
Test-Connection -ComputerName google.com -BufferSize 64
Запуск задания в фоновом режиме:
Test-Connection -ComputerName google.com -AsJob
Проверка доступности с указанием времени ожидания:
Test-Connection -ComputerName google.com -TimeoutSeconds 2
Трассировка маршрута до хоста:
Test-Connection -ComputerName google.com -Traceroute
Здесь следует отметить, что если ваша версия PowerShell ниже 6.0, то в этом случае такие параметры, как -TimeoutSeconds
или -Traceroute
, могут быть недоступны. Поэтому, чтобы воспользоваться командлетом Test-Connection
с использованием данных параметров, необходимо обновить PowerShell до последней версии.
Pros and cons
Несмотря на всю схожесть командлета Test-Connection
и команды ping
, всё же они имеют некоторые отличия в функциональности и возможностях.
Команда ping
является утилитой командной строки, которая доступна практически в любой операционной системе, включая Windows, Linux и macOS. При этом Test-Connection
— это командлет PowerShell, который работает в среде данной командной оболочки, доступной в Windows и других платформах, где установлен PowerShell, например, Linux с PowerShell Core.
В командной строке ping
возвращает текстовый вывод, который отображается в консоли. Его сложнее обработать программно, так как требуется парсинг текста. Test-Connection
возвращает объекты PowerShell с подробной информацией о результатах проверки, что упрощает дальнейшую обработку данных скриптами PowerShell.
Команда ping
предлагает базовые опции, такие как указание количества запросов, размер пакета, время ожидания и т.п. В то же время Test-Connection
располагает более расширенными возможностями. К ним можно отнести выполнение команды как фонового задания и выполнение трассировки. Также командлет поддерживает выполнение проверки нескольких хостов одновременно. Это позволяет не выполнять несколько отдельных команд для каждого узла и легко сравнить задержки и доступность для разных хостов.
Заключение
Таким образом, полученные с помощью Test-Connection
результаты легко использовать в скриптах и других командлетах PowerShell. Кроме того, Test-Connection
обладает более гибкими и мощными параметрами для проверки сетевой доступности и диагностики.
При этом команда ping
доступна практически на всех платформах и в любой операционной системе и её легко использовать для быстрых и простых проверок доступности удалённого хоста.