Podobne pytanie: Jak sprawdzić, czy usługa Pulpit zdalny jest uruchomiona i dostępna?
Szukałem odpowiedzi na problem „Jak pingować określony port?” i znalazłem kilka rozwiązań. Nawet przed przeszukiwaniem zdawałem sobie sprawę, że „ping” nie jest nawet zdalnym narzędziem do pracy, ale jest najbliższym narzędziem pod względem funkcjonalności do tego, co chcę zrobić.
Większość rozwiązań problemu „pinguj port” opiera się na nmapie lub innych nie-rodzimych narzędziach i generalnie są one tak napisane, że są użyteczne tylko do jednorazowego sprawdzenia. Chcę stale monitorować port na zdalnym hoście, aby móc być powiadamiany o dostępności usługi na tym porcie. Podobnie jak w przypadku powyższego pytania, najczęstszym przypadkiem użycia, jaki mam w tym przypadku, jest sprawdzenie dostępności komputera w poszukiwaniu RDP po ponownym uruchomieniu komputera (samo ping nie jest wiarygodnym wskaźnikiem tego, czy system zakończył uruchamianie i uruchamianie wszystkich usług).
Kluczową różnicą jest to, że chcę to zrobić za pomocą narzędzi, które są rodzime dla systemu Windows. Nigdy nie wiem, kiedy i gdzie będzie, że będę chciał monitorować zdalny system pod kątem dostępności usług, a nie zawsze moje przenośne narzędzia są poręczne, kiedy to się dzieje, więc byłoby idealnie, gdyby istniało stosunkowo prosty, jednopłaszczyznowy przy użyciu wbudowanych narzędzi CMD lub PowerShell, które mogą wykonać zadanie.
Mam kilka systemów z Windows 8 lub Server 2012 i PowerShell 4.0, ale rozwiązania, które są kompatybilne wstecz z Windows 7 i Server 2008, z PowerShell 2.0, byłyby idealne. (Uwaga: wersje PowerShell są podane tylko w celach informacyjnych - każda komenda lub krótki skrypt, który będzie działał na świeżej instalacji danych wersji systemu Windows, bez potrzeby dodatkowego oprogramowania, zrobi to.
źródło
W Windows 8 możesz użyć
Test-NetConnection
uzyskać podobną funkcjonalność do klasykiping
itracert
narzędzia, a także sprawdzić stan portu systemu zdalnego. Niestety, opcje dlaTest-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.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ą.
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:
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.źródło