olly - Fotolia
Try these PowerShell networking commands to stay connected
Ping has its place, but PowerShell gives you a way to dive deeper into a networking issue when a server drops its connection or starts to drop packets.
While it would be nice if they did, servers don't magically stay online on their own.
Servers go offline for a lot of reasons; it's your job to find a way to determine network connectivity to these servers quickly and easily. You can use PowerShell networking commands, such as the Test-Connection and Test-NetConnection cmdlets to help.
The problem with ping
For quite some time, system administrators used ping to test network connectivity. This little utility sends an Internet Control Message Protocol message request to an endpoint and listens for an ICMP reply.
Because ping only tests ICMP, this limits its effectiveness to fully test a connection. Another caveat: The Windows firewall blocks ICMP requests by default. If the ICMP request doesn't reach the server in question, you'll get a false negative which makes ping results irrelevant.
The Test-Connection cmdlet offers a deeper look
We need a better way to test server network connectivity, so let's use PowerShell instead of ping. The Test-Connection cmdlet also sends ICMP packets but it uses Windows Management Instrumentation which gives us more granular results. While ping returns text-based output, the Test-Connection cmdlet returns a Win32_PingStatus object which contains a lot of useful information.
The Test-Connection command has a few different parameters you can use to tailor your query to your liking, such as changing the buffer size and defining the number of seconds between the pings. The output is the same but the request is a little different.
Test-Connection www.google.com -Count 2 -BufferSize 128 -Delay 3
You can use Test-Connection to check on remote computers and ping a remote computer as well, provided you have access to those machines. The command below connects to the SRV1 and SRV2 computers and sends ICMP requests from those computers to www.google.com:
Test-Connection -Source 'SRV2', 'SRV1' -ComputerName 'www.google.com'
Source Destination IPV4Address IPV6Address
Bytes Time(ms)
------ ----------- ----------- -----------
----- --------
SRV2 google.com 172.217.7.174
32 5
SRV2 google.com 172.217.7.174
32 5
SRV2 google.com 172.217.7.174
32 6
SRV2 google.com 172.217.7.174
32 5
SRV1 google.com 172.217.7.174
32 5
SRV1 google.com 172.217.7.174
32 5
SRV1 google.com 172.217.7.174
32 5
SRV1 google.com 172.217.7.174
32 5
If the output is too verbose, and you just want a simple result, use the Quiet parameter.
Test-Connection -ComputerName google.com -Quiet
True
For more advanced network checks, try the Test-NetConnection cmdlet
If simple ICMP requests aren't enough to test network connectivity, PowerShell also provides the Test-NetConnection cmdlet. This cmdlet is the successor to Test-Connection and goes beyond ICMP to check network connectivity.
For basic use, Test-NetConnection just needs a value for the ComputerName parameter and will mimic Test-Connection's behavior.
Test-NetConnection -ComputerName www.google.com
ComputerName : www.google.com
RemoteAddress : 172.217.9.68
InterfaceAlias : Ethernet 2
SourceAddress : X.X.X.X
PingSucceeded : True
PingReplyDetails (RTT) : 34 ms
Test-NetConnection has advanced capabilities and can test for open ports. The example below will check to see if port 80 is open:
Test-NetConnection -ComputerName www.google.com -Port 80
ComputerName : google.com
RemoteAddress : 172.217.5.238
RemotePort : 80
InterfaceAlias : Ethernet 2
SourceAddress : X.X.X.X
TcpTestSucceeded : True
The boolean TcpTestSucceeded returns True to indicate port 80 is open.
We can also use the TraceRoute parameter with the Test-NetConnection cmdlet to check the progress of packets to the destination address.
Test-NetConnection -ComputerName google.com -TraceRoute
ComputerName : google.com
RemoteAddress : 172.217.5.238
InterfaceAlias : Ethernet 2
SourceAddress : X.X.X.X
PingSucceeded : True
PingReplyDetails (RTT) : 44 ms
TraceRoute : 192.168.86.1
192.168.0.1
142.254.146.117
74.128.4.113
65.29.30.36
65.189.140.166
66.109.6.66
66.109.6.30
107.14.17.204
216.6.87.149
72.14.198.28
108.170.240.97
216.239.54.125
172.217.5.238
If you dig into the help for the Test-NetConnection cmdlet, you'll find it has quite a few parameters to test many different situations.