Скрипт для перезапуска службы windows

Как перезапустить службу Windows из скрипта?

У меня есть пакетный скрипт, который выглядит так:

он выдает ошибку, потому что sc не ожидает остановки службы. Как перезапустить сервис с помощью скрипта?

Постер хочет убедиться, что служба остановлена, прежде чем пытаться перезапустить ее. Вы можете использовать цикл вывода «sc query», выполняя что-то вроде этого:

Может быть, чего-то не хватает, но я все это время использую:

нет стоп «myservice»
нет старт «myservice»

нет остановки «myservice» && net start «myservice»

Умер просто с powershell:

Еще лучше, используя отображаемые имена:

Get-Help Restart-Service для большего

Если это чисто для перезапуска службы, вы можете использовать

Однако, если вы хотите получить доступ к опциям sc, вы можете использовать команду start / wait

эта техника является более общим решением, которое может быть применено к любой команде.

Чтобы выполнить тихий перезапуск какой-либо службы, которая запрашивает подтверждение об остановке (например, в качестве службы сервера), вы можете добавить / y в конец команды остановки.

Это было бы полезно для автоматического выполнения скрипта.

Если вы хотите перезапустить отказавший сервис, вам не нужно запускать скрипт. В оснастке MMC сервисов щелкните правой кнопкой мыши сервис, выберите свойства, перейдите на вкладку восстановления. Здесь вы можете указать, какие действия вы хотите предпринять в случае остановки сервиса. Существует много гибкости. Вам понадобится сценарий, если вы пытаетесь остановить службу, что-то сделать, затем запустить сценарий, предварять командный файл net stop «myserviceshortname» и завершить net start «myserviceshortname»

В vbscipt немного больше кода для остановки службы и ее зависимых элементов:

Вот запуск службы и все, от чего это зависит (это должно быть знакомо)

Скрипт для перезапуска службы windows

Сообщения: 109
Благодарности: 0

А как у Вас обстоит дело с возможностью останова службы «TermService»? Каким образом у Вас получалось:

Сообщения: 26992
Благодарности: 7877

Последний раз редактировалось Iska, 18-10-2011 в 16:45 .

Это сообщение посчитали полезным следующие участники:

» width=»100%» style=»BORDER-RIGHT: #719bd9 1px solid; BORDER-LEFT: #719bd9 1px solid; BORDER-BOTTOM: #719bd9 1px solid» cellpadding=»6″ cellspacing=»0″ border=»0″>

Сообщения: 26992
Благодарности: 7877

goodguy, я обновил свой предыдущий пост.

Скрипт для перезапуска службы windows

Сообщения: 109
Благодарности: 0

А как у Вас обстоит дело с возможностью останова службы «TermService»? Каким образом у Вас получалось:

Сообщения: 26992
Благодарности: 7877

Последний раз редактировалось Iska, 18-10-2011 в 16:45 .

Это сообщение посчитали полезным следующие участники:

» width=»100%» style=»BORDER-RIGHT: #719bd9 1px solid; BORDER-LEFT: #719bd9 1px solid; BORDER-BOTTOM: #719bd9 1px solid» cellpadding=»6″ cellspacing=»0″ border=»0″>

Сообщения: 26992
Благодарности: 7877

goodguy, я обновил свой предыдущий пост.

Пишем менеджер служб Windows средствами командной строки и Windows Script Host

В этой статье мы рассмотрим утилиты для возобновления, запуска, перезапуска и остановки служб Windows из командной строки и средствами WMI с использованием возможностей сервера Windows Script Host. Скажу сразу, статья будет объемная и интересная, так что запаситесь пивом и чипсами. Что именно мы изучим: утилиты командной строки, которые позволяют производить запуск службы через командную строку, возобновления, остановку и перезапуск служб Windows; напишем два примера (один на языке jscript, а другой на языке vbscript) – это будет своеобразный менеджер служб, в нем будет выводиться список всех сервисов в формате колонок (в каждой колонке будут отображаться параметры сервиса, например, имя, тип, тип запуска и так далее). Ссылку на архив с примерами я дам в конце, что бы вы не мучились копируя код. Как он будет выглядеть, вы можете увидеть на картинках ниже:

Ладно, давайте для начала рассмотрим азы, а именно, какие утилиты командной строки применяются для управления службами:

Утилита sc (я ее уже рассматривал частично в статье Получение списка служб средствами командной строки и сервера Windows Script Host), из нее нам понадобятся только некоторые команды, а именно:

Sc start Имя_Службы –запуск службы из командной строки
Sc pause Имя_Службы – приостановка службы Windows из командной строки
Sc continue Имя_Службы – возобновление службы из командной строки
Sc stop Имя_Службы – остановка службы из командной строки

Параметр Имя_Службы определяет имя сервиса. Так же стоит учитывать, что у сервиса могут быть зависимые от него службы.

Однако, тут есть один подводный камень – тип запуска, так если служба полностью остановлена, то вам сначала нужно изменить тип запуска, а уже потом запускать службу Windows через командную строку. Для изменения типа запуска, можно использовать следующую команду:

Sc config Имя_Службы start= флаг

Обязательно после знака равенства ставьте пробел, иначе произойдет ошибка. Флаг может принимать три значения:

Auto – автоматический запуск при старте системы
Demand – ручной запуск
Disabled – отключение

Что бы запустить или остановить службу из командной строки, есть еще две утилиты:

net stop Имя_Службы
net start Имя_Службы

Скажу честно, в свое время на старом сайте я уже писал подобную статью, вник во все подробности данной темы, так сказать, но, материалы пришлось удалить, так как тот ресурс я закинул, а по правилам поисковой системы Яндекс не желательно, что бы два сайта одно владельца конкурировали в выдаче. Да и сама тема довольно скучная – так, для любителя. Поэтому, основной акцент данной публикации будет сделан на использование WMI для управления сервисами Windows и компонент WSO для реализации графического интерфейса. Ну а сейчас, еще немного лирики…

Не забывайте, что управлять службами Windows можно из Панели Управления, папка Администрирование, ярлык Службы.

Вообще, данную публикацию я бы физически не смог написать, если бы не два момента:

  1. Как только я начинал вести блог, то для реализации оконного интерфейса использовал программу LangMF, о нее довольно широкие возможности, но, как только я познакомился с компонентом WSO, то она мне больше не понадобилась.
  2. Как то мне взбрело в голову написать файловый менеджер с помощью языка jscript, с последующим переводом кода в область vbscript. Я накинул начальные штрихи, но … что то у меня не получалось, за советом я пошел на форум, и там мне все грамотно пояснили, и я понял … что ничего не понял. После того момента мне пришлось многое переучить и переосмыслить, как результат, я удалил практически все статьи на блоге и написал новые.

Хорошо, теперь настало время приступить к программированию, я сначала покажу пример на языке jscript. Далее дам его описанию и информативные картинки, ну а потом уже пример на языке vbscript.

В сценарии мы создали два массива def_column и data_array , давайте рассмотрим их:

def_columns – данный массив хранит в себе объекты, которые будут отвечать за обработку каждой колонки. Реализация массива объектов для языка vbscript (прочитайте “Урок 9 по VBScript: Массивы”) и jscript (прочитайте “ Урок 5 по JScript: Работа с массивами ”) разная, поэтому давайте разберем все по отдельности:

Реализация на jscript

def_columns = [<бъект_1>,<объект_2>,…,<объект_n>] – как видим, через запятую в фигурных скобках мы должны указать объекты, но не имена, а весь код. Каждый объект содержит информацию об имени колонки, ее размер, тип данных и функцию, которая отвечает за доступ к выбранному элементу в списке.

Реализация на vbscript

def_columns = Array(объект_1, объект_2, …, объект_n) – на первый взгляд все просто, нам только нужно прописать через переменную имена объектов (классов), но есть одно но. Сперва нам пришлось создать эти классы, и так как колонок пять, то и классов должно быть пять, как создавать классы, почитайте в статье “ Урок 8 по VBScript: Объекты и классы ”. Прямо перед формированием массива мы создали ссылки на классы, иначе никак.

data_array – данный массив как и предыдущий, состоит из объектов каждый объект хранит в себе информацию о выбранной службе (имя, статус, псевдоним и так далее). Каждый раз при попытке запустить службу из командной строки, остановить службу из командной строки, поставить на паузу или возобновить, или при попытке обработать выбранную службу Windows средствами WMI, будет происходить обращение к данному массиву по индексу и получение данных из текущего объекта. В большинстве случаев нам понадобится только одно свойство Name, всего объекты хранят пять свойств (число колонок).

Сам массив является динамическим, в примере на jscript добавление данных происходит с помощью функции push. В vbscript такой возможности нет, поэтому мне пришлось сначала определить длину коллекции со службами, и уже потом с помощью ключевого слова ReDim задать длину массива.

Все функции я затрагивать не буду, так как получиться целая петиция, да и меня самого, если честно такой огромный код отпугивает. Мы рассмотрим только управляющие функции, те, которые производят запуск служб из командной строки, остановка служб через командную строку, возобновление, приостановка, перевод в автоматический режим, перевод в ручной режит и отключение службы Windows.

function ServiceRun – отвечает за запуск. В теле функции сначало происходит проверка, выбрал ли пользователь служб (то есть, нажал на элемент списка), если нет – выводится предупреждающее сообщение, иначе, происходит вызов функции ServiceDialog() , данная функция выводит диалоговое окно, если вы нажнете ОК, то произойдет процесс выполнения заданной операции над служно, если нет – ничего не произойдет. Это необходимо, иначе можно наломать дров нечаянными кликами. Далее происходит процесс работы с WMI (подробней читайте в рубрике “ Windows Management Instrumentation”). Фактически, происходит подключение класса Win32_Service с фильтром по имени выбранной службы и отправка запроса. После происходит вывод кода возврата, если он равен нолю, значит все прошло успешно, иначе, что то не так. Я не стал тут приводить все коды, можете посмотреть их на странице Майкросовт.

function ServiceStop, function ServicePause, ServiceContinue – функции, отвечающие за остановку, приостановку и возобновление сервиса Windows. Код практически тот же, что у предыдущей функции, только меняется имя метода.

А вот сейчас начинается самое забавное..

function ServiceAuto – данная функция отвечает за перевод службы в автоматический режим. Я не стал использовать функционал WMI, а решил прибегнуть к утилитам командной строки. За весь процесс отвечает следующая сточка:

WshShell.Run «cmd.exe /c sc config » & cur_service_name & » start= Auto» & » > » + temp_file,1,true

Тут происходит запуск командной строки с параметром “/c”, то есть, она автоматически завершится после выполнения команды sc config. Однако, данные будут записываться во временный файл. После выполнения команды происходит открытие файла, что бы пользователь увидел, успешной была команда или нет.

ServiceManual() и ServiceDisable() – функции перевода службы Windows в ручной режим и ее отключения, код практически тот же, меняется только команда.

Ладно, вот код на vbscript:

Смотрите, если у вас возникнут вопросы по коду, то обязательно напишите в комментариях. Я сами примеры тестировал на системе Windows XP Sp3, и как они себя поведут на другой платформе не знаю. Не забывайте, что за создание оконного интерфейса отвечает компонент WindowSystemObject. При желании вы можете поэкспериментировать над кодом так, что бы можно было не средствами WMI, а через командную строку запустить, остановить, приостановить и возобновить службы Windows. И еще, а конечно не мастер, так что возможно с точки зрения профессионала код написан коряво.

Спасибо за внимание. Автор блога Владимир Баталий

Читайте также:  Windows office 2010 переустановить
Оцените статью