Test-NetConnection: повний посібник — IT-Wiki

[IT-FORMAT]
Новий формат бізнесу

» » » Test-NetConnection: мережева діагностика у PowerShell — сучасна заміна telnet і tracert

Test-NetConnection: мережева діагностика у PowerShell — сучасна заміна telnet і tracert

Цикл: IT-Wiki / Атлас команд Windows Переглядів: 1
Перед стартом
  • Command запускається в PowerShell (не cmd). Синонім — коротша форма tnc.
  • Доступний з Windows 8.1 / Server 2012 R2 і новіше. На старіших системах — Test-Connection (ping only) або сторонні tools.
  • ICMP (ping-частина) блокується deafult Windows Firewall. Якщо PingSucceeded : False — це ще не завжди значить «недоступно».

Базовий синтаксис

Test-NetConnection -ComputerName <host> [-Port <N>] [-InformationLevel Detailed] [-TraceRoute] [-CommonTCPPort HTTP|RDP|SMB|WINRM]

Мінімальний виклик — перевірка TCP-порту:

Test-NetConnection smtp.office365.com -Port 587

Результат у консолі показує 5-7 ключових рядків: чи досяжний хост, чи відкритий порт, який інтерфейс використаний, який SourceAddress, RTT, чи є маршрут.

Сценарій 1. TCP-перевірка (заміна telnet)

Задача: перевірити, чи SMTP-relay на Office 365 відповідає. Фаєрвол чи зовнішня блокіровка?

Test-NetConnection smtp.office365.com -Port 587

Ключові поля у виводі:

  • TcpTestSucceeded : True — порт відкритий і приймає з'єднання.
  • TcpTestSucceeded : False — порт закритий або заблокований фаєрволом / NAT.
  • RemoteAddress — який IP DNS повернув для імені.
  • SourceAddress — з якого свого інтерфейсу пішов пакет (важливо при multi-homed).

Для швидкої перевірки у скриптах використовуйте -InformationLevel Quiet — повертає тільки True/False:

if (Test-NetConnection smtp.office365.com -Port 587 -InformationLevel Quiet) {
    Write-Host "SMTP reachable"
} else {
    Write-Host "SMTP BLOCKED"
}

Сценарій 2. Короткі назви типових портів

Задача: перевірити доступність RDP / SMB / HTTP / WinRM до віддаленої машини без запам'ятовування номерів.

Test-NetConnection fileserver01 -CommonTCPPort SMB
Test-NetConnection webapp.corp.local -CommonTCPPort HTTP
Test-NetConnection dc01.corp.local -CommonTCPPort WINRM

Мапінг: HTTP=80, SMB=445, RDP=3389, WINRM=5985. Якщо потрібен HTTPS (443) — через -Port 443, короткої назви для нього нема.

Сценарій 3. Детальна діагностика з маршрутом

Задача: щоразу «сайт повільний», але з інших машин швидко. Треба побачити де гальмує.

Test-NetConnection google.com -TraceRoute -InformationLevel Detailed

Друкує:

  • Traceroute по хопах (як tracert), але у PowerShell-об'єктах, які далі можна фільтрувати.
  • RTT (PingReplyDetails) — для кожного хопа.
  • Route reliability за кількома пакетами.

Комбо для пошуку «хто повільний»:

(Test-NetConnection google.com -TraceRoute).TraceRoute

Повертає масив IP-ів по хопам. Далі можна зробити Test-Connection до кожного для виміру latency.

Сценарій 4. Перевірка DNS-резолвингу

Задача: «сервер недоступний», підозра на DNS.

Test-NetConnection mysite.corp.local -InformationLevel Detailed

У виводі:

  • NameResolutionSucceeded : True — DNS вирішився у IP.
  • RemoteAddress : 192.168.10.5 — саме той IP, що повернув DNS. Порівняйте з очікуваним.
  • NameResolutionSucceeded : False — DNS не зміг резолвити. Причина — у самому DNS, не у мережі.
Порада

Для глибшого DNS-аналізу з конкретним типом запиту (MX, TXT, SRV) — Resolve-DnsName. Test-NetConnection робить тільки A/AAAA для заданого host.

Сценарій 5. Вибір конкретного source-інтерфейсу

Задача: на сервері два мережеві інтерфейси — management (192.168.10.x) і production (10.0.0.x). Перевірка має піти через production, а не management.

Test-NetConnection prod-db.corp.local -Port 1433 -SourceAddress 10.0.0.15

Якщо -SourceAddress не вказати, Windows сам вибере за метрикою маршрутизації. Типово це управлінський інтерфейс, що може дати хибне «працює» / «не працює».

Сценарій 6. Масова перевірка в циклі

Задача: перевірити доступність 20 бекенд-сервісів з одного хоста, зібрати статус у CSV.

$targets = @(
    @{Host='api1.corp.local';  Port=8443},
    @{Host='api2.corp.local';  Port=8443},
    @{Host='redis01.corp.local'; Port=6379},
    @{Host='smtp.corp.local';  Port=587}
)

$results = foreach ($t in $targets) {
    $r = Test-NetConnection $t.Host -Port $t.Port -WarningAction SilentlyContinue
    [PSCustomObject]@{
        Host = $t.Host
        Port = $t.Port
        Reachable = $r.TcpTestSucceeded
        Latency = $r.PingReplyDetails.RoundtripTime
    }
}
$results | Export-Csv C:\Temp\net-check.csv -NoTypeInformation

-WarningAction SilentlyContinue прибирає warning-спам у консолі (TNC за замовчуванням кидає warning, якщо ping не пройшов але порт відкритий).

Типові пастки

Пастка 1: PingSucceeded : False ≠ «недоступно»

ICMP блокується за замовчуванням у багатьох корпоративних фаєрволах і Windows Firewall. Хост може бути повністю функціональний через TCP 443, але ping не проходить. Завжди дивіться TcpTestSucceeded, а не PingSucceeded, якщо вказували -Port.

Пастка 2: повільний timeout

Якщо порт закритий фаєрволом (drop, не reject), TNC чекатиме 20+ секунд перед тим як повернути False. Це нормально. Для швидких перевірок у скриптах:

Test-NetConnection host -Port N -WarningAction SilentlyContinue -ErrorAction SilentlyContinue -InformationLevel Quiet -ConnectTimeout 3

Увага: параметра -ConnectTimeout в TNC немає. Для швидкого таймауту — System.Net.Sockets.TcpClient:

$tcp = New-Object System.Net.Sockets.TcpClient
$iar = $tcp.BeginConnect('host', 443, $null, $null)
$ok = $iar.AsyncWaitHandle.WaitOne(3000, $false)
$tcp.Close()
$ok
Пастка 3: UDP не перевіряється

Test-NetConnection робить тільки TCP-handshake. UDP-сервіси (DNS 53, SNMP 161, syslog 514, VoIP RTP) вона не перевірить. Для UDP — сторонні утиліти (nmap -sU) або спеціалізовані скрипти.

Коротка пам'ятка

Типові виклики
  • Test-NetConnection host -Port 443 — перевірити TCP-порт.
  • Test-NetConnection host -CommonTCPPort RDP — RDP з короткою назвою.
  • Test-NetConnection host -TraceRoute -InformationLevel Detailed — повний traceroute.
  • Test-NetConnection host -Port N -InformationLevel Quiet — True/False для скриптів.
  • Test-NetConnection host -SourceAddress X.X.X.X -Port N — з конкретного інтерфейсу.
  • (tnc host -TraceRoute).TraceRoute — масив IP по хопам.

Пов'язане

Test-NetConnection — не просто «заміна telnet». Це стандартний PowerShell-об'єкт, який інтегрується у скрипти. Звикніть до неї як до базового мережевого інструмента — часу вона економить багато.

  • Коментарі


Привіт, незнайомець
Опитування

Якою програмою обліку ви користуєтесь?