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