Test di connessione PowerShell: Il test di ping moderno

Il cmdlet di oggi è PowerShell Test-Connection. Test-Connection è un cmdlet che, come si può immaginare, testa la connessione di rete. Pensate a Test-Connection come all’implementazione di PowerShell dell’utilità di ping popolare. Anche se entrambi utilizzano ICMP, vedrete che i due metodi sono un po’ diversi sotto il cofano.

Usare questo cmdlet è semplice. Nel modo più semplice, è sufficiente specificare un parametro ComputerName, e invierà quattro richieste ICMP all’host di destinazione.

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

Questa output assomiglia a quella di ping.exe e, superficialmente, lo è, ma il comando test-connection di PowerShell invia la richiesta ICMP in modo leggermente diverso. A differenza di ping.exe, Test-Connection utilizza la classe WMI Win32_PingStatus del computer locale per inviare la richiesta ICMP. Utilizzare il repository WMI locale significa che è meglio assicurarsi che il repository WMI locale sia sano, altrimenti Test-Connection non funzionerà.

Output oggetti di PowerShell Test-Connection

Inoltre, come con la bellezza di PowerShell, questo cmdlet non restituisce solo ciò che appare immediatamente nella console. Vediamo oggetti ricchi da cui possiamo ottenere ulteriori informazioni.

Se assegno l’output a una variabile e poi controllo le proprietà, potete vedere che ho raccolto molte informazioni utili.

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>

Se stai testando gli host interni, Test-Connection utilizzerà DCOM per autenticarsi agli host remoti. Per impostazione predefinita, utilizzerà l’autenticazione DCOM a livello di pacchetto, ma il tipo di autenticazione può sempre essere modificato con il parametro DcomAuthentication.

Utilizzo di Background Jobs

Questo cmdlet può anche essere eseguito come un lavoro in background. I lavori in background sono utili se hai molti computer remoti da pingare e anziché attendere per sempre per quelli che alla fine scadranno, basta inviarli a un lavoro in background.

Secondo l’aiuto di PowerShell per il test delle connessioni PowerShell, si dice che il remoting di PowerShell deve essere abilitato sia sui computer locali che remoti, ma non è vero. Come puoi vedere qui sotto, sto testando google.com, e il comando funziona ancora alla grande.

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

Mantenere le cose Semplici

Infine, se stai cercando solo una risposta binaria sì/no per sapere se un computer sta rispondendo o meno, puoi sempre utilizzare il parametro Quiet. Una stringa comune che uso sempre per vedere rapidamente se un server è online o meno è utilizzare Quiet e Count di 1 per forzare Test-Connection a inviare una singola richiesta ICMP.

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

E questo è tutto per il nostro cmdlet del giorno! Abbiamo coperto la maggior parte di ciò che è possibile con il test-connection di Powershell ma, come sempre, consulta il contenuto dell’aiuto di PowerShell o vai alla documentazione di Microsoft per una panoramica completa.

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