Подобный вопрос: Как определить, запущена ли служба удаленного рабочего стола и доступна ли она?
Я искал ответы на проблему "Как мне проверить связь с конкретным портом?" и нашел несколько решений. Еще до поиска я хорошо знал, что «пинг» даже удаленно не является подходящим инструментом для работы, но это самый близкий инструмент с точки зрения функциональности к тому, что я ищу.
Большинство решений проблемы «ping a port» основаны на nmap или других не собственных инструментах, и, как правило, они написаны так, что они полезны только для одноразовой проверки. То, что я хочу сделать, - это иметь возможность непрерывно контролировать порт на удаленном хосте, чтобы я мог получать уведомления о доступности службы на этом порту. Как и в случае с приведенным выше вопросом, наиболее распространенный вариант использования, который у меня есть для этого, - это проверка компьютера на наличие RDP после перезагрузки (один только пинг не является надежным индикатором того, завершена ли загрузка системы и запущены ли все службы).
Ключевое отличие здесь в том, что я собираюсь сделать это с помощью инструментов, которые являются родными для Windows. Я никогда не знаю, когда и где будет, что я захочу контролировать удаленную систему на предмет доступности услуг, и у меня не всегда под рукой есть мои портативные инструменты, когда это происходит, поэтому было бы идеально, если бы простой однострочник с использованием встроенных утилит CMD или PowerShell, которые могут сделать эту работу.
У меня есть некоторые системы с Windows 8 или Server 2012 и PowerShell 4.0, но решения, обратно совместимые с Windows 7 и Server 2008 с PowerShell 2.0, были бы идеальными. (Примечание: версии PowerShell приведены только для справки - подойдет любая команда или краткий сценарий, который будет работать при новой установке указанных версий Windows без необходимости в дополнительном программном обеспечении.)
источник
В Windows 8 вы можете использовать,
Test-NetConnection
чтобы получить функциональность, аналогичную классическойping
иtracert
инструментам, а также проверить состояние порта удаленной системы. К сожалению, варианты дляTest-NetConnection
относительно ограничены по сравнению с инструментами, которые он заменяет. Таким образом, одно это не будет хорошо служить для непрерывного монитора. К счастью, PowerShell очень хорошо подходит для сценариев. Вот одна строка (технически, несколько строк сведены в одну), которая будет постоянно проверять доступность порта и выводить результаты с метками времени на консоль.Вот скриншот скрипта в действии. Здесь вы можете увидеть, почему я запустил скрипт,
cls;1..8|%{""};
хотя это технически не нужно. Кроме того, вы можете видеть, чтоTest-NetConnection
каждый раз для запуска требуется около 9-10 секунд, даже если вы подключены к локальной сети.Вот прокомментированная, многострочная версия скрипта. Это тот же код, только разложенный с включенным пошаговым руководством.
Это не так чисто и просто, как хотелось бы, но это делает работу. Я определенно не ожидаю, что запомню его в ближайшее время, но как только вы поймете команды и основы PowerShell, которые заставляют его работать, его сравнительно легко восстановить на лету.
Для чего-то более простого, который просто продолжает проверять порт и останавливается, чтобы сообщить вам, когда он работает, вы можете использовать это:
Здесь мы используем цикл while для повторного тестирования порта, пока он не работает. После успешного подключения к порту цикл while завершается, и Get-Date сообщает время. Вы также увидите некоторые предупреждающие сообщения в
Test-NetConnection
течение всего времени работы цикла - это потому, что он использует выходной канал Warning, чтобы сообщить о сбое соединения ping или порта, прежде чем он фактически отправит полные результаты как обычный вывод.К сожалению,
Test-NetConnection
недоступно в системах, работающих под управлением Windows 8. Поэтому здесь также отсутствует перекрестная совместимость, на которую я надеялся. Тем не менее, сейчас это лучше, чем ничего.источник