确定 NIC 是否可以访问 Internet(相对于本地、封闭网络)

确定 NIC 是否可以访问 Internet(相对于本地、封闭网络)

PowerShell 中是否有某种方法可以自动确定多个 NIC 中的哪一个可以访问 Internet,而不是连接到封闭的网络?

假设一台计算机有一个 NIC,通常可以连接到 Web,另一个 NIC 连接到一个小型科学设备网络。它们都有 IP 地址,并且可以看到一个“网络”。有没有通用的方法来确定哪个是互联网连接的?

我知道:

gwmi win32_networkadapterconfiguration -filter "ipenabled = 'true'"

gwmi win32_networkadapter -filter "NetConnectionStatus LIKE '2'"

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

但我不清楚这些过滤器是否识别互联网访问与仅网络访问,不幸的是,我无法访问具有此类设置的机器进行测试。

谢谢。

答案1

Test-Connectioncmdlet允许您使用参数指定源地址-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.

答案2

我相信最好的方法是检查默认路由使用哪个适配器。

Get-NetRoute -DestinationPrefix "0.0.0.0/0"

这将为您提供ifIndex应连接到互联网的适配器。同样ifIndex可以使用该命令来获取适配器...

Get-NetAdapter -InterfaceIndex <number from previous command>

相关内容