2

Есть ли в PowerShell способ автоматически определить, какой из нескольких сетевых адаптеров имеет доступ к Интернету, а не подключение к закрытой сети?

Скажем, у компьютера есть одна сетевая карта, которая обычно может выходить в Интернет, и другая сетевая карта, которая подключена к небольшой сети научных устройств. Они оба имеют IP-адреса и видят "сеть". Существует ли общий способ определения подключенного Интернета ?

Я знаю о:

gwmi win32_networkadapterconfiguration -filter "ipenabled = 'true'"

а также

gwmi win32_networkadapter -filter "NetConnectionStatus LIKE '2'"

а также

Get-NetAdapter | ? {($_.status -eq 'up')

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

Благодарю.

2 ответа2

3

Командлет Test-Connection позволяет указать адрес источника с параметром -Source . Мы можем проверить адреса, используемые каждым адаптером.

$adapters = Get-NetIPAddress -AddressFamily ipv4 | Where-Object InterfaceAlias -in (Get-NetAdapter | Select-Object -ExpandProperty Name) | Select-Object IPAddress,InterfaceAlias

$adapters | % {

    Test-Connection -Source $_.IPAddress -Destination 8.8.8.8 -ErrorAction SilentlyContinue | Out-Null

    if($?) {
        write-host $_.InterfaceAlias "(" $_.IPAddress ") can connect to the internet."
    }
    else {
        write-host $_.InterfaceAlias "(" $_.IPAddress ") failed to connect to the internet."
    }

}

Выход:

Local Area Connection ( 10.1.1.2 ) can connect to the internet
Ethernet 2 ( 10.1.1.3 ) failed to connect to the internet.
Wireless Network Connection ( 10.1.1.4 ) failed to connect to the internet.
0

Я считаю, что лучшим способом было бы проверить, какой адаптер использует маршрут по умолчанию.

Get-NetRoute -DestinationPrefix "0.0.0.0/0"

Это даст вам ifIndex для адаптера, который должен быть подключен к Интернету. Тот же ifIndex можно использовать для получения адаптера ...

Get-NetAdapter -InterfaceIndex <number from previous command>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .