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

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

Usar este cmdlet é simples. Em sua 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 parece semelhante ao ping.exe e, superficialmente, é, mas o Powershell test-connection emite a solicitação ICMP de maneira um pouco diferente. Ao contrário do ping.exe, Test-Connection está usando a classe WMI Win32_PingStatus do computador local para enviar a solicitação ICMP. Usar o repositório WMI local significa que você deve garantir que o seu repositório WMI local esteja saudável, caso contrário, o Test-Connection não funcionará.

Saída de Objeto do PowerShell Test-Connection

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

Se eu atribuir a saída a uma variável e depois verificar as propriedades, você pode ver que obtive muito mais 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 estiver testando hosts internos, Test-Connection usará DCOM para autenticar-se em hosts remotos. Por padrão, ele usará autenticação DCOM no 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 a comunicação remota do PowerShell deve estar habilitada 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 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 string comum que sempre uso para ver rapidamente se um servidor está online ou não é usar Quiet e Count de 1 para forçar o Test-Connection a enviar uma única solicitação ICMP.

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

Está feito 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á até a documentação da Microsoft para obter uma análise completa.

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