Короткий ответ

Restart-Service без кода SCM — лотерея. Снимите состояние, тип запуска, зависимости, учётку Log On, Win32ExitCode и события 7000/7001/7023/7034. Частые якоря: зависимость Stopped (1068), таймаут 1053, просроченный пароль gMSA/доменной учётки, диск 0 байт, патч.

Не ставьте службу в Automatic Delayed «чтобы скрыть гонку» без понимания зависимости.

Симптомы и как отличить

  • После загрузки сервис в Stopped / StartPending.
  • В Services.msc: «Error 1068: The dependency service or group failed to start».
  • 1053: не ответила вовремя.
  • Зависимые роли (IIS, SQL, AD DS) не работают, хотя «сервер пингуется».
КартинаДругая статья
C: полныйдиск
Сломалось сразу после KBWindows Update
TermService / RDPRDP
NTDS на DCDC

Возможные причины

  1. Зависимость (RPCSS, HTTP, W32Time, NTDS) не Running.
  2. Log on as: пароль сменён, учётка lock, нет «Log on as a service».
  3. Исполняемый файл отсутствует, путь в кавычках сломан, антивирус карантин.
  4. Таймаут медленного диска/сети (1053).
  5. Trigger Start: служба не должна жить всегда — вы стартуете вручную не тот режим.
  6. Повреждённые параметры в SCM после ручного sc config.

Диагностика

Подставьте имя службы (пример TermService или ваша прикладная):

Get-Service TermService | Format-List *
Get-CimInstance Win32_Service -Filter "Name='TermService'" |
  Format-List Name, State, StartMode, StartName, PathName, ExitCode
sc.exe qc TermService
sc.exe qfailure TermService
sc.exe enumdepend TermService

Журнал SCM:

Get-WinEvent -FilterHashtable @{ LogName = 'System'; Id = 7000,7001,7022,7023,7024,7034,7041 } -MaxEvents 30 |
  Format-Table TimeCreated, Id, Message -Wrap

7001 — зависимость; 7041 — не удалось войти как пользователь службы.

Проверка учётки:

Get-CimInstance Win32_Service -Filter "Name='TermService'" | Select-Object StartName
Get-ADUser 'svc-app' -ErrorAction SilentlyContinue -Properties LockedOut, PasswordExpired, Enabled

Диск и файл:

Get-Volume -DriveLetter C | Format-List SizeRemaining
Get-AuthenticodeSignature 'C:\Windows\System32\svchost.exe'

Для своей службы проверьте PathName из WMI — файл на месте, кавычки вокруг пути с пробелами.

Решение

Сценарий A. 1068 — зависимость

Поднимите цепочку снизу: сначала зависимость, потом целевая.

Get-Service TermService -DependentServices
Start-Service TermService

Не ставьте зависимости в Disabled, чтобы «ускорить загрузку».

Сценарий B. Пароль / gMSA

Обновите пароль в SCM или назначьте gMSA. Права «Log on as a service» через GPO, не локальную галку вразброс.

Сценарий C. 1053 таймаут

Ищите, почему процесс не сигналит SCM: блокировка DLL, сеть к лицензионному серверу, диск. Увеличение ServicesPipeTimeout в реестре — последнее, документированное изменение, не первая кнопка.

Сценарий D. После обновления

См. откат KB. Не sfc /scannow как единственный шаг без журнала CBS.

Сценарий E. Disabled после GPO

GP preferential: «системные службы». Проверьте RSOP computer. Иначе GPO снова убьёт ручной Start.

Сценарий F. Разбор кода и цепочки до третьего Restart

Выпишите Win32ExitCode из Win32_Service и сопоставьте с System 7000/7023. Код 1068 без имени зависимости бесполезен — sc.exe qc показывает DEPENDENCIES. Поднимите их по одному и смотрите, какая не держится.

$svc = 'TermService'
sc.exe enumdepend $svc
sc.exe qc $svc
Get-WinEvent -FilterHashtable @{ LogName = 'System'; Id = 7000,7001,7023,7034 } -MaxEvents 15 |
  Format-List TimeCreated, Id, Message

Если PathName указывает на каталог на D: и том не смонтировался — это не «служба сломалась», а порядок дисков/iSCSI. Delayed Auto Start маскирует гонку с SAN, но не лечит отсутствующий LUN.

Учётка contoso\svc-app: проверьте «Log on as a service» в RSOP и lockout. После смены пароля в AD SCM хранит старый секрет, пока его не обновят. gMSA снимает эту класс задач.

Не ставьте службу в Manual «временно»: после reboot роль молчит, тикет возвращается. Automatic или Automatic (Delayed) — осознанный выбор, зафиксированный в runbook.

Как проверить, что проблема устранена

Get-Service TermService | Format-Table Name, Status, StartType
Get-CimInstance Win32_Service -Filter "Name='TermService'" | Format-List State, ExitCode, StartName

ExitCode 0, Status Running. Зависимый функционал (RDP, сайт, очередь) проверен с клиента, не только зелёная оснастка. После reboot — служба в ожидаемом состоянии без ручного Start.

Если не помогло

  • StartPending бесконечно: снимите процесс, hang dump, не третий Restart.
  • Служба падает через секунды: приложение, не SCM — его лог.
  • Только после входа пользователя: Interactive vs Session 0, права на путь.
  • AD DS не стартует — диск/NTDS, не sc start NTDS в цикле.

Сверьте StartType: Disabled из GPO снова убьёт ручной старт после gpupdate. Для прикладной службы сохраните sc.exe qc и PathName в заявку: часто после патча «пропал» каталог на D:, а SCM всё ещё указывает туда. Не меняйте тип запуска на Automatic Delayed, пока не поняли зависимость от сети или диска. Если учётка Log On — contoso\svc-app, проверьте lockout и PasswordExpired до следующего Restart.

Профилактика

  • Мониторинг Stopped для Automatic-служб.
  • gMSA вместо пароля в SCM.
  • Зависимости не режьте GPO «неиспользуемые службы» пакетом с интернета.
  • Перед патчем — список Automatic и baseline на DC.
  • Сохраняйте sc.exe qc и StartName в документации роли: после смены пароля сервиса обновляйте SCM в том же окне, что и AD. Не ставьте Delayed Start «на все подряд», только где доказана гонка с NIC или SAN.

FAQ

Почему Restart помогает на пять минут?

Процесс стартует, потом упирается в зависимость/лицензию/диск. Журнал между падениями важнее кнопки.

Automatic (Delayed Start) — это решение 1068?

Иногда маскирует гонку с сетью. Сначала исправьте зависимость и DHCP/DNS, не прячьте гонку.

Можно ли recover: restart в sc failure бесконечно?

Цикл restart без лимита маскирует утечку и бьёт по диску. Recover — после диагностики, с счётчиком.

Код 577 / подпись драйвера?

Это уже целостность образа и политики Code Integrity, не «служба». Не отключайте проверку подписи как постоянный фикс.

Нужно ли сразу sfc / DISM?

После того как журнал CBS/SCM указал на повреждённый компонент. Не вместо чтения 7001. Сначала зависимости и учётка Log On, потом уже целостность образа.