Teste de Conexão do PowerShell: O Teste de Ping Moderno

O cmdlet de hoje é PowerShell Test-Connection. Test-Connection é um cmdlet que, não surpreendentemente, testa sua conexão de rede. Pense no Test-Connection como a implementação PowerShell do utilitário ping popular. Mesmo que ambos tenham ICMP em comum, você verá que os dois métodos são um pouco diferentes internamente.

Usar este cmdlet é simples. Na forma mais básica, basta especificar um parâmetro ComputerName e ele enviará quatro solicitações ICMP para o host de destino.

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

Esta saída se parece com o ping.exe e, superficialmente, é, mas o PowerShell test-connection emite a solicitação ICMP de forma um pouco diferente. Ao contrário do ping.exe, Test-Connection está usando a classe WMI do computador local Win32_PingStatus para enviar a solicitação ICMP. Usar o repositório WMI local significa que você deve ter certeza de que seu repositório WMI local está saudável, caso contrário, o Test-Connection não funcionará.

Saída de objeto do PowerShell Test-Connection

Também, como acontece com a beleza do PowerShell, este cmdlet não retorna apenas o que aparece imediatamente no console. Vemos objetos ricos dos quais podemos obter mais informações.

Se eu atribuir a saída a uma variável e verificar as propriedades, você pode ver que reuni muitas informações úteis.

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 você estiver testando hosts internos, Test-Connection usará DCOM para autenticar nos hosts remotos. Por padrão, ele usará Autenticação DCOM em nível de pacote, mas o tipo de autenticação sempre pode ser alterado com o parâmetro DcomAuthentication.

Usando Trabalhos em Segundo Plano

Este cmdlet também pode ser executado como um trabalho em segundo plano. Trabalhos em segundo plano são úteis se você tiver muitos computadores remotos para pingar e, em vez de esperar para sempre por aqueles que eventualmente expirarão, basta enviá-los para um trabalho em segundo plano.

De acordo com a ajuda do PowerShell para testes de conexão do Powershell, diz que o acesso remoto do PowerShell deve estar habilitado em ambos os computadores local e remoto, mas isso não é verdade. Como você pode ver abaixo, estou testando google.com, e o comando ainda funciona muito bem.

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

Mantendo Simples

Finalmente, se você estiver apenas procurando por uma resposta binária sim/não para saber se um computador está respondendo ou não, você sempre pode usar o parâmetro Quiet. Uma sequência comum que sempre uso para ver rapidamente se um servidor está online ou não é usar Quiet e Count de 1 para forçar Test-Connection a enviar uma única solicitação ICMP.

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

É isso para o nosso cmdlet do dia! Cobrimos a maioria do que é possível com o teste de conexão do PowerShell, mas, como sempre, confira o conteúdo de ajuda do PowerShell ou vá para a documentação da Microsoft para uma explicação completa.

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