«Умный» перезапуск службы Windows из командного файла

Ответить


Этот вопрос предназначен для предотвращения автоматической отправки форм спам-ботами.
Смайлики
:| :) :wink: :D :lol: :( :cry: 8) :o :oops: :? :x :P :evil: :twisted: :roll: :!: :?: :idea: :arrow: :mrgreen:
Ещё смайлики…

Markdown is OFF

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ВКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: «Умный» перезапуск службы Windows из командного файла

Решение с использованием PowerShell

UncleFather » 17 фев 2014 18:26, Пн

Решение с использованием PowerShell

Код: Выделить всё

Stop-Service -Name "Spooler"
Sleep 30
Start-Service -Name "Spooler"
$s=get-service -Name "Spooler" 
While ($s.Status -ne "Running")
{
Sleep 5
Start-Service -Name "Spooler"
$s=get-service -Name "Spooler"
}

«Умный» перезапуск службы Windows из командного файла

UncleFather » 17 фев 2014 17:51, Пн

Задача:

Необходимо перезапустить из командного (bat) файла какую-либо службу Windows, причем необходимо убедиться, что указанная служба действительно запустилась.

Решение:

Приведу два примера. Они по-сути одинаковые, только проверка состояния службы Windows немного отличается.

  • Вариант 1:

    Код: Выделить всё

    @Echo Off
    Net Stop Spooler
    PING -n 1 -w 10000 192.168.253.253 > nul
    :ReStartService
    Net Start Spooler
    net start | find /i "Диспетчер очереди печати">NUL
    if %errorlevel%==1 echo GoTo ReStartService
    EXIT
  • Вариант 2:

    Код: Выделить всё

    @Echo Off
    Net Stop Spooler
    PING -n 1 -w 10000 192.168.253.253 > nul
    :ReStartService
    Net Start Spooler
    SC query Spooler | find /i "1  STOPPED" > nul
    if %errorlevel%==0 echo GoTo ReStartService
    EXIT

В обоих вариантах алгоритм такой:

  1. Завершаем службу

  2. Делаем паузу 10 секунд командой PING до несуществующего хоста

  3. Запускаем службу

  4. Выполняем проверку

  5. Если служба не запущена, возвращаемся к метке «ReStartService», иначе - завершаем работу командного файла

Различие методов - в способе проверки состояния службы. В первом методе мы просматриваем весь список запущенных служб на предмет наличия в нем псевдонима нашей службы (например, у службы «Spooler» псевдоним в русскоязычной локализации Windows будет «Диспетчер очереди печати»).

Во втором методе мы ищем в тексте, выдаваемом командой «SC query» строку «1 STOPPED», которая показывает состояние службы и в данном случае означает, что служба остановлена. Более того, строка «1 STOPPED» во всех локализациях отображается одинаково, поэтому второй метод является более универсальным.


Вернуться к началу