Testing Internet connectivity

I was working on a troubleshooting module and start to think about how I’d go about testing internet connectivity.

First you need to determine the network adapter that’s connected to the internet. You can use the network connection profile to discover the network that’s connected to the internet:

PS> Get-NetConnectionProfile -IPv4Connectivity Internet

Name             : Network 2
InterfaceAlias   : vEthernet (Wireless)
InterfaceIndex   : 27
NetworkCategory  : Private
IPv4Connectivity : Internet
IPv6Connectivity : NoTraffic

You then need to discover the adapter that’s supplying that connection:

PS> Get-NetConnectionProfile -IPv4Connectivity Internet | Get-NetAdapter | select Name, ifindex, Status

Name                 ifIndex Status
----                 ------- ------
vEthernet (Wireless)      27 Up

The IP associated with that adapter:

PS> Get-NetConnectionProfile -IPv4Connectivity Internet | Get-NetIPAddress -AddressFamily IPv4

IPAddress         : 192.168.1.172
InterfaceIndex    : 27
InterfaceAlias    : vEthernet (Wireless)
AddressFamily     : IPv4
Type              : Unicast
PrefixLength      : 24
PrefixOrigin      : Dhcp
SuffixOrigin      : Dhcp
AddressState      : Preferred
ValidLifetime     : 06:10:59
PreferredLifetime : 06:10:59
SkipAsSource      : False
PolicyStore       : ActiveStore

And finally the default gateway and DNS server

PS> Get-NetConnectionProfile -IPv4Connectivity Internet | Get-NetIPConfiguration

InterfaceAlias       : vEthernet (Wireless)
InterfaceIndex       : 27
InterfaceDescription : Hyper-V Virtual Ethernet Adapter #2
NetProfile.Name      : Network 2
IPv4Address          : 192.168.1.172
IPv6DefaultGateway   :
IPv4DefaultGateway   : 192.168.1.1
DNSServer            : 192.168.1.1

So lets put all of that together:

function get-internetconnection {

  $prf = Get-NetConnectionProfile -IPv4Connectivity Internet

  $nic = $prf | Get-NetAdapter

  $ip = $prf | Get-NetIPAddress -AddressFamily IPv4

  $dg = $prf | Get-NetIPConfiguration

  $props = [ordered]@{
     NetworkName    = $prf.Name
     NetConnection  = $prf.IPv4Connectivity
     iIndex         = $prf.InterfaceIndex
     iAlias         = $prf.InterfaceAlias
     Status         = if ($nic.InterfaceOperationalStatus -eq 1){'Up'}else{'Down'}
     IPAddress      = $ip.IPAddress
     PrefixLength   = $ip.PrefixLength
     DefaultGateway = $dg.IPv4DefaultGateway | select -ExpandProperty NextHop
     DNSserver      = ($dg.DNSServer).serverAddresses
   }

  New-Object -TypeName PSobject -Property $props

}

This results in:

PS> get-internetconnection

NetworkName    : Network 2
NetConnection  : Internet
iIndex         : 27
iAlias         : vEthernet (Wireless)
Status         : Up
IPAddress      : 192.168.1.172
PrefixLength   : 24
DefaultGateway : 192.168.1.1
DNSserver      : 192.168.1.1

I’ve now got an object I can work with to run some tests which I’ll show you how to do next time.

Advertisements
This entry was posted in Networking, Powershell. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s