Как проверить запущена ли служба windows

Обновлено: 05.07.2024

Я хочу написать пакетный файл, который выполняет следующие операции:

  • Проверьте, запущена ли служба
    • если он работает, закройте пакет
    • если он не работает, запустите службу

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

    запуск службы осуществляется с помощью:

    1. как я могу проверить, если служба запущена, и как сделать оператор if в batchfile?
    2. Я немного запутался. Какой аргумент я должен передать в net start? Имя службы или ее отображаемое имя?

    следующий код проверит состояние сервиса MyServiceName и запустите его, если он не запущен (блок if будет выполнен, если служба не запущена):

    объяснение того, что он делает:

    1. запрашивает свойства сервиса.
    2. ищет строку, содержащую текст "Государство"!--14-->
    3. разбивает эту строку, и вытаскивает 3-го маркера, который является одним содержащий государственные службы.
    4. проверяет результирующее состояние по строке "RUNNING"

    что касается вашего второго вопроса, аргумент, который вы хотите передать net start - это имя службы, не отображаемое имя.

    для переключения службы используйте следующее;

    NET START "распределенная транзакция Координатор "/ / NET STOP " распределен Координатор Транзакций"

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

    когда я запускаю его для своего антивируса NOD32, я получаю:

    Если бы он был остановлен, я бы получил:

    вы можете использовать это в переменной, чтобы затем определить, используете ли вы NET START или нет.

    имя службы должно быть именем службы, а не отображаемым именем.

    Это должно сделать это:

    независимая версия языка.

    Я только что нашел эту ветку и хотел бы добавить к обсуждению, если человек не хочет использовать пакетный файл для перезапуска служб. В Windows есть опция, если вы идете в службы, свойства службы, а затем восстановление. Здесь можно задать параметры сервиса. Как перезапустить службу, если служба останавливается. Кроме того, вы даже можете иметь вторую попытку сбоя сделать что-то другое, как при перезагрузке компьютера.

    Cuando se используйте Windows en Español, el código debe quedar asi (при использовании Windows на испанском языке, код):

    Reemplazar MyService с кон Эль номбре-дель-службе ке се desea procesar. Puedes ver в Эль номбре-дель-службе просмотр Лас-сайт propiedades-дель-службе. (Замените MYSERVICE именем службы, которая будет обрабатываться. Имя службы можно увидеть в свойствах службы.)

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

    для запуска службы stop

    в планировщике задач, если вы используете его на сервере, используйте это в аргументах

    - noprofile-ExecutionPolicy байпас-файл "C:\Service перезапустить Скрипты\StopService.PS1"

    проверка по запуск же на cmd, если он работает, он должен работать и на планировщике задач

    С помощью командлета Get-Service можно получить список всех установленных в системе служб, их состояние и тип запуска. Этот и другие командлеты для получения статуса и управления службами Windows впервые появился в версии Powershell 1.0. В этой статье мы разберем типовые примеры использования Get-Service для получения статуса служб на локальном или удаленных компьютерах, типе запуска служб и покажем как определять зависимости служб.

    Получить список служб, установленных на локальном или удаленном компьютере можно с помощью командлета Get-Service. Команда Get-Service без параметров возвращает список всех служб на локальной системе.

    Данная команда выведет список всех служб и их статус (запущена или остановлена) и отображаемое имя (Display Name).

    проверка состояния служб с помощью powershell - Get-Service

    Если вам нужно вывести только запушенные службы, воспользуемся такой командой:

    Оператор конвейера (|) передает результаты командлету Where-Object, который отбирает только те службы, для которых параметр Status имеет значение Running. В том случае, если нужно вывести только остановленные службы, укажите значение Stopped.

    powershell: получаем список запущенных служб в системе

    Получить все свойства объекта службы можно с помощью командлета Get-Member.

    Как вы видите, данный объект имеет тип (Typename) System.ServiceProcess.ServiceController. На скриншоте выведены все доступные свойства и методы объектов служб в системе (большинство из них не используются при отображении по умолчанию).

    get-service | get-member

    Чтобы вывести определенные свойства службы, нужно воспользоваться возможностями выбора свойств объектов с помощью командлета Select. Например, нам нужно вывести имя, статус и доступные возможности службы Windows Update:

    get-service wuauserv | select Displayname,Status,ServiceName,Can*

    DisplayName : Windows Update
    Status : Stopped
    CanPauseAndContinue : False
    CanShutdown : False
    CanStop : False

    получить статус службы из powershell

    К примеру, чтобы получить тип запуска служб Windows, выполните команду (работает в PowerShel 5.1):

    Get-Service | select -property name,starttype

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

    Так можно отсортировать список служб компьютера в порядке убывания по значению свойства Status. Запущенные службы отображаются раньше остановленных.

    get-service s* | sort-object status -Descending

    В том случае, если нужно проверить наличие (существование) службы в системе (как правило, это может понадобиться в различных скриптах), вы можете воспользоваться такой конструкцией:

    if (Get-Service "ServiceTest" -ErrorAction SilentlyContinue)
    Write-host "ServiceTest exists"
    >

    Командлет Get-Service можно использовать для получения статуса служб не только на локальном, но и удаленных компьютерах. Для этого нужно использовать аргумент –Computername. Подключение к удаленным компьютерам осуществляется не через PowerShell Remoting (WinRM), а через службу Service Manager (по аналогии с командой sc.ex).

    get-service wuauserv -ComputerName remotePC1

    Если вы используете PowerShell v3 или выше, то можно опросить статус службы сразу на множестве удаленных компьютерах, их имена нужно перечислить через запятую.

    get-service spooler -ComputerName remotePC1,remotePC2, remotePC3| format-table Name,Status,Machinename –autosize

    Командлет format-table используется в данном примере для получения более удобного табличного представления состояния служб.

    Командлет Get-Service имеет еще два параметра, которые удобно использовать при администрировании служб. Параметр DependentServices получает службы, которые зависят от данной службы. Параметр RequiredServices получает службы, от которых зависит данная служба.

    Приведенная ниже команда выводит список служб, требуемых службе LanmanWorkstation для запуска.

    Get-Service -Name LanmanWorkstation –RequiredServices

    Get-Service -RequiredServices получаем зависимости служб

    Следующая команда выводит зависимые службы (подробнее о настройке зависимостей служб в Windows), которым требуется служба LanmanWorkstation.

    date

    27.07.2020

    directory

    PowerShell, Windows 10, Windows Server 2016

    comments

    комментария 4

    В Windows вы можете управлять службами не только из графической консоли services.msc или утилиты командной строки Sc.exe (первоначальна включалась в пакет ресурсов Resource Kit), но и с помощью PowerShell. В этой статье мы смотрим различные сценарии управления службами Windows с помощью PowerShell.

    Основные командлеты PowerShell для управления службами Windows

    Существует восемь основных командлетов Service, предназначенных для просмотра состояния и управления службами Windows.

    Чтобы получить весь список командлетов Service, введите команду:

    управление службами windows из powershell

    Получить подробное описание и примеры использования конкретного командлета можно через Get-help:

    Get-Help Start-Service

    Get-Service: получаем список служб и их состояние

    Получить список и состояние (Running/Stopped) службы на локальном или удаленном компьютере можно с помощью командлета Get-Service. Параметр -Name позволяет делать отбор по имени службы. Имя службы можно задать с использованием подстановочного символа *.

    Get-Service просмотр состояния служб

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

    Get-Service поиск по имени службы

    .

    Командлет Get-Service можно использовать для получения состояния служб на удаленных компьютерах, указав параметр -ComputerName. Можно опросить статус службы сразу на множестве удаленных компьютеров, их имена нужно перечислить через запятую. Например, приведенная ниже команда получает состояние службы Spooler на удаленных компьютерах RM1 и RM2.

    Get-Service spooler –ComputerName RM1,RM2

    Вывести все свойства службы позволит командлет Select-Object:

    Get-Service spooler | Select-Object *

    вывести все свойства службы windows

    Командлет Select-Object позволит вывести определенные свойства службы. Например, нам нужно вывести имя, статус и доступные возможности службы Spooler:

    Get-Service Spooler | Select DisplayName,Status,ServiceName,Can*

    Get-Service - можно ли перезапускать, приостаналивать службу windows

    Командлет Get-Service имеет два параметра, которые позволяют получить зависимости служб:

    • Параметр -DependentServices позволяет вывести службы, которые зависят от данной службы;
    • Параметр -RequiredServices позволяет вывести службы, от которых зависит данная служба.

    Приведенная ниже команда выводит службы, необходимые для запуска службе Spooler:

    Get-Service –Name Spooler -RequiredServices

    Get-Service RequiredServices зависимости служб в windows

    Следующая команда выводит службы, которые зависят от службы Spooler:

    Get-Service –Name Spooler -DependentServices

    Get-Service DependentServices

    При необходимости найти службы с определенным состоянием или параметрами, используйте командлет Where-Object. Например, получим список запущенных служб со статусом Running:

    Get-Service | Where-Object status -eq

    Для вывода служб с типом запуска Manual, выполните команду

    Get-Service | Where-Object <<img class=

    .starttype -eq " width="" />
    .starttype -eq " width="" />

    Проверить, что в системе имеется указанная служба:

    if (Get-Service "ServiceTest" -ErrorAction SilentlyContinue)
    Write-host "ServiceTest exists"
    >

    Остановка, запуск, приостановка и перезапуск служб из PowerShell

    Остановить службу можно с помощью командлета Stop-Service. Чтобы остановить службу печати, выполните команду:

    Stop-Service -Name spooler

    Командлет Stop-Service не выводит никаких данных после выполнения. Чтобы увидеть результат выполнения команды, используйте параметр -PassThru.

    Командлет Stop-Service - остановит службу

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

    Stop-Service - ошибка Cannot stop service because it has dependent services. It can only be stopped if force flag set

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

    Stop-Service samss –Force -Passthru

    Следующая команда остановит перечисленные службы (bits,spooler) со статусом ”Running”:

    get-service bits,spooler | where | stop-service –passthru

    остановить несколько служб из powershell

    Иногда службы зависают в статусе Stopping и их процессы приходится завершать принудительно.

    Командлет Start-Service запускает остановленные службы:

    Start-Service -Name spooler -PassThru

    Start-Service -запуск службы

    Служба не запустится, если есть остановленные зависимые службы. Чтобы их найти и включить:

    get-service samss | Foreach

    Start-Service запустить службу и все зависимые службы

    Get-Service samss | Format-List name, canpauseandcontinue

    Get-Service canpauseandcontinue

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

    список служб, разрешающих приостановку

    Приостановим службу SQLBrowser:

    Suspend-Service -Name SQLBrowser

    Suspend-Service

    Для возобновления работы приостановленной службы служит командлет Resume-service:

    Resume-Service -Name SQLBrowser

    Resume-Service

    Следующая команда возобновляет работу всех приостановленных служб:

    get-service | where-object | resume-service

    Командлет Restart-Service перезапускает службу:

    Restart-Service -Name spooler

    Restart-Service - перезапуск службы windows

    Эта команда запускает все остановленные сетевые службы компьютера:

    get-service net* | where-object | restart-service

    Например, чтобы перезапустите очередь печати на удаленном компьютере RM1, выполните команду:
    Get-Service Spooler -ComputerName RM1 | Start-Service

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

    Set-Service – изменение настроек службы Windows

    Командлет Set-Service позволяет изменить параметры или настройки служб на локальном или удаленном компьютере. Так как состояние службы является свойством, этот командлет можно использовать для запуска, остановки и приостановки службы. Командлет Set-Service имеет параметр -StartupType, позволяющий изменять тип запуска службы.

    Изменим тип запуска службы spooler на автоматический:

    Set-Service spooler –startuptype automatic –passthru

    Set-Service включить автозапуск для службы

    Можно перевести службу на ручной (manual) запуск:

    Set-Service spooler –startuptype manual –passthru

    ручной запуск службы

    Создание и удаление служб Windows c помощью PowerShell

    New-Service – командлет для создания новой службы в Windows. Для новой службы требуется указать имя и исполняемый файл (вы можете запустить PowerShell скрипт как службу Windows).

    В примере создадим новую службу с именем TestService.

    new-service -name TestService -binaryPathName "C:\WINDOWS\System32\svchost.exe -k netsvcs"

    New-Service создать новую службу в windows

    С помощью параметра Get-WmiObject получим информацию о режиме запуска и описание службы

    get-wmiobject win32_service -filter "name='testservice'"

    get-wmiobject win32_service -filter "name=

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

    Set-Service -Name TestService -Description ‘My Service’ -StartupType Manual

    Set-Service - изменить тип запуска службы

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

    (Get-WmiObject win32_service -Filter ″name=′TestService′″).delete()

    Изменение учетной записи для запуска службы

    Вы можете изменить учетную запись, из-под которой запускается служба. Получим имя учетной записи, которая используется для запуска службы TestService

    get-wmiobject win32_service -filter "name='TestService'" | Select name,startname

    изменить учетную запись для запуска служб

    Для изменения имени и пароля учетной записи выполняем команды.

    $svc = get-wmiobject win32_service -filter "name='TestService'"
    $svc.GetMethodParameters("change")

    В результате получаем список параметров метода Change(). Считаем на каком месте находятся параметры StartName и StartPassword – 20 и 21 место соответственно.

    svc.GetMethodParameters

    $svc | Invoke-WmiMethod -Name Change –ArgumentList @ ($null,$null,$null,$null,$null,$null,$null, $null,$null,$null,$null,$null,$null,$null,$null,$null, $null,$null,$null,"Administrator","P@ssw0rd")

    Либо вы можете указать имя gMSA аккаунта. Пароль при этом не указывается.

    Invoke-WmiMethod - запуск службы из под другого пользователя

    Как видите, PowerShell позволяет легко управлять службами Windows. Можно создавать, останавливать, запускать и возобновлять службы, менять их свойства. Большинство командлетов позволяют управлять службами на удаленных компьютерах.

    Я хочу написать командный файл, который выполняет следующие операции:

    • Проверьте, запущена ли служба
      • Если он запущен, выйдите из партии
      • Если он не запущен, запустите службу

      Примеры кода, которые я искал в Google, оказались неработоспособными, поэтому я решил не публиковать их.

      Запуск службы осуществляется:

      1. Как я могу проверить, запущена ли служба, и как сделать оператор if в пакетном файле?
      2. Я немного запутался. Какой аргумент я должен передать чистому старту? Название сервиса или его отображаемое имя?
      @Peter Schuetze: Да, ваше возражение правильное, если единственной целью является запуск службы. Я также включил ведение журнала и так далее, поэтому я придерживался решения lc.

      Чтобы проверить состояние службы, используйте sc query <SERVICE_NAME> . Информацию о блоках if в пакетных файлах см. В документации .

      Следующий код проверит состояние службы MyServiceName и запустит ее, если она не запущена (блок if будет выполнен, если служба не запущена):

      Объяснение того, что он делает:

      1. Запрашивает свойства службы.
      2. Ищет строку, содержащую текст "СОСТОЯНИЕ"
      3. Токенизирует эту строку и извлекает третий токен, который содержит состояние службы.
      4. Проверяет результирующее состояние по строке "RUNNING"

      Что касается вашего второго вопроса, аргумент, который вы захотите передать, net start - это имя службы, а не отображаемое имя.

      Потрясающие. Спасибо за ваши усилия. К сожалению, не работает? Может, я слишком глуп для этого. Я заменил «MyServiceName» на «SCardSvr» (экранированный) в качестве теста, поместил все в пакетный файл, выполнил его, но служба не запускается. Даже если я заменю net start чем-то другим, например печатью в файл, он не будет выполнен. Не могли бы вы взглянуть еще раз? =) Ой, у меня там в первой строке было кое-что лишнее . Попробуй. И если это не сработает, что произойдет, если вы запустите sc query "SCardSvr" из командной строки? У вас в кавычках стоит "SCardSvr"? Я не верю, что так должно быть, @LittleBobbyTables: Вы правы. Без кавычек заставил работать. Я такой тупой: - | Спасибо за вашу помощь @Mark Приятно отметить. Думаю, вам придется заменить эту строку на то, что нужно для языка целевой ОС. Я тоже предполагаю "БЕГ".

      Для переключения службы используйте следующее:

      NET START «Координатор распределенных транзакций» || NET STOP «Координатор распределенных транзакций»

      Работает из-за кода выхода с самого начала. Если команда запуска не работает, вероятно, потому, что она уже запущена (и в любом случае ее последующая остановка не повредит), поэтому вы пытаетесь ее остановить. команда построена таким образом, что если net start завершается неудачно, она затем останавливает ее (из-за символа ||, что означает else), но если net start выполняется, то net stop не выполняется. молодец! На мой взгляд, это лучший ответ, и, возможно, @citronas стоит подумать о том, чтобы пометить его как принятый: простой, умный и элегантный, который подходит для такого сайта, как StackOverflow. Сделай это проще! Не быть nitpicky (ОК, может быть , только немного), но || на самом деле является OR оператором, хотя в данном случае это функционально ELSE заявление. Это тонкое, но важное отличие. У меня все еще есть +1 - я все время делаю это в сценариях оболочки Unix / Linux, не знаю, почему я никогда не думал делать это в пакетном режиме Windows. Это кажется опасно упрощенным. Я никогда не хотел бы использовать его для чего-то, что я автоматизировал для пакетной обработки или отдавал кому-то другому . но это именно то, что доктор заказал для быстрого значка, который я могу разместить на своем рабочем столе для службы, которая мне нужна время от времени быстро переключайтесь.

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

      Когда я запускаю его для своего антивируса NOD32, я получаю:

      Если бы его остановили, я бы получил:

      Вы можете использовать это в переменной, чтобы затем определить, используете ли вы NET START или нет.

      Имя службы должно быть именем службы, а не отображаемым именем.

      Спасибо за вашу помощь, пока я пытаюсь интегрировать то, что вы опубликовали, я значительно увеличил свои навыки работы с

      Это должно сработать:

      Независимая от языка версия.

      Почти идеальный ответ. Я бы просто исправил эту строку: Net start "% ServiceName%"> nul || ( Я сделал сценарий универсальным, поэтому он позволяет мне использовать его в задачах планировщика Windows. Просто замените Set ServiceName=Jenkins на Set ServiceName=%

      1 и назовите это как watch-service.bat "Jenkins"

      @ Ant_222 Он использует queryex вместо query, который зависит от языка. А почему вы думаете, что это не Windows batch? Вы пробовали его использовать?

      Я только что нашел эту ветку и хотел добавить в обсуждение, если человек не хочет использовать командный файл для перезапуска служб. В Windows есть опция, если вы перейдете в Сервисы, свойства службы, затем восстановление. Здесь вы можете установить параметры услуги. Хотелось бы перезапустить службу, если служба остановится. Кроме того, у вас даже может быть вторая неудачная попытка сделать что-то другое, например, перезагрузить компьютер.

      @sagelightning: Нам нужен доступ администратора, чтобы попробовать этот способ. @ArtGertner - завершение (через диспетчер задач) процесса обслуживания будет интерпретировано как «сбой» и вызовет восстановление.

      Cuando se использует Windows en Español, el código debe quedar asi (при использовании Windows на испанском языке код следующий):

      Reemplazar MYSERVICE с номером обслуживания, который находится в процессе обработки. Puedes ver el nombre del servicio viendo las propiedades del servicio. (Замените MYSERVICE названием службы, которая будет обрабатываться. Вы можете увидеть имя службы в ее свойствах.)

      Всем будет лучше, если вы напишете свой ответ по-английски. Не уверен, почему голос против. Это важный момент и причина по возможности избегать сравнения строк. В этом случае вам необходимо изменить строку в зависимости от языка по умолчанию целевой установки Windows. @lc: Было бы разумно включать ответ для каждого языка? Было бы более полезно сослаться на (или включить) ресурс, в котором указано, в какой строке искать данный язык.

      Для Windows Server 2012 у меня сработало то, что ниже. Замените только "SERVICENAME" фактическим названием службы:

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

      Для запуска остановки службы

      в планировщике задач, если вы используете его на сервере, используйте это в аргументах

      -noprofile -executionpolicy bypass -file "C: \ Service Restart Scripts \ StopService.PS1"

      проверьте, запустив то же самое на cmd, если он работает, он также должен работать в планировщике задач

      Читайте также: