- Test-Connection erbjuder ping-, traceroute-, MTU- och TCP-tester med strukturerad utdata.
- En Power 6/7 ändrar syntax, returtyper och lägger till parametrar som -Traceroute och -Detailed.
- Windows PowerShell 5.1 använder WMI och Win32_PingStatus med autentiserings- och personifieringsalternativ.
- -Quiet returnerar booleska värden, -Repeat itererar kontinuerligt och -MtuSize beräknar sökvägens MTU.
Om du arbetar med nätverk i Windows, Linux eller macOS, förr eller senare kommer du att vilja kontrollera om en värd svarar och hur felfri sökvägen är. Test-Connection-cmdlet:en är den moderna schweiziska armékniven för ICMP-pingar, traceroute, MTU-upptäckt och TCP-testning från PowerShell., med strukturerad utdata som kan filtreras och bearbetas.
Dessutom har cmdlet-historien två sidor: I klassisk Windows PowerShell (5.1) förlitade den sig på WMI och returnerade Win32_PingStatus., medan cmdlet:en i PowerShell 6 och senare omdesignades och utökades för att vara plattformsoberoende och exponera specifika objekt som PingStatus, TraceStatus eller TcpPortStatus. Att känna till båda parameterfamiljerna och utgångarna gör att du kan ställa en grundlig och korrekt diagnos..
Vad är Test-Connection och vad löser det?
Test-Connection skickar ICMP-ekoförfrågningar (ping) till en eller flera destinationer och returnerar svar; den kan också spåra rutten (traceroute), beräkna sökvägens MTU och testa om en TCP-port är tillgänglig. Jämfört med den traditionella ping-körbara filen, Cmdleten returnerar rika objekt som du kan pipa, filtrera och konvertera. till rapporter eller dashboards.
I sin moderna version lägger cmdlet:en till parametrar som -Traceroute, -MtuSize, -TcpPort, -Repeat, -TimeoutSeconds, -IPv4/-IPv6 och -Detailed. (det senare sedan PowerShell 7.4 för att bryta ner TCP-försök). Med -Quiet kan du begränsa utdata till booleska värden. efter destination för snabba beslut i skript.
I miljöer där du tidigare kombinerade ping, tracert, nslookup eller telnet, tillhandahåller PowerShell inbyggda alternativ för att täcka praktiskt taget all anslutningsdiagnostik från ett enda verktyg.Och om du föredrar en annan metod finns Test-NetConnection för kombinerade nätverkskontroller, men den här artikeln fokuserar på att klämma Test-Connection.
Viktiga ändringar: Windows PowerShell 5.1 jämfört med PowerShell 6/7
Det finns två tydliga steg i cmdlet-utvecklingen. I Windows PowerShell 5.1 och tidigare använder cmdlet:en WMI och returnerar Win32_PingStatus; exponerar parametrar som -ComputerName, -AsJob, -DcomAuthentication, -Impersonation, -Protocol, -ThrottleLimit, -TimeToLive (TTL) och -WsmanAuthentication, bland andra.
Med hoppet till PowerShell 6+, Cmdlet:en skrevs om för att vara plattformsoberoende och dess API ändrades-TargetName används nu (istället för -ComputerName), parameteruppsättningarna Ping/Repeat/Traceroute/MtuSize/TcpPort visas. Utdata är av specifika typer som PingStatus, TraceStatus, PingMtuStatus eller TcpPortStatus, och -TimeoutSeconds, -ResolveDestination och -Detailed (7.4) anländer för TCP.
Detta betyder att, Om du skriver portabla skript måste du identifiera versionen och justera parametrar och bearbetning. utdata. Ett alternativ är att täcka båda världarna med villkorliga grenar ($PSVersionTable.PSVersion.Major).
Modern syntax och parameteruppsättningar (PowerShell 6+)
Cmdlet:en erbjuder flera uppsättningar parametrar som aktiverar olika lägenHär är en översikt över de viktigaste alternativen:
- StandardpingTestanslutning
- Upprepa pingTestanslutning -Upprepa
- tracerouteTestanslutning -Spårväg
- MtuSizeDetectTestanslutning -MtuSize
- TcpPortTestanslutning -TcpPort
I alla lägen, -TargetName krävs och accepterar DNS-namn eller IPv4/IPv6-adresserStandardutdata i ping är en sekvens av PingStatus-objekt, ett per eko.
Klassisk syntax (Windows PowerShell 5.1)
Andra signaturer används i Windows PowerShell 5.1-miljöer., med -ComputerName som central parameter och flera WMI-autentiseringsalternativ:
- StandardTestanslutning
- KällaTestanslutning
- TystTestanslutning
I detta fall, Standardutdata är ManagementObject Win32_PingStatus, och med -AsJob returneras ett jobbobjekt (System.Management.Automation.RemotingJob).
Moderna parametrar, förklarade en efter en
-MålnamnMål att testa, stöder IPv4/IPv6-namn och -adresser; position 0 och obligatorisk; accepterar kanalisering efter värde och egenskapsnamn.
-PingTvingar fram ICMP-pingläge; detta är standardbeteendet, så det ignoreras vanligtvis om det inte specifikt kombineras.
-Upprepa: skickar pings kontinuerligt; Om du anger flera destinationer, upprepa bara den första och hoppa över resten; inkompatibel med -Count i ping.
-SpårvägSpåra rutten till destinationen genom att returnera TraceStatus-objekt per hopp; från PowerShell 6 och stöder -ResolveDestination för mellanliggande DNS-namn.
-MtuSize: detekterar MTU:ns sökväg till destinationen, returnerar PingMtuStatus med den effektiva MTU-storleken; användbart i kombination med -DontFragment och -BufferSize.
-TcpPortförsöker öppna en TCP-anslutning till den port som anges på destinationen; returnerar $true eller $false (och med -Detailed in 7.4, TcpPortStatus-objekt med latenser och information per försök).
-Räknaantal ekoförfrågningar; som standard 4 i ping och även giltig med TcpPort.
-Dröjsmålsekunder mellan försök; användbart för överbelastning eller långvarig testning.
-Buffertstorleknyttolastbyte; 32 som standard; sätts bredvid -DontFragment för MTU-testning.
-Fragmentera inte: sätter flaggan för ingen fragmentering på IP; nyckel till Path MTU Discovery.
-IPv4 / -IPv6: tvinga fram användning av IP-protokollet; användbart på värdar med dubbla stackar eller när det finns problem med upplösningen.
-MaxHopsmaximalt antal tillåtna hopp; 128 som standard på Windows 10+.
-LösDestinationförsöker matcha destinations-DNS-namnet och, bredvid -Traceroute, även mellanvärdar om möjligt.
-Källa: leveransens ursprung (utrustning) i förekommande fall; som standard den lokala, användbar i scenarier med flera ursprung.
-Tyst: undertrycker fel och returnerar booleska värden efter destination; $true om minst ett ping anländer, $false om alla misslyckas.
-TimeoutSekundermaximal väntetid för svar; 5 sekunder som standardtillgänglig sedan PowerShell 6.
-Detaljeradi TCP-tester (-TcpPort), returnerar TcpPortStatus med Id, Riktning, Latens, Ansluten och Status; inbyggt i PowerShell 7.4.
Klassiska parametrar och alternativ (Windows PowerShell 5.1)
-Datornamn: destinationer att testa; obligatoriskt och är inte beroende av PowerShell-fjärrstyrning.
-SomJobbkör cmdlet:en i bakgrunden; returnerar ett återställningsbart jobbobjekt med Receive-Job för att inte blockera sessionen.
-DcomAutentiseringCOM-autentiseringsnivå som används med WMI; accepterade värden Standard, Ingen, Anslut, Ring, Paket, Paketintegritet, Paketsekretess, Oförändrad (standardpaket).
-ImitationWMI-imitationsnivå; värden Standard, Anonym, Identifiera, Utge sig för, Delegera (som standard Utge sig för att vara).
-Protokoll: protokoll för WMI; DCOM eller WSMan enligt konfiguration.
-WsmanAutentiseringAutentiseringsmekanism vid användning av WSMan; stöder Standard, Grundläggande, Förhandla, CredSSP, Digest, Kerberos.
-Gasbegränsningmaximalt antal samtidiga anslutningar för kommandot; som standard 32.
-TidAttLeva (TTL)maximalt antal omsändningar innan paketet kasseras; 128 som standard på Windows (även kallat TTL).
-Källa och -Autentiseringsuppgifter: att skicka pings från andra källor med lämpliga inloggningsuppgifter, särskilt användbart för att jämföra latens från olika platser.
Praktiska exempel med PowerShell 6/7
Grundläggande IPv4-ping till en specifik server och analys av PingStatus-utdata:
Test-Connection -TargetName Server01 -IPv4
Ping flera destinationer i ett enda kommando med en rad namn:
Test-Connection -TargetName Server01, Server02, Server12
Anpassa antal, fördröjning, hopp och buffertstorlek när nätverket är laddat:
Test-Connection -TargetName Server01 -Count 3 -Delay 2 -MaxHops 255 -BufferSize 256
Kör som bakgrundsjobb Läser destinationer från en fil och väntar på resultat:
$job = Start-Job -ScriptBlock { Test-Connection -TargetName (Get-Content -Path 'Servers.txt') }
$results = Receive-Job $job -Wait
Skapa endast en PSSession om det finns anslutning åtminstone i ett eko:
if (Test-Connection -TargetName Server01 -Quiet) {
New-PSSession -ComputerName Server01
}
Upptäck rutten med traceroute och returnera TraceStatus per hopp:
Test-Connection -TargetName www.google.com -Traceroute
Detaljerat TCP-test (PowerShell 7.4) för en typisk TLS-port:
Test-Connection bing.com -TcpPort 443 -Detailed -Count 4
Praktiska exempel med Windows PowerShell 5.1
Enkel ping till en fjärrdator med Win32_PingStatus-utdata:
Test-Connection -ComputerName Server01
Ping flera servrar från hemmalaget:
Test-Connection -ComputerName Server01, Server02, Server12
Pinga en destination från flera källor med inloggningsuppgifter för att jämföra latenser:
Test-Connection -Source Server02, Server12, localhost -ComputerName Server01 -Credential (Get-Credential)
Anpassa intentioner, TTL, buffert och samtidighet i omfattande nätverk:
Test-Connection -ComputerName Server01 -Count 3 -Delay 2 -TTL 255 -BufferSize 256 -ThrottleLimit 32
Kör som bakgrundsjobb och samla in resultaten när du är klar:
$job = Test-Connection -ComputerName (Get-Content 'Servers.txt') -AsJob
if ($job.JobStateInfo.State -ne 'Running') {
$results = Receive-Job $job
}
Ping med inloggningsuppgifter och personifiering justera nivån av personifiering:
Test-Connection Server55 -Credential (Get-Credential) -Impersonation Identify
Använd boolesk utdata för snabba beslut i skript:
if (Test-Connection -ComputerName Server01 -Quiet) { New-PSSession Server01 }
Cmdlet-ingångar och -utgångar
biljetterI den moderna versionen skickas inte objekt direkt till cmdlet:en; Standardparametervärden accepteras (TargetName stöder piping efter värde eller egenskapsnamn.)
Utdata i PowerShell 6/7:
- Microsoft.PowerShell.Commands.TestConnectionCommand+PingStatusett objekt per ICMP-svar.
- Microsoft.PowerShell.Commands.TestConnectionCommand+TraceStatusett objekt per hopp med -Traceroute.
- Microsoft.PowerShell.Commands.TestConnectionCommand+PingMtuStatusmed -MtuSize för sökvägen MTU.
- Booleanmed -Quiet eller -TcpPort (arrayer om det finns flera destinationer).
- Microsoft.PowerShell.Commands.TestConnectionCommand+TcpPortStatusmed -Detaljerad för TCP i 7.4.
Utdata i Windows PowerShell 5.1:
- ManagementObject (Win32_PingStatus): för varje eko.
- Boolean: när du använder -Tyst.
- Systemhantering.Automation.Fjärrstyrningsjobb: om körs med -AsJob.
Anteckningar och funktioner för olika plattformar
Linux och behörigheternär man använder -BufferSize annat än 32 eller kombinationer med -MtuSize som ändrar standardstorleken, sudo kan krävasI så fall genererar cmdlet:en ett undantag som indikerar att behörigheter krävs.
Tyst och felhantering: -Tyst returnerar booleska värden och tar bort fel; kom ihåg att med flera destinationer är utgången en matris av värden i utvärderingsordning.
Upprepa kontra räkna: blanda inte -Upprepa med -Antal i ping; -Upprepa ignorerar ytterligare destinationer och itererar bara över den förstaFör flera destinationer med upprepning, anropa cmdleten för var och en.
Lös upp namn-ResolveDestination lägger till DNS-upplösning för destinationen, och med -Traceroute, försöka lösa varje hopp; användbart för att kartlägga mellanliggande enheter.
kompatibilitet: ja du skript borde fungera på Windows PowerShell 5.1 och PowerShell 6/7, identifierar versionen och använder -ComputerName eller -TargetName i enlighet därmed, och justerar tolkningen av utdata.
Test-Connection och dess relation till Test-NetConnection
Före Test-NetConnection kombinerades verktyg som ping, tracert, nslookup eller telnet för att diagnostisera anslutning. Med PowerShell v4 kom Test-NetConnection, vilket centraliserar ICMP- och TCP-tester och spårar till och med rutter med en enda cmdlet.
Trots det, Test-Connection täcker djupgående scenarier med mer specifika objekt för ICMP-, MTU-, traceroute- och moderna TCP-tester. Du kan komplettera det med Test-NetConnection när du behöver en snabb allt-i-ett-kontroll.
Exempel på testnätanslutningar att jämföra beteenden:
# 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
I scenarier där telnet inte längre finns som standard, Dessa PowerShell-cmdlets förenklar kontrollen av TCP-portar och ICMP-anslutning, och lägger till användbara metadata såsom utdatagränssnitt eller källadress.
Passionerad författare om bytesvärlden och tekniken i allmänhet. Jag älskar att dela med mig av min kunskap genom att skriva, och det är vad jag kommer att göra i den här bloggen, visa dig alla de mest intressanta sakerna om prylar, mjukvara, hårdvara, tekniska trender och mer. Mitt mål är att hjälpa dig att navigera i den digitala världen på ett enkelt och underhållande sätt.