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

Функция PowerShell: Проверка шлюза по умолчанию с помощью Test-Gateway


Иногда может случиться так, что ваш компьютер потеряет соединение с другими узлами или интернетом. Что вам следует сделать в первую очередь? Например, вы можете попробовать связаться с другими узлами или вашим шлюзом по умолчанию. Конечно, вы можете использовать метод снизу вверх, поднимаясь по лестнице модели OSI и проверяя ваш сетевой кабель (Уровень 1), снова поднимаясь (Уровень 2) и проверяя вашу сетевую карту или ваш коммутатор, или вы можете использовать другой способ и спуститься вниз.

В этом блоге мы спускаемся и проверяем Шлюз по умолчанию, используя функцию PowerShell. Я создал небольшую функцию, которая считывает IP-адрес Шлюза по умолчанию из таблицы маршрутизации локального хоста. Давайте начнем.

Сбор IP-адреса шлюза по умолчанию

Следующее дает мне IP-адрес моего основного шлюза:

Get-NetRoute -DestinationPrefix 0.0.0.0/0

Обратите внимание, что он всегда дает мне IP-адрес Шлюза по умолчанию, независимо от того, сколько сетевых карт установлено и настроено. Это называется Шлюз по умолчанию (0.0.0.0/0) или Последний шлюз резервирования. Итак, IP-адрес моего Шлюза по умолчанию — 192.168.0.1. Давайте продолжим к следующему шагу.

Обнаружение Test-Connection

В моей статье "Современная версия пинга: Test-Connection" я работал с командлетом Test-Connection. Test-Connection похож на ping. Для следующего нам нужно использовать Test-Connection, чтобы проверить IP-адрес шлюза. Сначала мы могли бы попробовать пропинговать наш шлюз.

Test-Connection -ComputerName 192.168.0.1

Хорошо. Но это не то, что мы ищем. Мы хотим вызвать IP из таблицы маршрутизации. Для этого мы должны расширить свойство NextHop, чтобы получить только IP-адрес.

Get-NetRoute -DestinationPrefix 0.0.0.0/0 | Select-Object -ExpandProperty NextHop

Итак, мы знаем, что можем вставить эту команду в Test-Connection.

Test-Connection -ComputerName (Get-NetRoute -DestinationPrefix 0.0.0.0/0 | Select-Object -ExpandProperty NextHop)

Почему я поместил Get-NetRoute в круглые скобки? Команды в круглых скобках выполняются немедленно. Следовательно, когда начинается процесс пинга, IP-адрес шлюза уже там!

Отлично! Давайте начнем писать функцию.

Создание функции для тестирования подключения к Шириному шлюзу

Хорошо, моя цель - создать команду Test-Gateway. Давайте создадим функцию, которая будет соответствовать моему плану. Я также хочу, чтобы выходные данные показывали только true или false.

function Test-Gateway {Test-Connection -ComputerName (Get-NetRoute -DestinationPrefix 0.0.0.0/0 | Select-Object -ExpandProperty NextHop) -Quiet}

Теперь наступает волнующий момент …

Test-Gateway

Ура! Это работает.

Сделать это постоянным

Функции, которые вы создали, доступны только в текущей сессии PowerShell, что означает, что они исчезают, когда вы закрываете PowerShell.

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

Set-ExecutionPolicy remotesigned -force
New-Item $profile -Force | Out-Null
Add-Content $profile -Value {function Test-Gateway {Test-Connection -ComputerName (Get-NetRoute -DestinationPrefix 0.0.0.0/0 | Select-Object -ExpandProperty NextHop) -Quiet}}

Команда теперь стала постоянной. Она включена в ваш профиль, который будет загружаться каждый раз, когда вы запускаете PowerShell.

notepad $profile

Закройте PowerShell и откройте его снова. Запустите Test-Gateway. Удачи!

Тестирование шлюза на удаленных хостах

В одной из моих других статей я показал продвинутую функцию с удаленным действием. Она подключается к другим хостам, проверяет таблицу маршрутизации этого хоста, а затем проверяет, может ли этот хост достичь своего шлюза по умолчанию.

Больше информации здесь: PowerShell: Проверка сетевой связности с шлюзом по умолчанию на локальном хосте и удаленных хостах с помощью чтения таблицы маршрутизации.

Модуль PowerShell

Вы также можете сохранить эту функцию в виде модуля PowerShell, о котором я писал в предыдущем блоге: Функции PowerShell: Как создать вашу первую команду модуля PowerShell.

Статьи по данной тематике