W Windows 8 możesz użyć Test-NetConnection
uzyskać podobną funkcjonalność do klasyki ping
i tracert
narzędzia, a także sprawdzić stan portu systemu zdalnego. Niestety, opcje dla Test-NetConnection
są stosunkowo ograniczone w porównaniu z narzędziami, które zastępują. Tak więc, to samo nie będzie dobrze służyć do ciągłego monitorowania. Na szczęście PowerShell jest bardzo skryptowalny. Oto jeden liner (technicznie kilka linii skondensowanych do jednej), który będzie nieustannie testować dostępność portu i drukować na konsoli wyniki oznaczone czasem.
cls;1..8|%{""};for(){$x=tnc 192.168.0.1 -Po 80;"$(Get-Date) $($x.TcpTestSucceeded)"}
Oto zrzut ekranu skryptu w akcji. Możesz zobaczyć tutaj, dlaczego zacząłem skrypt cls;1..8|%{""};
nawet jeśli to technicznie nie jest potrzebne. Ponadto możesz to zobaczyć Test-NetConnection
uruchomienie za każdym razem zajmuje około 9-10 sekund, nawet gdy jesteś w sieci LAN.
Oto skomentowana, wieloliniowa wersja skryptu. To ten sam kod, po prostu rozłożony wraz z instrukcją.
# CLS is a built-in alias for Clear-Host.
# This clears any pre-existing output from the console so we can start ours from the top.
cls;
# This takes the integers from 1 through 8 and pipes them to a ForEach-Object loop.
# (The percent symbol, "%", 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)"
}
Nie jest tak czysty i prosty, jak bym chciał, ale to działa. Zdecydowanie nie zapamiętuję go w najbliższym czasie, ale gdy zrozumiesz komendy i podstawy PowerShell, które sprawiają, że działa, to jest to stosunkowo łatwo przebudować w locie.
Dla czegoś nieco prostszego, który po prostu sprawdza port i zatrzymuje się, aby poinformować Cię, kiedy jest już gotowy, możesz użyć tego:
while((tnc 192.168.0.1 -Po 80).TcpTestSucceeded -eq $False){};Get-Date
W tym przypadku używamy pętli while, aby kontynuować testowanie portu tak długo, jak jest wyłączony. Po pomyślnym nawiązaniu połączenia z portem pętla while kończy działanie, a Get-Date zgłosi czas. Zobaczysz również komunikaty ostrzegawcze z Test-NetConnection
tak długo, jak działa pętla - dzieje się tak, ponieważ wykorzystuje kanał wyjściowy Ostrzeżenie do raportowania, gdy połączenie ping lub port nie powiedzie się, zanim faktycznie wyśle pełne wyniki jako normalne wyjście.
Niestety, Test-NetConnection
nie jest dostępny w systemach, w których działa mniej niż Windows 8. Tak więc brakuje również kompatybilności, na którą liczyłem. Mimo to jest to lepsze niż nic na razie.