Você pode fazer algo assim no PowerShell, que, como o cmdlet Test-Connection
, é um wrapper para ping.
param(
[string]$Name = "8.8.8.8",
[int]$count = 4
)
[bool]$Success = $false
For ($i=0; $i -le $count; $i++) {
$result = Test-Connection -ComputerName $Name -Count 1 -ErrorAction SilentlyContinue
if ($result.StatusCode -eq 0)
{
$Success = $true
$result
break;
}
}
Write-Output "Successful connection: $Success"
Test-Connection sempre usa um único ping, e eu coloco um loop em torno dele, assim que um ping é bem-sucedido, estamos quebrando o loop, idealmente após o primeiro ping, caso contrário tente x vezes, conforme especificado em $ count.
O PowerShell não está iniciando o executável ping.exe, ele usa as APIs de rede abaixo, portanto, ele pode executar um pouco melhor sob carga.