- Test-Connection offre test ping, traceroute, MTU e TCP con output strutturato.
- En PowerShell 6/7 modifica la sintassi, restituisce i tipi e aggiunge parametri come -Traceroute e -Detailed.
- Windows PowerShell 5.1 utilizza WMI e Win32_PingStatus con opzioni di autenticazione e impersonificazione.
- -Quiet restituisce valori booleani, -Repeat esegue un'iterazione continua e -MtuSize calcola l'MTU del percorso.
Se lavori con le reti in Windows, Linux o macOS, prima o poi vorrai controllare se un host risponde e quanto è sano il percorso. Il cmdlet Test-Connection è il moderno coltellino svizzero per ping ICMP, traceroute, rilevamento MTU e test TCP da PowerShell., con output strutturato che può essere filtrato ed elaborato.
Inoltre, la storia del cmdlet ha due facce: Nel classico Windows PowerShell (5.1) si basava su WMI e restituiva Win32_PingStatus, mentre in PowerShell 6 e versioni successive il cmdlet è stato riprogettato ed esteso per essere multipiattaforma ed esporre oggetti specifici come PingStatus, TraceStatus o TcpPortStatus. Conoscere entrambe le famiglie di parametri e di output consente di effettuare diagnosi approfondite e precise..
Che cos'è Test-Connection e cosa risolve?
Test-Connection invia richieste di eco ICMP (ping) a una o più destinazioni e restituisce risposte; può anche tracciare il percorso (traceroute), calcolare il Path MTU e verificare se una porta TCP è accessibile. Rispetto al tradizionale eseguibile ping, Il cmdlet restituisce oggetti complessi che è possibile inoltrare, filtrare e convertire. a report o dashboard.
Nella sua versione moderna, il cmdlet aggiunge parametri come -Traceroute, -MtuSize, -TcpPort, -Repeat, -TimeoutSeconds, -IPv4/-IPv6 e -Detailed (quest'ultimo a partire da PowerShell 7.4 per suddividere i tentativi TCP). Con -Quiet puoi limitare l'output ai valori booleani per destinazione per decisioni rapide negli script.
Negli ambienti in cui in precedenza venivano combinati ping, tracert, nslookup o telnet, PowerShell fornisce opzioni native per coprire praticamente tutte le diagnosi di connettività da un unico strumento.E se preferisci un altro approccio, c'è Test-NetConnection per controlli di rete combinati, ma questo articolo si concentra sulla compressione di Test-Connection.
Modifiche principali: Windows PowerShell 5.1 vs PowerShell 6/7
L'evoluzione del cmdlet si articola in due fasi ben distinte. In Windows PowerShell 5.1 e versioni precedenti, il cmdlet utilizza WMI e restituisce Win32_PingStatus; espone parametri quali -ComputerName, -AsJob, -DcomAuthentication, -Impersonation, -Protocol, -ThrottleLimit, -TimeToLive (TTL) e -WsmanAuthentication, tra gli altri.
Con il passaggio a PowerShell 6+, Il cmdlet è stato riscritto per essere multipiattaforma e la sua API è stata modificata: ora viene utilizzato -TargetName (invece di -ComputerName), vengono visualizzati i set di parametri Ping/Repeat/Traceroute/MtuSize/TcpPort, gli output sono tipi specifici come PingStatus, TraceStatus, PingMtuStatus o TcpPortStatus, e -TimeoutSeconds, -ResolveDestination e -Detailed (7.4) arrivano per TCP.
Questo implica che, Se si scrivono script portabili, è necessario rilevare la versione e regolare i parametri e l'elaborazione. output. Un'opzione è quella di coprire entrambi i mondi con rami condizionali ($PSVersionTable.PSVersion.Major).
Sintassi moderna e set di parametri (PowerShell 6+)
Il cmdlet offre diversi set di parametri che attivano diverse modalitàEcco una panoramica delle opzioni principali:
- Ping predefinito: Test-Connection
- Ripeti ping: Test-Connection -Ripetere
- traceroute: Test-Connection -Traceroute
- MtuSizeDetect: Test-Connection -MtuSize
- Porta TCP: Test-Connection -Porta TCP
In tutte le modalità, -TargetName è obbligatorio e accetta nomi DNS o indirizzi IPv4/IPv6L'output predefinito in ping è una sequenza di oggetti PingStatus, uno per echo.
Sintassi classica (Windows PowerShell 5.1)
Altre firme vengono utilizzate negli ambienti Windows PowerShell 5.1., con -ComputerName come parametro centrale e diverse opzioni di autenticazione WMI:
- Predefinito: Test-Connection
- Fonte: Test-Connection
- Tranquillo: Test-Connection
In questo caso, L'output predefinito è ManagementObject Win32_PingStatuse con -AsJob viene restituito un oggetto job (System.Management.Automation.RemotingJob).
Parametri moderni, spiegati uno per uno
-NomeDestinazione: destinazioni da testare, supporta nomi e indirizzi IPv4/IPv6; posizione 0 e obbligatoria; accetta la canalizzazione per valore e per nome di proprietà.
-Ping: Forza la modalità ping ICMP; questo è il comportamento predefinito, quindi solitamente viene ignorato a meno che non venga combinato specificatamente.
-Ripetere: invia ping continuamente; Se fornisci più destinazioni, ripeti solo sulla prima e salta le altre; incompatibile con -Count nel ping.
-Traceroute: Traccia il percorso verso la destinazione restituendo oggetti TraceStatus per ogni salto; da PowerShell 6 e supporta -ResolveDestination per i nomi DNS intermedi.
-MtuSize: rileva il percorso MTU verso la destinazione, restituendo PingMtuStatus con la dimensione MTU effettiva; utile in combinazione con -DontFragment e -BufferSize.
-Porta TCP: tenta di aprire una connessione TCP alla porta specificata sulla destinazione; restituisce $true o $false (e con -Dettagli in 7.4, oggetti TcpPortStatus con latenze e informazioni per tentativo).
-Contare: numero di richieste di eco; per impostazione predefinita 4 in ping e valido anche con TcpPort.
-Ritardo: secondi tra i tentativi; utile per la congestione o per test prolungati.
-DimensioneBuffer: byte di carico utile; 32 per impostazione predefinita; impostato insieme a -DontFragment per il test MTU.
-NonFrammentare: imposta il flag di non frammentazione su IP; chiave per la scoperta del percorso MTU.
-IPv4 / -IPv6: forza l'utilizzo del protocollo IP; utile su host dual-stack o quando ci sono problemi di risoluzione.
-MaxHops: numero massimo di salti consentiti; 128 per impostazione predefinita su Windows 10+.
-RisolviDestinazione: tenta di risolvere il nome DNS di destinazione e, accanto a -Traceroute, anche host intermedi se possibile.
-Fonte: origine della spedizione (attrezzatura) quando applicabile; per impostazione predefinita il locale, utile negli scenari multi-origine.
-Silenzioso: sopprime gli errori e restituisce valori booleani in base alla destinazione; $true se arriva almeno un ping, $false se tutti falliscono.
-TimeoutSecondi: tempo massimo di attesa per la risposta; 5 secondi per impostazione predefinita; disponibile da PowerShell 6.
-Dettaglio: nei test TCP (-TcpPort), restituisce TcpPortStatus con ID, direzione, latenza, connesso e stato; integrato in PowerShell 7.4.
Parametri e opzioni classici (Windows PowerShell 5.1)
-NomeComputer: destinazioni da testare; obligatorio e non dipende dalla comunicazione remota di PowerShell.
-Come Lavoro: esegue il cmdlet in background; restituisce un oggetto di lavoro recuperabile con Receive-Job per non bloccare la sessione.
-Autenticazione Dcom: Livello di autenticazione COM utilizzato con WMI; valori accettati Predefinito, Nessuno, Connetti, Chiama, Pacchetto, PacketIntegrity, PacketPrivacy, Invariato (Pacchetto predefinito).
-Impersonificazione: Livello di rappresentazione WMI; valori Predefinito, Anonimo, Identifica, Impersona, Delega (per impostazione predefinita Impersona).
-Protocollo: protocollo per WMI; DCOM o WSMan in base alla configurazione.
-WsmanAuthentication: Meccanismo di autenticazione quando si utilizza WSMan; supporta Predefinito, Base, Negozia, CredSSP, Digest, Kerberos.
-Limite dell'acceleratore: numero massimo di connessioni simultanee per il comando; per impostazione predefinita 32.
-Tempo di vita (TTL): numero massimo di reinvii prima di scartare il pacchetto; 128 per impostazione predefinita su Windows (alias TTL).
-Fonte e -Credenziale: per inviare ping da altre fonti con credenziali appropriate, particolarmente utile per confrontare la latenza da diverse posizioni.
Esempi pratici con PowerShell 6/7
Ping IPv4 di base a un server specifico e analisi dell'output PingStatus:
Test-Connection -TargetName Server01 -IPv4
Esegui il ping di più destinazioni con un singolo comando con una serie di nomi:
Test-Connection -TargetName Server01, Server02, Server12
Personalizza conteggio, ritardo, hop e dimensione del buffer quando la rete è caricata:
Test-Connection -TargetName Server01 -Count 3 -Delay 2 -MaxHops 255 -BufferSize 256
Esegui come processo in background Lettura delle destinazioni da un file e attesa dei risultati:
$job = Start-Job -ScriptBlock { Test-Connection -TargetName (Get-Content -Path 'Servers.txt') }
$results = Receive-Job $job -Wait
Crea una PSSession solo se c'è connettività almeno in un'eco:
if (Test-Connection -TargetName Server01 -Quiet) {
New-PSSession -ComputerName Server01
}
Scopri il percorso con traceroute e restituire TraceStatus per hop:
Test-Connection -TargetName www.google.com -Traceroute
Test TCP dettagliato (PowerShell 7.4) per una tipica porta TLS:
Test-Connection bing.com -TcpPort 443 -Detailed -Count 4
Esempi pratici con Windows PowerShell 5.1
Ping semplice a un computer remoto con output Win32_PingStatus:
Test-Connection -ComputerName Server01
Ping di più server dalla squadra di casa:
Test-Connection -ComputerName Server01, Server02, Server12
Effettua il ping di una destinazione da più fonti con credenziali per confrontare le latenze:
Test-Connection -Source Server02, Server12, localhost -ComputerName Server01 -Credential (Get-Credential)
Personalizza intenti, TTL, buffer e concorrenza in reti estese:
Test-Connection -ComputerName Server01 -Count 3 -Delay 2 -TTL 255 -BufferSize 256 -ThrottleLimit 32
Esegui come processo in background e raccogliere i risultati una volta terminato:
$job = Test-Connection -ComputerName (Get-Content 'Servers.txt') -AsJob
if ($job.JobStateInfo.State -ne 'Running') {
$results = Receive-Job $job
}
Ping con credenziali e impersonificazione regolazione del livello di impersonificazione:
Test-Connection Server55 -Credential (Get-Credential) -Impersonation Identify
Usa output booleano per decisioni rapide negli script:
if (Test-Connection -ComputerName Server01 -Quiet) { New-PSSession Server01 }
Input e output dei cmdlet
Biglietti: Nella versione moderna, gli oggetti non vengono inoltrati direttamente al cmdlet; Sono accettati i valori dei parametri standard (TargetName supporta il piping per valore o per nome di proprietà.)
Risultati in PowerShell 6/7:
- Microsoft.PowerShell.Commands.TestConnectionCommand+PingStatus: un oggetto per risposta ICMP.
- Microsoft.PowerShell.Commands.TestConnectionCommand+TraceStatus: un oggetto per salto con -Traceroute.
- Microsoft.PowerShell.Commands.TestConnectionCommand+PingMtuStatus: con -MtuSize per Path MTU.
- Booleano: con -Quiet o -TcpPort (array se ci sono più destinazioni).
- Microsoft.PowerShell.Commands.TestConnectionCommand+TcpPortStatus: con -Dettagli per TCP in 7.4.
Risultati in Windows PowerShell 5.1:
- ManagementObject (Win32_PingStatus): per ogni eco.
- Booleano: quando si utilizza -Quiet.
- System.Management.Automation.RemotingJob: se eseguito con -AsJob.
Note e funzionalità multipiattaforma
Linux e permessi: quando si utilizza -BufferSize diverso da 32 o combinazioni con -MtuSize che modificano la dimensione predefinita, potrebbe essere necessario sudoIn tal caso, il cmdlet genera un'eccezione che indica che sono richiesti privilegi.
Silenzioso e gestione degli errori: -Quiet restituisce valori booleani e rimuove gli errori; ricorda che con più destinazioni l'uscita è una matrice di valori in ordine di valutazione.
Ripeti vs Conta: non mescolare -Ripeti con -Conteggio nel ping; -Repeat ignora le destinazioni aggiuntive e ripete solo la primaPer più destinazioni con ripetizione, richiamare il cmdlet per ciascuna di esse.
Risolvi i nomi: -ResolveDestination aggiunge la risoluzione DNS della destinazione e con -Traceroute, prova a risolvere ogni salto; utile per mappare i dispositivi intermedi.
Compatibilità: sì, tu copione dovrebbe funzionare su Windows PowerShell 5.1 e PowerShell 6/7, rileva la versione e utilizza -ComputerName o -TargetName di conseguenzae regola l'interpretazione dell'output.
Test-Connection e la sua relazione con Test-NetConnection
Prima di Test-NetConnection, utilità come ping, tracert, nslookup o telnet venivano combinate per diagnosticare la connettività. Con PowerShell v4 è arrivato Test-NetConnection, che centralizza i test ICMP e TCP e traccia anche i percorsi con un singolo cmdlet.
Eppure, Test-Connection copre scenari approfonditi con oggetti più specifici per test ICMP, MTU, traceroute e TCP moderni. È possibile integrarlo con Test-NetConnection quando si necessita di un controllo rapido e completo.
Esempi di Test-NetConnection per confrontare i comportamenti:
# Chequeo general con más detalle
Test-NetConnection -InformationLevel Detailed
# Comprobar resolución y ruta hacia un host
Test-NetConnection -ComputerName google.com
Test-NetConnection -ComputerName google.com -TraceRoute
# Verificar un puerto TCP conocido
Test-NetConnection -ComputerName google.com -CommonTCPPort HTTP
# Especificar un puerto concreto
Test-NetConnection -ComputerName google.com -Port 80
Negli scenari in cui telnet non è più presente per impostazione predefinita, Questi cmdlet di PowerShell semplificano il controllo delle porte TCP e della connettività ICMP, aggiungendo metadati utili come l'interfaccia di output o l'indirizzo sorgente.
Scrittore appassionato del mondo dei byte e della tecnologia in generale. Adoro condividere le mie conoscenze attraverso la scrittura, ed è quello che farò in questo blog, mostrarti tutte le cose più interessanti su gadget, software, hardware, tendenze tecnologiche e altro ancora. Il mio obiettivo è aiutarti a navigare nel mondo digitale in modo semplice e divertente.