Как использовать 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 в этой статье.
Если у вас есть вопросы, просто оставьте комментарий ниже.


