PowerShell Test-Connection: De Moderne Ping Test

Vandaag is de cmdlet van de dag PowerShell Test-Connection. Test-Connection is een cmdlet die, niet verrassend, je netwerkverbinding test. Denk aan Test-Connection als de PowerShell-implementatie van het populaire ping-hulpprogramma. Hoewel beide ICMP gemeen hebben, zul je zien dat de twee methoden onder de motorkap een beetje verschillen.

Het gebruik van deze cmdlet is eenvoudig. Op zijn meest basisniveau geef je gewoon een ComputerName-parameter op, en het zal vier ICMP-verzoeken naar het doelhost sturen.

PS> Test-Connection -ComputerName google.com
Source        Destination     IPV4Address      IPV6Address                              Bytes    Time(ms)
------        -----------     -----------      -----------                              -----    --------
MACWINVM      google.com      172.217.0.14     2607:f8b0:4009:80c::200e                 32       47
MACWINVM      google.com      172.217.0.14     2607:f8b0:4009:80c::200e                 32       90
MACWINVM      google.com      172.217.0.14     2607:f8b0:4009:80c::200e                 32       88
MACWINVM      google.com      172.217.0.14     2607:f8b0:4009:80c::200e                 32       205

Deze uitvoer lijkt op die van ping.exe en op het eerste gezicht is het dat ook, maar Powershell test-connection verstuurt het ICMP-verzoek net iets anders. In tegenstelling tot ping.exe gebruikt Test-Connection de lokale WMI-klasse Win32_PingStatus om het ICMP-verzoek te versturen. Het gebruik van de lokale WMI-repository betekent dat je ervoor moet zorgen dat je lokale WMI-repository gezond is, anders zal Test-Connection niet werken.

Objectuitvoer van PowerShell Test-Connection

Ook, net als met de kracht van PowerShell, geeft deze cmdlet niet alleen terug wat direct in de console verschijnt. We zien rijke objecten waaruit we meer informatie kunnen halen.

Als ik de uitvoer toewijs aan een variabele en vervolgens de eigenschappen bekijk, zie je dat ik veel meer nuttige informatie heb verzameld.

PS> $pingResults | Get-Member
TypeName: System.Management.ManagementObject#root\cimv2\Win32_PingStatus
Name                           MemberType     Definition
----                           ----------     ----------
PSComputerName                 AliasProperty  PSComputerName = __SERVER
Address                        Property       string Address {get;set;}
BufferSize                     Property       uint32 BufferSize {get;set;}
NoFragmentation                Property       bool NoFragmentation {get;set;}
PrimaryAddressResolutionStatus Property       uint32
PrimaryAddressResolutionStatus {get;set;}
ProtocolAddress                Property       string ProtocolAddress {get;set;}
ProtocolAddressResolved        Property       string
ProtocolAddressResolved {get;set;}
RecordRoute                    Property       uint32 RecordRoute {get;set;}
ReplyInconsistency             Property       bool ReplyInconsistency {get;set;}
ReplySize                      Property       uint32 ReplySize {get;set;}
ResolveAddressNames            Property       bool ResolveAddressNames {get;set;}
ResponseTime                   Property       uint32 ResponseTime {get;set;}
ResponseTimeToLive             Property       uint32 ResponseTimeToLive {get;set;}
RouteRecord                    Property       string[] RouteRecord {get;set;}
RouteRecordResolved            Property       string[] RouteRecordResolved {get;set;}
SourceRoute                    Property       string SourceRoute {get;set;}
SourceRouteType                Property       uint32 SourceRouteType {get;set;}
StatusCode                     Property       uint32 StatusCode {get;set;}
Timeout                        Property       uint32 Timeout {get;set;}
TimeStampRecord                Property       uint32[] TimeStampRecord {get;set;}
TimeStampRecordAddress         Property       string[] TimeStampRecordAddress {get;set;} TimeStampRecordAddressResolved Property       string[]
TimeStampRecordAddressResolved {get;set;}
TimestampRoute                 Property       uint32 TimestampRoute {get;set;}
<SNIP>

Als je interne hosts test, zal Test-Connection DCOM gebruiken om verbinding te maken met externe hosts. Standaard zal het Pakketniveau DCOM-authenticatie gebruiken, maar het authenticatietype kan altijd worden gewijzigd met de parameter DcomAuthentication.

Het uitvoeren als achtergrondtaak

Deze cmdlet kan ook worden uitgevoerd als achtergrondtaak. Achtergrondtaken zijn handig als je veel externe computers moet pingen en in plaats van eindeloos te wachten op die uiteindelijk time-out zullen gaan, stuur je het gewoon naar een achtergrondtaak.

Volgens de PowerShell-help voor Powershell-testverbindingen staat er dat PowerShell-remoting moet zijn ingeschakeld op zowel de lokale als externe computers, maar dit is niet waar. Zoals je hieronder kunt zien, test ik google.com, en de opdracht werkt nog steeds prima.

Test-Connection -AsJob -ComputerName google.com
Get-Job | Receive-Job

Het simpel houden

Als je alleen een binair ja/nee-antwoord wilt of een computer reageert of niet, kun je altijd de parameter Quiet gebruiken. Een veelgebruikte string die ik altijd gebruik om snel te zien of een server online is of niet, is om Quiet en Count van 1 te gebruiken om Test-Connection te dwingen een enkel ICMP-verzoek te sturen.

PS> Test-Connection -ComputerName google.com -Quiet -Count 1
True

Dat is het voor onze cmdlet van de dag! We hebben het grootste deel behandeld van wat mogelijk is met Powershell test-connection, maar zoals altijd, bekijk de PowerShell helpinhoud of ga naar de Microsoft-documentatie voor een volledige uitleg.

Source:
https://adamtheautomator.com/powershell-test-connection/