使用Powershell确定Internet连接

use*_*756 2 powershell cmdlets

是否有一个简单的cmdlet我可以在PowerShell中运行,以确定我的Windows机器是通过以太网还是通过无线适配器连接到互联网?我知道您可以在GUI上确定这一点,我只想知道如何在PowerShell中管理它.

Fox*_*loy 8

PowerShell cmdlet Get-NetAdapter可以为您提供有关网络适配器的各种信息,包括连接状态.

Get-NetAdapter | select Name,Status, LinkSpeed

Name                     Status       LinkSpeed
----                     ------       ---------
vEthernet (MeAndMahVMs)  Up           10 Gbps
vEthernet (TheOpenRange) Disconnected 100 Mbps
Ethernet                 Disconnected 0 bps
Wi-Fi 2                  Up           217 Mbps
Run Code Online (Sandbox Code Playgroud)

另一种选择是运行Get-NetAdapterStatistics,它只显示当前连接设备的统计数据,因此我们可以使用它作为了解谁连接到网络的方式.

Get-NetAdapterStatistics

Name                             ReceivedBytes ReceivedUnicastPackets       SentBytes SentUnicastPackets
----                             ------------- ----------------------       --------- ------------------
Wi-Fi 2                              272866809                 323449        88614123             178277
Run Code Online (Sandbox Code Playgroud)

更好的答案

做了一些研究,发现如果适配器的路由到0.0.0.0,那么它就在网上.这导致了这个管道,它只返回连接到网络的设备.

Get-NetRoute | ? DestinationPrefix -eq '0.0.0.0/0' | Get-NetIPInterface | Where ConnectionState -eq 'Connected'

ifIndex InterfaceAlias                  AddressFamily NlMtu(Bytes) InterfaceMetric Dhcp     ConnectionState PolicyStore
------- --------------                  ------------- ------------ --------------- ----     --------------- -----------
17      Wi-Fi 2                         IPv4                  1500              20 Enabled  Connected       ActiveStore
Run Code Online (Sandbox Code Playgroud)


Min*_*kus 6

Get-NetConnectionProfile
Run Code Online (Sandbox Code Playgroud)

将使用网络连接状态指示器(与 Windows 在网络设备属性中使用的指示器相同)返回每个连接的网络适配器的 Internet 连接状态:

Name             : <primary DNS suffix>
InterfaceAlias   : Ethernet
InterfaceIndex   : 9
NetworkCategory  : DomainAuthenticated
IPv4Connectivity : Internet
IPv6Connectivity : LocalNetwork

Name             : <primary DNS suffix>
InterfaceAlias   : WiFi
InterfaceIndex   : 12
NetworkCategory  : DomainAuthenticated
IPv4Connectivity : Internet
IPv6Connectivity : LocalNetwork
Run Code Online (Sandbox Code Playgroud)

您应该能够使用 IPv4Connectivity 或 IPv6Connectivity 为您提供所需的真/假值。以下命令将检查 Windows 是否认为任何网络设备通过 IPv4 或 IPv6 连接到 Internet:

$AllNetConnectionProfiles = Get-NetConnectionProfile
$AllNetConnectionProfiles | Where-Object {$_.IPv4Connectivity -eq 'Internet' -or $_.IPv6Connectivity -eq 'Internet'}
Run Code Online (Sandbox Code Playgroud)