No Windows 8, você pode usar Test-NetConnection
para obter funcionalidade semelhante às ferramentas clássicas ping
e tracert
, além de verificar o status da porta de um sistema remoto. Infelizmente, as opções para Test-NetConnection
são relativamente limitadas em comparação com as ferramentas que ela substitui. Então, por si só não servirá bem para um monitor contínuo. Felizmente, o PowerShell é muito programável. Aqui está um one-liner (tecnicamente, várias linhas condensadas em um) que continuamente testará uma porta para disponibilidade e imprimirá os resultados com registro de data e hora no console.
cls;1..8|%{""};for(){$x=tnc 192.168.0.1 -Po 80;"$(Get-Date) $($x.TcpTestSucceeded)"}
Aqui está uma captura de tela do script em ação. Você pode ver aqui porque comecei o script com cls;1..8|%{""};
, embora tecnicamente não seja necessário. Além disso, você pode ver que Test-NetConnection
leva cerca de 9-10 segundos para ser executado toda vez, mesmo quando você está em uma conexão LAN.
Aquiestáumaversãocomentadadeváriaslinhasdoscript.Esteéomesmocódigo,apenasespalhecomumpassoapassoincluído.
#CLSisabuilt-inaliasforClear-Host.#Thisclearsanypre-existingoutputfromtheconsolesowecanstartoursfromthetop.cls;#Thistakestheintegersfrom1through8andpipesthemtoaForEach-Objectloop.#(Thepercentsymbol,"%", is a built-in alias for ForEach-Object.)
# Putting just a pair of double-quotes in the script block outputs a single blank line.
# Effectively, this line of script just outputs 8 blank lines.
# While Test-NetConnection runs, it puts a status display on the top 8 lines of the console.
# So, we're using this to make our output start below that level in order to be visible.
1..8|%{""};
# This begins an infinite for loop. It will run until aborted by the user.
# (e.g.: With CTRL+C)
# Note: Due to the way Test-NetConnection operates, the abort may take a few seconds to process.
for(){
# TNC is a built-in alias for Test-NetConnection.
# -Po is a shorthand for the -Port parameter name.
# PowerShell allows shortening of parameter names down to as few characters are needed to uniquely identify the parameter.
# This tests for connectivity to port 80 at 192.168.0.1 and puts the results in $x.
$x=tnc 192.168.0.1 -Po 80;
# The last step here is to output a timestamp, and the results.
# Double-quotes allow for per-processing certain elements before including them in an output string.
# Encapsulating script blocks with $(), within the double-quotes, lets us put their results directly in the output string.
# So, the first part gets the date and time for the start of the output.
# Then, with a space to separate it, the TcpTestSucceeded property of $x is retrieved and put at the end.
"$(Get-Date) $($x.TcpTestSucceeded)"
}
Não é tão limpo e simples quanto eu gostaria, mas faz o trabalho. Eu definitivamente não espero estar memorizando isso em breve, mas uma vez que você entenda os comandos e os fundamentos do PowerShell que o fazem funcionar, é relativamente fácil de re-construir em tempo real.
Para algo um pouco mais simples, isso apenas mantém a verificação da porta e para que você saiba quando ela está ativa, você pode usar isto:
while((tnc 192.168.0.1 -Po 80).TcpTestSucceeded -eq $False){};Get-Date
Aqui, estamos usando um loop while para continuar testando a porta enquanto ela estiver inativa. Depois que uma conexão com a porta for bem-sucedida, o loop while será fechado e Get-Date informará a hora. Você também verá algumas mensagens de aviso de Test-NetConnection
enquanto o loop estiver em execução - isso porque ele usa o canal de saída Aviso para relatar quando uma conexão de ping ou porta falha, antes de realmente enviar os resultados completos como saída normal. .
Infelizmente, o Test-NetConnection
não está disponível em sistemas com menos de Windows 8. Portanto, isso também carece da compatibilidade cruzada que eu esperava. Ainda assim, é melhor do que nada por enquanto.