Проверка запуска службы windows


Рейтинг 4.92/231:

lacostewin

0 / 0 / 0

Регистрация: 22.06.2014

Сообщений: 22

Проверка статуса службы

21.02.2017, 05:58. Показов 46296. Ответов 8

Метки нет (Все метки)


Всем привет.

Подскажите, пожалуйста, что не так в этом скрипте?

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
setlocal 
set service=SNMP
set do=-1
for /f "tokens=1,4" %%i in ('sc query %service%') do ( 
    if "%%i"=="STATE" ( 
        if "%%j"=="RUNNING" (set do=0) else (set do=1) 
   ) 
) 
if %do% EQU 1 net start  %service%
if %do% EQU 0 echo %service% is running!
if %do% EQU -1 echo %service% unknown.
pause

Хотелось бы, что бы если служба не запущена или отсутствует, то выполнялся старт службы. Но, не зависимо от статуса службы я всё равно получаю значение -1. Вывод команд

C:\Program Files\smartmontools\bin>SC queryex snmp

Имя_службы: snmp
Тип : 10 WIN32_OWN_PROCESS
Состояние : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
Код_выхода_Win32 : 0 (0x0)
Код_выхода_службы : 0 (0x0)
Контрольная_точка : 0x0
Ожидание : 0x0
ID_процесса : 2684
Флаги :

C:\Program Files\smartmontools\bin>

и скрипт

SNMP state unknown.
Для продолжения нажмите любую клавишу . . .

Пробовал менять tokens, но увы. Может дело в том, что вывод команды содержит русский шрифт?



0



v_svitere

774 / 423 / 137

Регистрация: 03.06.2009

Сообщений: 1,223

Записей в блоге: 4

21.02.2017, 10:55

lacostewin,
Для управления службами, обязательны админские права, поэтому обязательно, чтобы ваш сценарий выполнялся от учетной записи с админскими правами.

А вообще если у Вас ОС повыше XP могу предложить вариант на powershell

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
($status=($service=Get-Service|?{$_.name -eq "snmp"}).status)
if($status -eq "Stopped")
{
    try
        {
            $service.start()
            echo "Служба запущена"
        }
    catch
        {
            echo "Не удалось запустить службу"
        }
}
if($status -eq "Running")
{echo "Сервис Запущен"}



1



6375 / 2200 / 342

Регистрация: 10.12.2013

Сообщений: 7,558

21.02.2017, 15:25

ТС, сделай так, как показал наш товарищ в свитере, и мир станет лучше.

Поясняю.

вот задача:

Сообщение от lacostewin

Хотелось бы, что бы если служба не запущена или отсутствует, то выполнялся старт службы.

а вот то, что волнует ТС после попытки реализации:

Сообщение от lacostewin

Пробовал менять tokens, но увы. Может дело в том, что вывод команды содержит русский шрифт?

Вот какие на хрен токены и шрифты, если речь идёт о запуске/остановке сервиса??

это то, о чём я не устаю толковать — неправильный выбор инструмента полностью разрушил ориентацию ТС.
задача не решена, он теряет время и попросту губит свою молодость, преступно тратит её на ерунду. да-с.

Теперь поднимите глаза и посмотрите на powershell-реализацию-

всё кристально ясно даже пьяной женщине,
всё абсолютно по делу.



1



ZoOoO

226 / 211 / 69

Регистрация: 09.02.2016

Сообщений: 1,040

21.02.2017, 22:04

Windows Batch file
1
2
3
4
5
@echo off
:1
for /f "skip=3 tokens=4" %%i in ('sc query dnscache') do (
if "%%i"=="RUNNING" (echo Служба dnscache запущена&pause&exit /b) else (echo Служба dnscache не запущена&pause&exit /b)
)

Добавлено через 6 минут

Сообщение от lacostewin

Хотелось бы ……….. отсутствует

Если ее нет,то ее вроде и нет?А если запустить,то пропишите команду во вторых скобках в место echo бла бла бла

Windows Batch file
1
sc start dnscache&goto 1

dnscache-это имя службы
Скрипт для отображения русской речи сохранить в 866 кодировке.И запускать через админские права.



0



greg zakharov

Покинул форум

3700 / 1483 / 355

Регистрация: 07.05.2015

Сообщений: 2,903

21.02.2017, 22:23

Сообщение от v_svitere

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

Для изменения статуса службы — да, для его получения нет. По крайней мере если добрый админ не прикрыл доступ к ветке HKLM\SYSTEM\CurrentControlSet\Services, иными словами, следующий командный сценарий позволит получить статус службы, если дефолтные разрешения на данную ветку не были изменены:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@echo off
  setlocal
    set "i=0"
    for %%i in (%*) do set /a "i+=1"
    if %i% neq 1 echo:=^>err : index is out of range&goto:eof
    set "k=HKLM\SYSTEM\CurrentControlSet\Services"
    for /f "tokens=5 delims=" %%i in (
      '2^>nul reg query %k%'
    ) do (
      if /i "%~1" equ "%%i" (
        for /f "tokens=3" %%j in (
          '2^>nul reg query "%k%\%%i" ^| findstr /irc:"start"'
        ) do set /a "start=%%j"
      )
    )
    if %start% equ 0 echo:Start on boot.
    if %start% equ 1 echo:Start with system.
    if %start% equ 2 echo:Start automatically.
    if %start% equ 3 echo:Manually.
    if %start% equ 4 echo:Disabled.
  endlocal
exit /b

Обзавем наш бат, servchk.cmd, в итоге:

Code
1
2
3
4
5
E:\sandbox> servchk.cmd wuauserv
Start automatically.
 
E:\sandbox> servchk.cmd null
Start with system.

И т.д.



0



226 / 211 / 69

Регистрация: 09.02.2016

Сообщений: 1,040

21.02.2017, 22:30

Сообщение от v_svitere

вариант на powershell

А PS может запустить остановленную службу?Подчеркиваю.Служба у которой стоит не запуск вручную,а отключено.



0



lacostewin

0 / 0 / 0

Регистрация: 22.06.2014

Сообщений: 22

22.02.2017, 10:12

 [ТС]

Сделал так.

Windows Batch file
1
2
3
4
5
6
7
@echo off
sc query "snmp" | find /i "RUNNING"
if not ERRORLEVEL 1 (
    echo service is not running
) else (
    xcopy /y /s /d \\domain.local\SysVol\domain.local\Policies\{111FA9F7-CE3F-444D-B71F-6762FEAC336C}\Machine\Applications\snmp c:\windows\snmp\ 
)

Ну, или net start snmp, но это уже не сильно важно — это всего лишь пример.
Спасибо.



0



v_svitere

774 / 423 / 137

Регистрация: 03.06.2009

Сообщений: 1,223

Записей в блоге: 4

22.02.2017, 10:16

ZoOoO, Да, разумеется.

PowerShell
1
man set-service
PowerShell
1
Set-Service $service.Name -StartupType automatic



0



gtjafar

1 / 1 / 0

Регистрация: 08.11.2019

Сообщений: 2

08.11.2019, 15:30

Одной строкой с помощью логических операндов:

Windows Batch file
1
2
@echo off
sc query "snmp" | find /i "RUNNING" && xcopy /y /s /d \\domain.local\SysVol\domain.local\Policies\{111FA9F7-CE3F-444D-B71F-6762FEAC336C}\Machine\Applications\snmp c:\windows\snmp\ || echo service is not running

Или для удобства чтения кода (в скобки можно еще команд прописать):

Windows Batch file
1
2
3
4
5
6
@echo off
(sc query "snmp" | find /i "RUNNING") && (
xcopy /y /s /d \\domain.local\SysVol\domain.local\Policies\{111FA9F7-CE3F-444D-B71F-6762FEAC336C}\Machine\Applications\snmp c:\windows\snmp\ 
echo successfully) || (
echo service is not running
echo contact your system administrator)



1



BasicMan

Эксперт

29316 / 5623 / 2384

Регистрация: 17.02.2009

Сообщений: 30,364

Блог

08.11.2019, 15:30

Помогаю со студенческими работами здесь

Проверка байт статуса
Напишите программу которая проверяет байт STATUS и переходит к ROUTINE_1, если биты 1, 3 или 5 содержат 1. В противном случае она переходит…

Проверка статуса платежа
Приветствую всех! Прошу помочь мне в моей проблеме! Мне нужно приложение, которое бы проверяла статус платежа. Само приложение хранит…

Проверка статуса olevariant
строю парсер для магазина. сделал модуль, который тянет информацию о характеристиках товара с Никса.

модуль построен так: в webbrowser…

Проверка статуса документа
Доброго времени суток.

Как можно программно запретить перевод документа в режим редактирования (Querymodechange), если после открытия…

Проверка статуса чекбокса
Привет всем!
Искал похожую тему, но не нашел к сожалению.
Подскажите пожалуйста, как на джаве делается проверка статуса чекбокса, т.е…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

9

Новые блоги и статьи

Все статьи  

Все блоги / 

Как использовать OAuth2 со Spring Security в Java

Javaican 14.05.2025

Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . .

Анализ текста на Python с NLTK и Spacy

AI_Generated 14.05.2025

NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и. . .

Реализация DI в PHP

Jason-Webb 13.05.2025

Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .

Обработка изображений в реальном времени на C# с OpenCV

stackOverflow 13.05.2025

Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого. . .

POCO, ACE, Loki и другие продвинутые C++ библиотеки

NullReferenced 13.05.2025

В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .

Паттерны проектирования GoF на C#

UnmanagedCoder 13.05.2025

Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .

Создаем CLI приложение на Python с Prompt Toolkit

py-thonny 13.05.2025

Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .

Конвейеры ETL с Apache Airflow и Python

AI_Generated 13.05.2025

ETL-конвейеры – это набор процессов, отвечающих за извлечение данных из различных источников (Extract), их преобразование в нужный формат (Transform) и загрузку в целевое хранилище (Load). . . .

Выполнение асинхронных задач в Python с asyncio

py-thonny 12.05.2025

Современный мир программирования похож на оживлённый мегаполис – тысячи процессов одновременно требуют внимания, ресурсов и времени. В этих джунглях операций возникают ситуации, когда программа. . .

Работа с gRPC сервисами на C#

UnmanagedCoder 12.05.2025

gRPC (Google Remote Procedure Call) — открытый высокопроизводительный RPC-фреймворк, изначально разработанный компанией Google. Он отличается от традиционых REST-сервисов как минимум тем, что. . .

Наверх

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

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

Get-Service

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

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

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

Get-Service | Where-Object {$_.Status -EQ "Running"}

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

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

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

get-service | 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

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

get-service wi*

Так можно отсортировать список служб компьютера в порядке убывания по значению свойства 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 получаем зависимости служб

Status Name DisplayName
—— —- ————
Running NSI Network Store Interface Service
Running MRxSmb20 SMB 2.0 MiniRedirector
Running Bowser Browser Support Driver

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

Get-Service -Name LanmanWorkstation -DependentServices

January 9, 2017 (Revised February 21, 2022)

Here are four ways to determine when your windows service last started.

Solution #1: Search the Windows Event Logs with PowerShell

The Windows Event Logs hold a wealth of information about your computer’s activities. Indeed, a new record is added to the System event log whenever a windows service starts or stops.

The easiest way to find your service’s most recent start time is to use a specially crafted PowerShell command to search the System event log. For example, the following line will return the last time the “Print Spooler” service was started:

(Get-EventLog -LogName «System» -Source «Service Control Manager» -EntryType «Information» -Message «*Print Spooler service*running*» -Newest 1).TimeGenerated

Be sure to replace «Print Spooler» with the display name of the service you are investigating!

PowerShell - Windows Service Start Time

Solution #2: Search the Windows Event Logs using the Event Viewer

Instead of running a PowerShell command, you can also search the Event Log manually.

To find the event log record showing when your service was last started:

  1. Open the Event Viewer from the Control Panel (search for it by name).

  2. In the left-hand column, navigate to Windows Logs > System:

    Event Viewer - Open System Log

  3. Click Find… on the right to bring up the Find window. Enter the name of the service and click the Find Next button to highlight the first matching record in the middle panel. We have entered Spooler, for the Windows Spooler service:

    Event Viewer - Find

  4. If necessary, keep clicking the Find Next button until a record saying that your service has “entered the running state” comes up. The Source should be Service Control Manager, and the time your service started will be displayed in the Logged value. The screenshot show that the Print Spooler service last started at 8:04:55 AM on January 7th 2017:

    Print Spooler service start time

Solution #3: Figure out when the Service’s Process was Started

Each running windows service is backed by an underlying process. 99.9% of the time, that process was launched immediately when the service started. So finding the process start time will give us the service start time.

To find out when the service’s process was started:

  1. Determine the process identifier (PID) of the service’s process using the SC command. For a service named MyService, run:

    sc queryex MyService

    (Be sure to enclose the service name in quotes if it contains spaces.)

    Here is the result for the Spooler service:

    Use SC to find the Service PID

    Make a note of the number on the PID line (1276 in the screenshot above).

  2. Next, open a PowerShell window and run:

    Get-Process | select name, id, starttime | select-string <PID>

    where <PID> is the process identifier from step 1. The start time will come back in the result. Here is what we got for the spooler’s process (#1276):

    Run PowerShell Get-Process

Solution #4: Use the System Boot/Up Time (for Automatic Windows Services)

Most Windows Services start when your computer boots and run continuously, 24×7 in the background. For those services, the system boot time is a reasonable approximate.

You can run the built-in systeminfo command to discover when the system last started. Amongst the valuable information systeminfo returns, look for the “System Boot Time” line:

System Boot Time

However, if you’re ever in a situation where you can’t remember the command to use, know that the Task Manager’s Performance tab shows how long the computer has been up (“Up time”). The system boot time is a simple calculation away.

Task Manager - Uptime

So there are four easy ways to find out when your windows service started. Use whichever one best fits your situation. Good luck with your troubleshooting/investigation!

You may also like…

The services in Windows can be started using the Service Manager tool.

To start the Service Manager GUI, press ⊞ Win keybutton to open the start menu, type in services to search for the Service Manager and press Enter to launch it.

The services can also be started using the command-line prompt (CMD) or the PowerShell.

In this note i am showing how to start, stop or check the status of a service in Windows using the command-line prompt (CMD) or the PowerShell.

Cool Tip: List services in Windows from the CMD & PowerShell! Read more →

Start Service Using Command Line (CMD)

To avoid “Access is denied” errors, start CMD as an administrator: press ⊞ Win keybutton to open the start menu, type in cmd to search for the command prompt and press Ctrl + Shift + Enter to launch it as administrator.

Use the following commands to start, stop or check the status of a service in Windows on the command-line prompt (CMD).

Start a service:

C:\> net start serviceName

Get a service status:

C:\> sc query serviceName

Stop a service:

C:\> net stop serviceName

Cool Tip: Kill a hanging process in Windows from the CMD! Read more →

To avoid “Access is denied” errors, start PowerShell as an administrator: press ⊞ Win keybutton to open the start menu, type in powershell to search for the PowerShell and press Ctrl + Shift + Enter to launch it as administrator.

Use the following commands to start, stop or check the status of a service in Windows using the PowerShell.

Start a service:

PS C:\> Start-Service serviceName

Get a service status:

PS C:\> Get-Service serviceName

Stop a service:

PS C:\> Stop-Service serviceName

Was it useful? Share this post with the world!

Индивидуальный подход

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

Подробнее

Гарантия качеcтва

Выполнение поставленных задач в максимально короткие сроки. Надежность и высокий профессионализм. «Прозрачная» ценовая политика. Предоставление любой информации клиенту, касающейся текущей работы и расходов. Мы полностью отвечаем за качество выполненных работ и соответствие вашим желаниям.

Подробнее

Решение задач любой сложности

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

Подробнее

11 сентября 2015

@Echo Off
Set ServiceName=dnscache
:: Получаем состояние службы, проверяем запущена ли
SC queryex %ServiceName%|Find «STATE»|Find «RUNNING»>Nul&&(
rem Попытка остановить
Net stop %ServiceName%>nul||(
rem Если через net stop не вышло остановить, спрашиваем PID
For /F «tokens=3» %%A In (‘SC queryex %ServiceName%^|Find «PID»‘) Do (
rem Завершаем процесс вместе с зависящими службами, используя полученный PID
TaskKill /F /T /PID %%A>nul
rem Задержка для обновления статуса службы после завершения
Ping -n 4 127.0.0.1>nul
)
rem
Net stop %ServiceName% 2>nul
)
)
rem Если служба не была запущена, или уже завершена к тому времени — запускаем её
Net start %ServiceName%

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Simple dhcp server for windows
  • Windows 10 1511 сборка
  • Borderlands тема для windows 7
  • Файловая подкачка windows 11
  • Директория автозагрузки windows 10