Одной из задач при администрировании Windows-систем является необходимость быстро определить, доступен ли по сети удалённый сервер или компьютер. Наиболее простой способ выполнить такую проверку – использовать PowerShell, а именно, командлеты Test-Connection и Test-NetConnection.
Проверка сети с использованием Test-Connection
По назначению Test-Connection похож на хорошо известную консольную утилиту ping. Оба эти инструмента для проверки связи используют ICMP и позволяют определить время ответа от удалённого узла. Однако PowerShell-командлет имеет перед командой ping важное преимущество. Заключается оно в том, что его результаты представлены в виде объектов, из-за чего их удобнее применять в скриптах и автоматизированных задачах.
Основой работы командлета Test-Connection является протокол ICMP (Internet Control Message Protocol). Данный протокол используется для передачи служебных сообщений в IP-сетях, в том числе для диагностики сетевых соединений, и относится к третьему – сетевому уровню модели OSI.
Сама проверка происходит по следующей схеме:
- PowerShell формирует ICMP
Echo Request; - запрос отправляется на указанный узел;
- удалённый узел получает запрос;
- если ICMP-запросы разрешены, удалённый узел формирует
Echo Reply; - PowerShell получает ответ и рассчитывает время прохождения запроса.
Как видно из схемы, при выполнении команды PowerShell отправляет целевому устройству Echo Request. Если устройство доступно и не блокирует подобные запросы, в ответ приходит Echo Reply. На основании полученного ответа можно оценить доступность узла и задержку при передаче данных. Например, проверить соединение с сервером Google можно следующей командой:
Test-Connection -ComputerName google.com

Параметр -ComputerName определяет узел, связь с которым необходимо проверить. Несмотря на название параметра, в качестве его значения можно указывать не только имя компьютера, но и IP-адрес:
Test-Connection -ComputerName 8.8.8.8

Полученное значение времени позволяет оценить сетевую задержку между двумя узлами. При этом отсутствие ответа не всегда означает, что удалённый компьютер выключен. ICMP может блокироваться межсетевым экраном, маршрутизатором или настройками безопасности самого сервера. Поэтому Test-Connection показывает именно возможность получить ICMP-ответ, а не гарантирует доступность удалённого сервера или конкретной его службы. К примеру, сервер может не отвечать на ping, но при этом принимает подключения к веб-серверу, SSH или другим сервисам.
Полезные параметры Test-Connection
Базовый синтаксис Test-Connection выглядит следующим образом:
Test-Connection -ComputerName <имя_или_IP>
При необходимости после имени узла можно добавить параметры, определяющие количество запросов, размер буфера и другие характеристики проверки. Например:
Test-Connection -ComputerName google.com -Count 5
Такая команда отправит на указанный узел пять ICMP-запросов. В данном случае параметр -Count определяет их количество.

С помощью параметра -BufferSize можно изменить размер буфера ICMP-запроса:
Test-Connection -ComputerName google.com -BufferSize 64
Размер передаваемых данных может иметь значение при диагностике сетевых проблем, связанных с передачей пакетов различного размера.

При большом количестве операций PowerShell-команду можно запустить как фоновое задание при помощи параметра -AsJob:
Test-Connection -ComputerName google.com -AsJob
После запуска задания текущая сессия PowerShell остаётся доступной для выполнения других команд. Такой подход может использоваться в сценариях, где проверка сети выполняется параллельно с другими административными операциями.
Получить список названий параметров, которые могут использоваться в Test-Connection, можно командой:
(Get-Command Test-Connection).Parameters.Keys
Чтобы вывести справочную информацию по конкретному параметру, например, по Count, используйте команду вида:
Get-Help Test-Connection -Parameter Count
Трассировка и проверка TCP-портов удалённого узла
Командлет Test-Connection подходит для базовой проверки доступности удалённого узла с помощью ICMP-запросов. Однако при диагностике сети часто требуется получить более подробную информацию, например, проверить доступность конкретного TCP-порта или определить маршрут до удалённого сервера.
Для таких задач в PowerShell предусмотрен другой командлет – Test-NetConnection. Он предназначен для диагностики сетевого подключения и позволяет проверить не только доступность удалённого узла, но и возможность установить TCP-соединение с определённым портом.
Чтобы определить маршрут от локального компьютера до удалённого сервера, в Test-NetConnection используется параметр -TraceRoute. Например:
Test-NetConnection google.com -TraceRoute
При выполнении данной команды PowerShell последовательно определяет промежуточные узлы маршрута. Для каждого перехода отображается соответствующая информация, в том числе IP-адрес обнаруженного сетевого узла.

При этом некоторые маршрутизаторы и сетевые устройства могут блокировать или ограничивать диагностические запросы. Поэтому отсутствие информации о конкретном промежуточном узле не обязательно означает, что именно на этом участке маршрута существует проблема.
Test-NetConnection можно использовать не только для диагностики маршрута, но и для проверки доступности определённого TCP-порта на удалённом компьютере или сервере. Для этого применяется параметр -Port. Например, чтобы проверить доступность TCP-порта 443 на сервере google.com, выполните:
Test-NetConnection google.com -Port 443
Как правило, порт 443 используется для HTTPS-подключения. Такая проверка позволяет определить, доступно ли TCP-соединение с веб-сервером по HTTPS.

Точно так же можно проверить, например, стандартный SSH-порт на удалённом узле:
Test-NetConnection 192.168.1.10 -Port 22
Таким образом, Test-NetConnection позволяет тестировать не только общую сетевую доступность компьютера, но и возможность установить соединение с конкретной службой.
Список параметров можно вывести через:
(Get-Command Test-NetConnection).Parameters.Keys
Также для командлета доступна справка отдельно по какому-либо параметру, например:
Get-Help Test-NetConnection -Parameter Port
