Удаленное управление процессами и службами

Иногда возникает потребность в удаленном управлении процессами и службами: например отправили сервер в ребут для установки обновлений через RDP, а он не выключается, но по RDP уже не доступен. Конкретно эту ситуацию, произошедшую на днях, мы и рассмотрим.

Первое — я убедился, что зайти на сервер по RDP невозможно, а альтернативных путей входа в GUI на тот момент не было. К счастью, под рукой была командная строка, команды sc, tasklist и taskkill, а также открытые порты на фаерволе. Что касается портов — используемым командам требуется стандартный, для RPC endpoint mapper’а, 135 TCP порт, плюс динамический диапозон для самого RPC (49152-65535 TCP). Если такая конфигурация недопустима с точки зрения безопасности — возможна настройка управления с помощью WinRM.
Попробовав принудительно дернуть сервер с помощью «shutdown /r /t 0 /f», я получил в ответ ошибку «A system shutdown is in progress«. Для выяснения причин этого явления, пригодилась команда, которая позволяет просмотреть списки запущенных сервисов, в том числе и на удаленной машине.

sc \\имя_сервера query type= service

Беглый осмотр выявил виновника неработающей перезагрузки: им оказалась служба TrustedInstaller висящая со статусом STOPPING, уже в течение 30 минут.
Для ее убиения необходимо было вначале выяснить, под каким процессом она крутится и найти его PID, в чем мне помогла вторая команда:

tasklist /S имя_сервера /SVC

Данная команда позволяет посмотреть процессы и службы, а также их PID, что мне и было нужно. В выводе команды был найден тот самый PID 10456, под процессом которого работала служба TrustedInstaller:

trusted installer

Далее дело было за малым: убить процесс удалось с помощью команды:

taskkill /S имя_сервера /PID 10456

После ее выполнения сервер трагично вздохнул и все же начал запланированную перезагрузку. Ну а у меня появился новый опыт в работе с командной строкой и бесценный опыт траблшутинга без GUI!

Оставить комментарий