PowerShell Test-Connection: Der moderne Ping-Test

Heutiges cmdlet des Tages ist PowerShell Test-Connection. `Test-Connection` ist ein cmdlet, das, wenig überraschend, Ihre Netzwerkverbindung testet. Denken Sie an `Test-Connection` als Powershells Implementierung des beliebten Ping-Dienstprogramms. Obwohl beide ICMP gemeinsam haben, werden Sie feststellen, dass die beiden Methoden unter der Oberfläche ein wenig unterschiedlich sind.

Die Verwendung dieses cmdlets ist einfach. Geben Sie einfach einen ComputerName-Parameter an, und es werden vier ICMP-Anfragen an das Zielhost gesendet.

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

Dieser Ausdruck sieht ähnlich aus wie ping.exe und ist auf den ersten Blick auch so, aber Powershell Test-Connection gibt die ICMP-Anfrage ein wenig anders aus. Anders als ping.exe verwendet `Test-Connection` die WMI-Klasse `Win32_PingStatus` des lokalen Computers, um die ICMP-Anfrage zu senden. Die Verwendung des lokalen WMI-Repositorys bedeutet, dass Sie sicherstellen müssen, dass Ihr `lokales` WMI-Repository gesund ist, sonst wird `Test-Connection` nicht funktionieren.

Objektausgabe von PowerShell Test-Connection

Außerdem gibt dieses cmdlet, genauso wie die Schönheit von PowerShell, nicht einfach nur das zurück, was sofort in der Konsole erscheint. Wir sehen hier reiche Objekte, von denen wir mehr Informationen sammeln können.

Wenn ich die Ausgabe einer Variable zuweise und dann die Eigenschaften überprüfe, können Sie sehen, dass ich viele nützlichere Informationen gesammelt habe.

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>

Wenn Sie interne Hosts testen, verwendet Test-Connection DCOM, um sich bei Remote-Hosts zu authentifizieren. Standardmäßig wird Paketebene DCOM-Authentifizierung verwendet, aber der Authentifizierungstyp kann jederzeit mit dem DcomAuthentication-Parameter geändert werden.

Verwendung von Hintergrundjobs

Dieses Cmdlet kann auch als Hintergrundjob ausgeführt werden. Hintergrundjobs sind nützlich, wenn Sie viele Remote-Computer zu pingen haben und anstatt für solche, die schließlich ablaufen, für immer warten möchten, senden Sie es einfach als Hintergrundjob.

Laut der PowerShell-Hilfe für Powershell Test-Connections steht dort, dass PowerShell-Remoting aktiviert sein muss auf beiden lokalen und Remote-Computern, aber das ist nicht wahr. Wie Sie unten sehen können, teste ich google.com, und der Befehl funktioniert immer noch großartig.

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

Einfach halten

Wenn Sie nur eine binäre Ja/Nein-Antwort darauf suchen, ob ein Computer antwortet oder nicht, können Sie immer den Quiet-Parameter verwenden. Eine häufige Zeichenkette, die ich immer verwende, um schnell zu sehen, ob ein Server online ist oder nicht, ist die Verwendung von Quiet und Count von 1, um Test-Connection zu zwingen, eine einzelne ICMP-Anfrage zu senden.

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

Das war es für unseren Cmdlet des Tages! Wir haben den Großteil dessen abgedeckt, was mit Powershell test-connection möglich ist, aber wie immer sollten Sie sich die PowerShell-Hilfe ansehen oder zur Microsoft-Dokumentation gehen, um eine vollständige Aufschlüsselung zu erhalten.

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