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

Все об администрировании рабочих станций Windows 95/98/NT/2000/XP/7/8. То, чего не найдешь в бескрайних просторах Интернета. Решения тех проблем, которые не решаются типовыми ответами, которые можно получить в техподдержке Майкрософта - а именно: переустановить продукт или купить какой-ть другой лицензионный диск.


Модератор: UncleFather

Аватара пользователя
UncleFather
Site Admin
Сообщения: 1505
Зарегистрирован: 17 авг 2004 16:20, Вт
Контактная информация:

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

Сообщение UncleFather »

Задача:

Необходимо перезапустить из командного (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» во всех локализациях отображается одинаково, поэтому второй метод является более универсальным.


Alexander A. Manaeff©

Понравилась статья? Будем крайне признательны за репосты в соцсетях! Материально поддержать проект можно здесь

Мои странички:
ВКонтакте
Одноклассники
Youtube
Facebook
Instagram

Изображение
Изображение
Изображение
Изображение

Аватара пользователя
UncleFather
Site Admin
Сообщения: 1505
Зарегистрирован: 17 авг 2004 16:20, Вт
Контактная информация:

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

Сообщение UncleFather »

Решение с использованием 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"
}

Alexander A. Manaeff©

Понравилась статья? Будем крайне признательны за репосты в соцсетях! Материально поддержать проект можно здесь

Мои странички:
ВКонтакте
Одноклассники
Youtube
Facebook
Instagram

Изображение
Изображение
Изображение
Изображение

Ответить