Estou tentando colorir as linhas de verde, amarelo e vermelho dentro do powershell dependendo da latência em milissegundos. Nosso fluxo de trabalho remoto determina que qualquer coisa acima de 40 ms é ruim, então quero que isso seja representado visualmente para as pessoas que executam o teste, que será encapsulado como exe para download e execução, se necessário.
- 1-19ms = Verde
- 20-39ms = Amarelo
- 40-500ms = Vermelho
- "solicitação expirou" = Vermelho
No entanto, quando tento colocar isso no ISE, parece que não está se comportando conforme o esperado. Muitas vezes, retorna apenas uma cor sólida para todas as linhas e, às vezes, perde completamente algumas linhas no teste de traceroute. Eu escolhi deliberadamente um endereço IP australiano aleatório para executar o teste, pois está muito longe e deve fornecer uma boa mistura de latência baixa a alta à medida que os saltos continuam.
Alguém pode sugerir onde posso ter errado?
$traceroute = tracert 47.74.90.56
foreach ($trace in $traceroute)
{
if ($trace -Match '[1-9] ms' )
{
write-host "$trace" -ForegroundColor green
}
elseif ($trace -Match 'request timed out' )
{
write-host "$trace" -ForegroundColor red
}
elseif ($trace -Match '[1-0][1-9] ms' )
{
write-host "$trace" -ForegroundColor green
}
elseif ($trace -Match '[2-3][0-9] ms' )
{
write-host "$trace" -ForegroundColor yellow
}
elseif ($trace -Match '[4-9][0-9] ms' )
{
write-host "$trace" -ForegroundColor red
}
elseif ($trace -Match '[1-9][0-9][0-9] ms' )
{
write-host "$trace" -ForegroundColor red
}
}
Você precisa de um espaço no início de seus padrões de regex. Caso contrário, esta linha quase sempre corresponderá:
Em versões mais recentes do powershell, esta linha apresentará erro porque
[1-0]
está na ordem inversa:Eu também recomendo usar
switch
para comparações como esta, mas apenas para facilitar a leitura:elseif ($trace -Match '[1-0][1-9] ms' )
-- [1-0] está invertido, não aceito.<1 ms
, se a saída for convertida em número inteiro e comparada como tal.