Saturday, October 22, 2011

Запускаем сервисы, удаленно

Недавно понадобилось перезапустить на удаленных машинах NT-сервисы (NT-services). Сразу вопрос - почему это не делать локально?
- Сложно администрировать. Вам надо что-то настроить на каждой машине (их было 30).
- Если поменяется удаленный компьютер, то надо соответствующим образом настраивать новый компьютер (снова трата времени)
- Мне в принципе надо было останавливать сервис (и потом запускать его) в определенных случаях.

Решение достаточно простое. В винде есть утилита, которая работать играть с сервисами - sc.exe (Service Control).

Синтаксис
 SC [\\server] [command] [service_name] [Options]

\\server - путь к машине, где находится сервис. Для локальных сервисов параметр пропускаем.
command - команда. Их там много, ask g00gle. Нас интересует start и stop.
service_name - название сервиса. NB! Название сервиса, это не то что показано в Services.msc (Это display_name)
Для получения имя сервиса, используйте параметр query или queryex

Смотрим Service_name - имя сервиса (то что нам надо)

Ну и далее sc.exe stop "wlankeeper"
Ну или так sc.exe \\10.1.1.112 stop "wlankeeper"
Получаем ответ
SERVICE_NAME: wlankeeper
TYPE : 110 WIN32_OWN_PROCESS (interactive)
STATE : 3 STOP_PENDING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN))
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0

Теперь о правах. У вас должны быть соответствующие привилегии для управления сервисами (удаленный комп в домейне, sc.exe запущен с соответствующими правами и под правильным пользователем) .

Если прав нет, ничего не случится. Вам об этом конечно сообщат:
FAILED 5: Access is denied
Кстати, может так получится, что права на остановку сервиса у вас есть, а на запуск нет (что на одной машине и произошло) :)

No comments:

Post a Comment