Облачное хранилище
PowerShell Test-NetConnection проверка TCP-порта
PowerShell Test-NetConnection проверка TCP-порта

В PowerShell есть удобный командлет Test-NetConnection, который позволяет проверять доступность удаленного сервера или службы, тестировать блокировку TCP-портов (например, файрволом), а также проверять работу ICMP (ping) и маршрутизацию. Он фактически заменяет традиционные утилиты вроде ping, tracert, telnet, а также функции сканера портов.


Проверка TCP-порта через Test-NetConnection

Командлет Test-NetConnection работает только с **TCP**. Чтобы проверить, открыт ли на удаленном хосте порт TCP (например, порт 25 — SMTP), можно выполнить:

Test-NetConnection -ComputerName msk-msg01 -Port 25

Сокращенный вариант — TNC msk-mail1 -Port 25. Обратите внимание: **для UDP-портов** этот командлет **не подходит**.

Пример вывода:

ComputerName       : msk-msg01  
RemoteAddress      : 10.10.1.7  
RemotePort         : 25  
InterfaceAlias     : CORP  

SourceAddress      : 10.10.1.70  
PingSucceeded      : True  
PingReplyDetails (RTT) : 0 ms  
TcpTestSucceeded   : True  
Test-NetConnection — проверка 25 TCP-порта

В этом отчёте видно, что: — удалённый сервер успешно отвечает на ICMP (ping) — PingSucceeded = True, — TCP-порт 25 доступен — TcpTestSucceeded = True. Если PingSucceeded = False, но TcpTestSucceeded = True, это может означать, что ICMP-пакеты блокируются (например, firewall’ом).

Если запустить Test-NetConnection без аргументов, он проверит, есть ли подключение к Интернету, опрашивая узел internetbeacon.msedge.net.

Test-NetConnection — проверка TCP-порта

Для вывода расширенной диагностики используется параметр -InformationLevel Detailed, например:

TNC 192.168.31.102 -Port 3389 -InformationLevel Detailed

Также есть параметр -CommonTCPPort, который позволяет быстро проверить популярные сервисы (HTTP, RDP, SMB и др.). Например:

Test-NetConnection -ComputerName winitpro.ru -CommonTCPPort HTTP  
Test-NetConnection msk-rds1 -CommonTCPPort RDP

Вывести **все** свойства проверки можно так:

Test-NetConnection msk-man01 -Port 445 | Format-List *

А чтобы получить минимальный результат (да/нет для TCP-порта), можно использовать:

TNC msk-mail1 -Port 25 -InformationLevel Quiet

> ⚠️ В старых версиях PowerShell (до версии 4.0) аналог можно получить через: > (New-Object System.Net.Sockets.TcpClient).Connect('msk-msg01', 25)

Командлет также поддерживает трассировку маршрута — -TraceRoute (аналог tracert). Можно ограничить число хопов через -Hops:

Test-NetConnection msk-man01 -TraceRoute
Test-NetConnection маршрутизация

Проверка порта на множестве хостов

Можно автоматизировать проверку TCP-порта на списке серверов. Поместите список хостов или IP в текстовый файл, например, servers.txt, и выполните:

Get-Content c:\Distr\servers.txt |
  Where { -not (Test-NetConnection $_ -Port 25 -InformationLevel Quiet) } |
  Format-Table -AutoSize

Этот однострочник выведет те хосты, на которых порт 25 **закрыт** или недоступен. Его можно встроить в простую систему мониторинга, чтобы оповещать при недоступности серверов.

Например, для контроллеров домена (DC) можно проверить множество общих сервисов (RPC, LDAP, DNS, SMB и др.):

$Ports = "135","389","636","3268","53","88","445","3269","80","443"
$AllDCs = Get-ADDomainController -Filter * | Select-Object Hostname,Ipv4Address

ForEach ($DC in $AllDCs) {
  ForEach ($P in $Ports) {
    $check = Test-NetConnection $DC.Ipv4Address -Port $P -WarningAction SilentlyContinue
    If ($check.TcpTestSucceeded -eq $true) {
      Write-Host $DC.Hostname $P -ForegroundColor Green "=>"
    } else {
      Write-Host $DC.Hostname $P -ForegroundColor Red "=>"
    }
  }
}

Этот небольшой скрипт проверит указанные TCP-порты на каждом контроллере домена и выделит недоступные порты красным цветом. Его можно запустить как службу Windows.

PowerShell: проверка портов на контроллерах домена

Сканер IP-диапазона через PowerShell

Можно сканировать диапазон IP-адресов на наличие открытого порта. Пример: просканировать IP с 10.10.10.5 до 10.10.10.30 на порт 3389:

foreach ($ip in 5..30) {
  Test-NetConnection -Port 3389 -InformationLevel Detailed 10.10.10.$ip
}

Также можно просканировать множество портов на одном сервере (например, порты 1–1024):

foreach ($port in 1..1024) {
  $a = Test-NetConnection srvfs01 -Port $port -WarningAction SilentlyContinue
  If ($a.TcpTestSucceeded -eq $true) {
    "TCP порт $port открыт!"
  }
}

Сканирование TCP портов PowerShell SEO-тег: powershell-tcp-scan


Вывод списка прослушиваемых портов на локальной машине

Если нужно увидеть локальные открытые TCP-порты (эквивалент netstat в PowerShell), используйте командлет:

Get-NetTcpConnection -State Listen |
  Select-Object LocalAddress,LocalPort |
  Sort-Object -Property LocalPort |
  Format-Table

Чтобы узнать, какой процесс держит конкретный порт (например, 443), можно выполнить:

Get-Process -Id (Get-NetTcpConnection -LocalPort 443).OwningProcess |
  Format-Table Id, ProcessName, UserName, Path

Get-NetTCPConnection прослушиваемые порты SEO-тег: get-nettcpconnection-прослушиваемые-порты


Командлет Test-NetConnection — мощный инструмент для администраторов и инженеров, который позволяет проверять доступность TCP-портов, маршрутизацию, и даже служит простейшим сканером портов. В сочетании с PowerShell-скриптами он может упрощать мониторинг сетевой доступности в инфраструктуре.

Если нужна помощь с интеграцией этих решений под твою систему — напиши, помогу адаптировать скрипты под твой сценарий.

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

Что делает команда Test-NetConnection?

Она проверяет доступность удалённого узла или службы, диагностирует сетевое соединение и позволяет протестировать TCP-порт.

Можно ли проверить UDP-порты через Test-NetConnection?

Нет, командлет работает только с TCP. Для проверки UDP нужны другие инструменты.

Чем Test-NetConnection лучше ping или telnet?

Он объединяет возможности ping, tracert и telnet, предоставляет расширенную информацию и удобнее в автоматизации через PowerShell-скрипты.

Что делать, если ping не проходит, но TCP-порт открыт?

Это нормальная ситуация — часто ICMP-пакеты блокируются файрволом, но TCP-сервисы остаются доступны.

Как проверить сразу несколько серверов или портов?

Можно использовать цикл PowerShell (foreach) и командлет Get-Content для списка хостов или диапазонов IP-адресов.

Можно ли использовать Test-NetConnection для мониторинга?

Да, с помощью простых скриптов можно настроить регулярные проверки и даже автоматические оповещения.

Как узнать, какой процесс занимает конкретный порт?

Для этого используется командлет Get-NetTcpConnection с указанием номера порта и последующим получением процесса через Get-Process.

Полезные ссылки