Запустить службу Windows можно четырьмя штатными путями: кнопкой «Запустить» в оснастке services.msc, командой net start в командной строке, командлетом Start-Service в PowerShell и политикой в узле «Системные службы» для парка машин в домене. Все четыре способа обращаются к одному диспетчеру, Service Control Manager (SCM, процесс services.exe), поэтому результат один и тот же, различаются интерфейс и пригодность для скриптов и удалённых серверов.
Быстрее всего разовый пуск выполняется в services.msc: Win+R, команда services.msc, поиск службы по внутреннему имени, кнопка «Запустить». На сервере без графической оболочки или внутри скрипта используйте net start <имя> из консоли, открытой от имени администратора. Для автоматизации и работы с удалёнными машинами подходят Start-Service и Invoke-Command.
Одного запуска мало, если служба нужна после каждой перезагрузки: тогда меняют тип запуска на «Автоматически» или «Автоматически (отложенный запуск)». Делегирование прав непривилегированному оператору и автоматический перезапуск после падения настраиваются отдельно, через дескриптор безопасности sc sdset и вкладку «Восстановление».
Проверенный каталог источников проекта не содержит материалов по управлению службами Windows, поэтому синтаксис команд и пути в оснастках сверяйте с документацией вашей сборки Windows перед применением на продуктивных серверах. Сведения о поведении systemd в Linux подтверждены опубликованным руководством, ссылка на него дана в разделе о типах запуска.
Быстрый запуск службы через оснастку services.msc
Как открыть оснастку «Службы»
Оснастка открывается тремя путями:
- Win+R, команда services.msc, Enter. Самый быстрый вариант.
- Панель управления, Администрирование, Службы.
- Правый клик по «Этот компьютер», Управление, Службы и приложения, Службы.
Смена типа запуска и правка свойств требуют прав администратора: в сессии без повышения кнопки «Запустить», «Остановить» и список типов запуска остаются неактивными. Открывайте оснастку через «Запуск от имени администратора». Службами другого хоста управляют из той же консоли: правый клик по корневому узлу «Службы (локальный компьютер)», «Подключиться к другому компьютеру».
Запуск и настройка типа запуска
Ищите службу по столбцу «Имя службы» (внутреннее имя, например Spooler), а не по «Отображаемому имени»: внутренние имена подставляются в net start, sc config и командлеты PowerShell. Столбец «Состояние» показывает «Выполняется», если служба работает, и остаётся пустым у остановленной. Столбец «Тип запуска» хранит текущий режим старта.
Порядок действий: правый клик по службе, «Запустить», затем проверка состояния. Кнопки «Остановить», «Перезапустить» и «Приостановить» доступны в зависимости от того, поддерживает ли служба паузу и повторный старт. Смена режима выполняется в свойствах, в списке «Тип запуска», с подтверждением кнопкой «Применить».
Четыре значения типа запуска: «Автоматически», «Автоматически (отложенный запуск)», «Вручную», «Отключена». Отложенный старт поднимает службу после того, как SCM запустит основные автоматические службы, что сглаживает пик нагрузки на диск в первые минуты после загрузки.
Два предупреждения. Если служба зависит от других, они должны быть запущены, иначе SCM вернёт ошибку 1068 (вкладка «Зависимости» покажет список). Перевод редкой службы в «Автоматически» удлиняет загрузку и расширяет поверхность атаки, поэтому для сервисов, которые нужны раз в месяц, оставляйте «Вручную».
Пример: после остановки печати служба Print Spooler не поднимается сама, пока вы не нажмёте «Запустить», а для постоянного старта переключите тип запуска на «Автоматически (отложенный запуск)». На сервере без печати эту службу часто отключают: снимается риск эксплуатации уязвимостей диспетчера печати, но перестают работать установка принтеров и приложения, обращающиеся к очереди печати. Как связаны служба и автозапуск прикладного ПО, разобрано в руководстве по развёртыванию Windows-приложения через MSI и EXE.
Запуск службы через командную строку: net start и sc config
Командная строка выручает на серверах без графической оболочки и в скриптах развёртывания. Консоль открывайте от имени администратора: без повышения net start вернёт ошибку 5 «Отказано в доступе», а sc config откажет в записи.
Синтаксис и примеры команд net start
net start net start Spooler net start "Print Spooler" net start | findstr /i print net stop Spooler
Без параметров net start печатает список работающих служб. С аргументом команда запускает службу по внутреннему (Spooler) или отображаемому (Print Spooler) имени; имена с пробелами берут в кавычки. Состояние отдельной службы удобнее проверять через sc query Spooler: вывод содержит STATE (RUNNING или STOPPED) и код выхода последнего запуска. Поиск по списку выполняют фильтром net start | findstr /i <часть_имени>.
Настройка автоматического старта через sc config
sc config Spooler start= auto sc config W32Time start= delayed-auto sc config Fax start= demand sc config Spooler start= disabled sc start Spooler
Параметр start= принимает значения auto (автоматически), delayed-auto (отложенный старт), demand (вручную, по запросу), disabled (отключена), а также boot и system для загрузочных драйверов. Синтаксическая ловушка: после start= обязателен пробел, запись start=auto вернёт ошибку 87 «Неверный параметр». Регистр в именах служб значения не имеет, но внутреннее имя должно совпадать с системным: уточнить его можно через sc query type= service state= all или в столбце «Имя службы» оснастки.
Удалённое управление выполняется с UNC-путём к машине:
sc \\SRV01 query Spooler sc \\SRV01 start Spooler sc \\SRV01 config Spooler start= auto
Для этого нужны права администратора на удалённом хосте и открытый доступ по SMB (порт 445). В сетях, где SMB между сегментами заблокирован, этот путь недоступен, и удалённые команды идут через PowerShell по WinRM.
Отдельное предупреждение: не переводите в auto службы, назначение которых вам неизвестно, и не отключайте службы, от которых зависят вход в систему, сеть и доступ к хранилищу. Перед правкой проверьте, не задан ли тип запуска групповой политикой, иначе значение вернётся при следующей её обработке.
Управление службами в PowerShell
Основные командлеты для запуска и настройки
Get-Service -Name Spooler Get-Service -DisplayName "*print*" Start-Service -Name Spooler Stop-Service -Name Spooler Restart-Service -Name Spooler Get-Service -Name Spooler | Start-Service Set-Service -Name W32Time -StartupType Automatic Set-Service -Name Spooler -StartupType Disabled
Get-Service возвращает объекты с полями Status, Name, DisplayName и StartType, поэтому список фильтруется по состоянию или режиму: Get-Service | Where-Object StartType -eq Automatic. Start-Service, Stop-Service и Restart-Service принимают -Name (внутреннее имя), -DisplayName и массив имён: Start-Service -Name Spooler, W32Time. При ошибке командлет выбрасывает исключение, поэтому в скриптах используют -ErrorAction Stop и try/catch, а не проверку кода возврата.
Set-Service меняет тип запуска значениями Automatic, Manual и Disabled. Отложенный старт задаётся значением AutomaticDelayedStart там, где его поддерживает версия PowerShell; если командлет такое значение не принимает, примените sc config <имя> start= delayed-auto. Остановка чужих служб и смена типа запуска требуют повышенных прав, иначе появится сообщение об отказе в доступе при открытии службы.
Удалённое управление службами
У командлетов служб нет параметра -ComputerName, поэтому на другом сервере команда выполняется внутри Invoke-Command:
Invoke-Command -ComputerName SRV01 -ScriptBlock { Get-Service -Name Spooler }
Invoke-Command -ComputerName SRV01 -ScriptBlock { Start-Service -Name Spooler }
Invoke-Command -ComputerName SRV01 -ScriptBlock { Set-Service -Name W32Time -StartupType Automatic }
Условия работы: WinRM включён на целевой машине (Enable-PSRemoting -Force), учётная запись входит в группу администраторов удалённого хоста, открыты порты 5985 для HTTP или 5986 для HTTPS. Для парка машин список хостов передают массивом в -ComputerName, а локальные переменные попадают внутрь блока через префикс $using:. В домене подключение по умолчанию идёт через Kerberos; при обращении по IP потребуются явные учётные данные или CredSSP.
Массовые операции удобно строить на конвейере: список имён из CSV прогоняется через ForEach-Object, а результат каждого вызова сохраняется в журнал, чтобы после прогона видеть, где старт не удался.
Ручной запуск или автоматический старт: что выбрать
Типы запуска и их влияние на систему
Тип запуска задаёт момент старта, а не саму возможность запустить службу. Автоматическая служба поднимается при загрузке до появления экрана входа, служба с ручным типом спокойно запускается кнопкой или командой, но сама не стартует.
| Тип запуска | Когда стартует | Когда уместен |
|---|---|---|
| Автоматически | При загрузке системы, вместе с базовыми службами | DHCP Client, DNS Client, службы, без которых нет сети и входа |
| Автоматически (отложенный запуск) | После того как SCM поднимет основные автоматические службы, обычно в течение пары минут после старта | W32Time, службы индексации и обновления, тяжёлые по дисковым операциям |
| Вручную | По запросу приложения, по триггеру или по команде администратора | Fax, службы развёртывания, сервисы, нужные периодически |
| Отключена | Никогда | Службы, которые не используются и создают риск, например Print Spooler на сервере без печати |
Практическое правило: «Автоматически» ставят только для того, без чего сервер теряет работоспособность сразу после загрузки. Остальное переводят в «Вручную»: это ускоряет старт и уменьшает число постоянно работающих процессов. Отложенный запуск выбирают для служб с длительной инициализацией, чтобы они не конкурировали за диск с загрузкой системы.
В Linux та же логика работает в systemd: ненужную службу отключают командой systemctl disable --now <имя>, что показано в руководстве по развёртыванию кластера Kubernetes на Ubuntu. Механизмы разные, принцип один: служба либо стартует при загрузке, либо ждёт явного запроса.
Зависимости служб и порядок запуска
Вкладка «Зависимости» делит связи на два блока: «Для работы этой службы необходимы следующие системные компоненты» и «Следующие системные компоненты зависят от этой службы». Если зависимость остановлена, SCM откажет в старте с ошибкой 1068. Примеры: Print Spooler опирается на «Удалённый вызов процедур (RPC)», SQL Server Agent не поднимется без SQL Server. Запускайте цепочку снизу вверх, от зависимостей к целевой службе; порядок автоматического старта SCM выстраивает сам по графу зависимостей, и ручное вмешательство в него ломает загрузку.
Служба с ручным типом может стартовать и без администратора: часть служб имеет триггеры запуска по событию, например по подключению устройства или обращению к сетевой папке. Триггеры видны командой sc qtriggerinfo <имя>.
Выдача прав на управление службой непривилегированному пользователю
Задача: оператор перезапускает один конкретный сервис, например агент резервного копирования, и при этом не входит в группу администраторов. Права на службу хранятся в её дескрипторе безопасности в формате SDDL, а меняются утилитой sc sdset. Графической вкладки «Безопасность» в свойствах службы на современных сборках Windows нет, поэтому работа идёт из командной строки или через групповую политику.
Получение текущего дескриптора безопасности
sc sdshow Spooler sc sdshow Spooler > C:\temp\spooler_sddl.txt
Вывод содержит DACL службы, например: D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU). Расшифровка основных SID: SY - LocalSystem (S-1-5-18), BA - встроенные администраторы (S-1-5-32-544), IU - интерактивные пользователи (S-1-5-4), SU - служебные учётные записи (S-1-5-6). Сохраните вывод до правок: он понадобится для отката. В PowerShell вызывайте sc.exe явно, иначе сработает алиас sc для Set-Content и вывод уйдёт в файл вместо экрана.
Изменение прав через sc sdset
Сначала получают SID пользователя:
(New-Object System.Security.Principal.NTAccount("DOMAIN\\operator1")).Translate([System.Security.Principal.SecurityIdentifier]).Value
Затем к исходному дескриптору добавляют ACE с правами RP (запуск службы) и WP (остановка):
sc sdset Spooler "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWP;;;S-1-5-21-1111111111-2222222222-3333333333-1105)"
Коды прав в SDDL, которые нужны чаще всего:
| Код | Право | Что разрешает |
|---|---|---|
| RP | SERVICE_START | Запуск службы |
| WP | SERVICE_STOP | Остановка службы |
| DT | SERVICE_PAUSE_CONTINUE | Пауза и продолжение работы |
| CC | SERVICE_QUERY_CONFIG | Чтение конфигурации |
| LC | SERVICE_QUERY_STATUS | Чтение состояния |
| SW | SERVICE_ENUMERATE_DEPENDENTS | Просмотр зависимостей |
| DC | SERVICE_CHANGE_CONFIG | Изменение конфигурации службы |
| RC | READ_CONTROL | Чтение дескриптора безопасности |
| WD | WRITE_DAC | Изменение прав |
| WO | WRITE_OWNER | Смена владельца |
Связка RP и WP даёт только запуск и остановку: поменять конфигурацию, удалить службу или переписать её дескриптор оператор не сможет.
sc sdset перезаписывает DACL целиком, а не добавляет запись. Если передать только новую ACE, системные права потеряются, и служба не запустится даже под LocalSystem. Поэтому новый дескриптор собирают из вывода sc sdshow, дописав одну ACE перед закрывающей скобкой. Откат выполнятся той же командой с сохранённым исходным DACL. Правку проверяйте на тестовом стенде: неверный SDDL приводит к отказу службы в запуске, а восстанавливать её придётся из сохранённой копии дескриптора или точки восстановления системы.
Пользователю, который управляет службой с удалённой машины, нужны ещё права на сетевой доступ к серверу и разрешение на вход, иначе RP и WP не дадут результата. Второй путь для домена описан ниже, в разделе про групповые политики, и там права раскладываются централизованно и без ручной сборки SDDL.
Восстановление службы после сбоя
Настройка действий при сбое
Вкладка «Восстановление» в свойствах службы задаёт реакцию SCM на неожиданное завершение процесса. Доступны три уровня: «Первое действие», «Второе действие», «Последующие действия» со значениями «Не выполнять действия», «Перезапуск службы», «Запуск программы», «Перезагрузка компьютера». Рядом настраивают задержку перезапуска и период «Сброс счётчика отказов через», по умолчанию одни сутки. Действие «Перезагрузка компьютера» выбирайте только для служб, без которых узел бесполезен: при ошибке в конфигурации цикл перезагрузок выведет сервер из строя.
Те же параметры задаются из командной строки:
sc failure Spooler reset= 86400 actions= restart/60000/restart/60000/restart/60000 sc failure Spooler reset= 86400 actions= restart/60000/restart/60000/run/60000 command= C:\scripts\svc_alert.cmd
reset= указывается в секундах, 86400 соответствует суткам и обнуляет счётчик отказов. В actions= идут пары «действие/задержка в миллисекундах»: restart/60000 означает перезапуск через минуту. Действие run требует параметра command= с путём к программе или скрипту. Счётчик растёт только при сбоях, обычная остановка администратором в него не попадает.
Диагностика причин сбоя
Основной источник сведений - журнал событий: eventvwr.msc, «Журналы Windows», «Система», фильтр по источнику Service Control Manager. События 7031 и 7034 фиксируют неожиданное завершение службы, 7000 и 7001 указывают на ошибки старта и проблему зависимостей, 7009 и 7011 означают истечение тайм-аута ожидания отклика, 7024 сообщает о завершении службы с ошибкой и приводит её код.
Быстрая проверка без журнала: sc query Spooler показывает состояние, sc queryex добавляет PID процесса. Дальше проверяют три вещи: целостность файлов (sfc /scannow и DISM /Online /Cleanup-Image /RestoreHealth), учётную запись службы и её пароль на вкладке «Вход», права этой учётной записи на «Вход в систему как служба» (secpol.msc, «Локальные политики», «Назначение прав пользователя»). Если приложение ведёт собственный лог, сопоставьте метку времени падения со своими записями: часто служба падает не из-за SCM, а из-за недоступного ресурса, файла конфигурации, порта или сетевой папки.
Централизованное управление через групповые политики
Настройка типа запуска через GPO
Для одной машины политику правят в gpedit.msc, для домена в gpmc.msc. Путь одинаков: Конфигурация компьютера, Политики, Конфигурация Windows, Параметры безопасности, Системные службы. В узле перечислены службы с текущим режимом; двойной клик открывает выбор «Автоматически», «Вручную» или «Отключена». Значения «Автоматически (отложенный запуск)» здесь нет, поэтому отложенный старт задают локально или командой sc config ... start= delayed-auto.
Настройка применяется при загрузке компьютера, принудительное обновление выполняется командой gpupdate /force. Политика имеет приоритет над локальными изменениями: если в GPO служба помечена как «Вручную», администратор запустит её вручную, но при следующем применении политики тип запуска вернётся к значению из GPO и служба перестанет стартовать при загрузке. Результат удобно проверять отчётом gpresult /h report.html.
Частый рабочий пример: для всех машин отдела задают автоматический запуск службы, отвечающей за обновления, чтобы не настраивать парк вручную. Настройка не применяется к машинам, где служба отсутствует или носит другое системное имя.
Делегирование прав через GPO
В том же узле кнопка «Изменить безопасность» открывает DACL службы и позволяет добавить пользователя или группу с правами «Запуск», «Остановка и приостановка», «Чтение», «Полный доступ». Это централизованный аналог sc sdset: права расходятся по всем машинам, на которые действует политика, а локальные правки дескриптора политика перезапишет при следующей обработке. Отдельная выгода в том, что SDDL не собирается вручную, а значит меньше риск сломать дескриптор.
Ограничение: список узла «Системные службы» привязан к шаблону операционной системы, на базе которого создана политика. Для службы, установленной сторонним приложением, записи может не быть, и тогда права выдают на этапе установки пакета или скриптом с sc sdset, а затем фиксируют в документации. Если служба есть только на части машин, настройка на остальные не повлияет.
Типовые ошибки при запуске служб и их решение
Коды появляются в диалоге оснастки и в выводе net start, а расшифровка с причиной и действиями собрана в таблице.
| Код и сообщение | Причина | Что делать |
|---|---|---|
| 1053, служба не ответила на запрос своевременно | Инициализация не уложилась в тайм-аут SCM (по умолчанию 30 000 мс) или служба ждёт внешний ресурс | Проверить зависимости, доступность базы, сетевых папок и портов, убрать лишние зависимости; при объективно медленном старте тайм-аут увеличивают через параметр реестра ServicesPipeTimeout и перезагрузку |
| 1067, процесс был неожиданно завершён | Служба падает при старте: права, целостность файлов, ошибка в конфигурации | Найти запись по источнику Service Control Manager в журнале событий, проверить права учётной записи, выполнить sfc /scannow и DISM /Online /Cleanup-Image /RestoreHealth, запустить исполняемый файл службы вручную, чтобы увидеть текст ошибки |
| 1069, служба не была запущена из-за ошибки входа в систему | Неверный пароль учётной записи службы или снято право «Вход в систему как служба» | Заново задать пароль на вкладке «Вход» и проверить назначение прав в secpol.msc; для групповых управляемых учётных записей убедиться, что хост входит в разрешённую группу |
| 1079, учётная запись службы отличается от учётной записи других служб на компьютере | Службы одного продукта работают под разными учётными записями и мешают друг другу при доступе к общим файлам или базе | Привести службы продукта к одной учётной записи с нужными правами |
| 1068, служба или группа зависимостей не удалось запустить | Остановлена служба, от которой зависит запускаемая | Открыть вкладку «Зависимости» и запустить зависимости по цепочке |
| 1058, служба не может быть запущена, так как она отключена | Тип запуска стоит «Отключена» | Вернуть «Вручную» или «Автоматически» и только потом запускать |
Порядок разбора: sc query <имя> для состояния, eventvwr.msc для причины, вкладки «Вход» и «Зависимости» для конфигурации. Если служба нормально работает сразу после правки и перестаёт стартовать после перезагрузки, ищите причину в групповой политике или в задании планировщика, которое меняет параметры.
Когда внешние симптомы касаются сети, а не самой службы, проверьте состояние DHCP Client, DNS Client и стека TCP/IP по руководству о восстановлении сетевых настроек Windows. Отключать службы, назначение которых вам неизвестно, не стоит: цена ошибки выше нескольких секунд экономии при загрузке.
Рабочий порядок для типового случая: уточните внутреннее имя службы через sc query или оснастку, проверьте зависимости, запустите её, задайте нужный тип запуска и, если сервис критичен, настройте действия при сбое и сохраните исходный дескриптор безопасности.