Поиск по сайту:

Как использовать Test-NetConnection в PowerShell


Знали ли вы, что команда ping, существующая уже 38 лет, старше командной строки? Вероятно, вы уже заменили командную строку в своем ежедневном наборе инструментов на PowerShell. Так что теперь пришло время заменить команду ping на PowerShell Test-NetConnection.

Преимущество ping заключается в том, что это действительно короткая команда для ввода, но недостаток в том, что она только проверяет сетевое соединение через ICMP. Она не выполняет трассировку или тестирование портов. Большую часть времени нам нужно комбинировать команду ping с tracert и nslookup, чтобы получить все необходимые детали.

Test-NetConnection является преемником командлета PowerShell Test-Connection. Последний был первым шагом к замене команды ping, с некоторыми преимуществами. Test-NetConnection намного мощнее и должен стать вашим основным инструментом при устранении проблем с сетью.

PowerShell Тест-Соединение

Прежде чем мы рассмотрим, как использовать командлет Test-NetConnection в PowerShell, давайте сначала быстренько взглянем на Test-Connection.

Так же, как и ping, команда Test-Connection также использует протокол ICMP для тестирования сетевого соединения сетевого устройства. В самом простом виде вы можете ввести Test-Connection <имя компьютера> или <адрес-ip>, чтобы выполнить быструю проверку соединения.

Check connection on IP Address
Test-Connection 8.8.8.8

Source        Destination     IPV4Address      Bytes    Time(ms)
------        -----------     -----------      -------  ----
lab01         8.8.8.8         8.8.8.8          32       12
lab01         8.8.8.8         8.8.8.8          32       13
lab01         8.8.8.8         8.8.8.8          32       12
lab01         8.8.8.8         8.8.8.8          32       12

Check connection on DNS Name
Test-Connection google.com

Но, конечно, мы можем гораздо больше. Например, мы можем тестировать несколько направлений с одной командой:

Test-Connection -ComputerName 8.8.8.8, 1.1.1.1

Или укажите параметры, такие как количество переходов, размер буфера или даже добавьте задержку между пингами:

Test-Connection -ComputerName 8.8.8.8 -Count 3 -Delay 2 -MaxHops 255 -BufferSize 256

Тестирование удалённого компьютера

Мы также можем проверить сетевое подключение в PowerShell удаленного компьютера с помощью Test-Connection. Единственное требование заключается в том, чтобы ваша учетная запись имела доступ к удаленному компьютеру.

Test-Connection -Source srv-lab02 -ComputerName 8.8.8.8

Вы также можете ввести tnc вместо Test-NetConnecting.

Так что вы можете ввести: tnc 8.8.8.8, чтобы пинговать Google, например.

Проверка соединения с сервером PowerShell

Еще одной полезной функцией PowerShell Test-Connection является то, что она может возвращать $true или $false. Это позволяет вам проверить, доступен ли компьютер, прежде чем подключаться к нему. Test-Connect вернет $true, если хотя бы один из 4 пингов окажется успешным.

if (Test-Connection -TargetName srv-lab02 -Quiet) { New-PSSession -ComputerName srv-lab02}

Команда Test-NetConnection в PowerShell

Командлет Test-NetConnection является преемником Test-Connection, поэтому основные функции остаются теми же, только вывод более подробный. Мы все еще можем быстро выполнить ping на Google:

Test the network connection to Google
Test-NetConnection 8.8.8.8

ComputerName           : 8.8.8.8
RemoteAddress          : 8.8.8.8
InterfaceAlias         : Wi-Fi
SourceAddress          : 192.168.1.82
PingSucceeded          : True
PingReplyDetails (RTT) : 9 ms

Как вы можете увидеть, результаты более детализированы. Он покажет вам интерфейс, который используется, ваш IP-адрес источника и успешность пинга. Мы даже можем расширить это, добавив переключатель informationLevel "Detailed".

С установленным уровнем informationLevel на детализированный он, по сути, выполнит nslookup по адресу назначения и добавит первый узел в результаты поиска.

test-netconnection Google.com -InformationLevel "Detailed"                                                                                                                                                                                                                                                                                                            ComputerName           : Google.com                                                                                     RemoteAddress          : 172.217.17.78                                                                                  NameResolutionResults  : 172.217.17.78                                                                                  InterfaceAlias         : Wi-Fi                                                                                          SourceAddress          : 192.168.1.82                                                                                   NetRoute (NextHop)     : 192.168.1.1                                                                                    PingSucceeded          : True                                                                                           PingReplyDetails (RTT) : 6 ms

Вы можете выполнить быстрое тестирование сетевого соединения в PowerShell, запустив Test-NetConnection без каких-либо параметров. Таким образом, мы можем проверить, подключены ли мы к локальной сети, есть ли у нас доступ в интернет и можем ли мы разрешать DNS-имена.

❯ Test-NetConnection

ComputerName           : internetbeacon.msedge.net
RemoteAddress          : 13.107.4.52
InterfaceAlias         : Wi-Fi
SourceAddress          : 192.168.1.82
PingSucceeded          : True
PingReplyDetails (RTT) : 10 ms

Трассировка PowerShell с помощью Test-NetConnection

С помощью команды Test-NetConnection в PowerShell мы также можем выполнить traceroute. Вам просто нужно добавить параметр traceroute к команде.

PowerShell TraceRoute with Test-NetConnection
Test-NetConnection 172.217.17.87 -traceRoute

С добавленным параметром Traceroute к команде Test-NetConnection в PowerShell вы получите список каждого перехода, который проходит во время пинга. Вы можете ограничить количество переходов для трассировки с помощью параметра hops.

Чтобы протестировать задержку каждого промежуточного узла, вы можете выбрать объект TraceRoute и протестировать соединение каждого промежуточного узла:

Test-NetConnection 172.217.17.78 -traceRoute -Hops 3 | select-object TraceRoute | foreach-object {test-connection $_.TraceRoute -count 1}

Сканирование портов с помощью PowerShell

В Windows мы не можем действительно пинговать порт с помощью команды ping. Мы могли бы использовать telnet, чтобы проверить, отвечает ли порт, но с помощью Test-NetConnection мы можем гораздо легче сканировать порт в PowerShell.

Мы можем определить любой TCP-порт, который хотим протестировать, или использовать один из общих портов: HTTP, RDP, SMB или WINRM.

Test if HTTP port is open
Test-NetConnection google.com -CommonTCPPort "Http"

Or define a port number
Test-NetConnection google.com -Port 80

С этим мы можем создать простой скрипт PowerShell для сканирования портов, который может проверять открытые порты на сервере. Скрипт ниже предназначен для того, чтобы дать вам представление о том, как вы можете сканировать несколько портов с помощью PowerShell.

$ports = 22,53,80,445

$ports | ForEach-Object {$port = $_; if (Test-NetConnection -ComputerName 8.8.8.8 -Port $port -InformationLevel Quiet -WarningAction SilentlyContinue) {"Port $port is open" } else {"Port $port is closed"} }

Заключение

Как вы уже видели, команда PowerShell Test-NetConnection является действительно мощным и полезным инструментом для использования в вашей повседневной работе. В начале статьи я упоминал, что команда ping короче для ввода. Вы можете решить эту проблему, создав псевдоним в вашем профиле PowerShell или используя встроенный псевдоним tnc.

Create an alias "nettest" or maybe just "tn"
Set-Alias nettest Test-NetConnection

Таким образом, вы можете просто ввести «nettest» вместо Test-NetConnection. Узнайте больше о настройке профиля PowerShell в этой статье.

Если у вас есть вопросы, просто оставьте комментарий ниже.