Test de connexion PowerShell : Le test de ping moderne

L’cmdlet du jour est PowerShell Test-Connection. Test-Connection est un cmdlet qui, sans surprise, teste votre connexion réseau. Pensez à Test-Connection comme l’implémentation de PowerShell de l’utilitaire ping populaire. Bien qu’ils aient tous les deux ICMP en commun, vous verrez que les deux méthodes sont un peu différentes sous le capot.

L’utilisation de ce cmdlet est simple. Dans sa forme la plus basique, spécifiez simplement un paramètre ComputerName, et il enverra quatre requêtes ICMP à l’hôte de destination.

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

Cette sortie ressemble à ping.exe et, en surface, c’est le cas, mais test-connection de Powershell envoie la requête ICMP un peu différemment. Contrairement à ping.exe, Test-Connection utilise la classe WMI du poste local Win32_PingStatus pour envoyer la requête ICMP. L’utilisation du référentiel WMI local signifie que vous devez vous assurer que votre référentiel WMI local est en bon état, sinon Test-Connection ne fonctionnera pas.

Sortie Objet de PowerShell Test-Connection

De plus, comme avec la puissance de PowerShell, ce cmdlet ne retourne pas simplement ce qui apparaît immédiatement dans la console. Nous obtenons des objets riches à partir desquels nous pouvons recueillir plus d’informations.

Si j’assigne la sortie à une variable et que je vérifie les propriétés, vous pouvez voir que j’ai recueilli beaucoup plus d’informations utiles.

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>

Si vous testez des hôtes internes, Test-Connection utilisera DCOM pour s’authentifier auprès des hôtes distants. Par défaut, il utilisera l’authentification DCOM au niveau du paquet mais le type d’authentification peut toujours être modifié avec le paramètre DcomAuthentication.

Utilisation des tâches en arrière-plan

Cette commande peut également s’exécuter en arrière-plan. Les tâches en arrière-plan sont pratiques si vous avez beaucoup d’ordinateurs distants à pinguer et que vous ne voulez pas attendre indéfiniment ceux qui finiront par expirer, il suffit de les envoyer en tâche de fond.

Selon l’aide PowerShell pour les test-connections de Powershell, il est dit que l’accès distant PowerShell doit être activé sur les ordinateurs locaux et distants, mais ce n’est pas vrai. Comme vous pouvez le voir ci-dessous, je teste google.com, et la commande fonctionne toujours très bien.

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

Restons simples

Enfin, si vous cherchez simplement une réponse binaire oui/non pour savoir si un ordinateur répond ou non, vous pouvez toujours utiliser le paramètre Quiet. Une chaîne commune que j’utilise toujours pour voir rapidement si un serveur est en ligne ou non est d’utiliser Quiet et Count de 1 pour forcer Test-Connection à envoyer une seule demande ICMP.

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

C’est tout pour notre cmdlet du jour ! Nous avons couvert la majorité de ce qui est possible avec test-connection Powershell, mais, comme toujours, consultez le contenu d’aide PowerShell ou rendez-vous sur la documentation Microsoft pour une explication complète.

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