sc + Restart-Service: керування службами Windows — IT-Wiki
» » » sc та Restart-Service: керування службами Windows з консолі — без services.msc
ВИП. №187· липень 2026· НІЖИН

Новий формат бізнесу — у цифрі, у вашій щоденній роботі.

Автоматизація обліку, власні розробки на BAS/1С, IP-телефонія та відеоспостереження. Пишемо про те, що робимо — і робимо те, про що пишемо.

Популярні

    sc та Restart-Service: керування службами Windows з консолі — без services.msc

    IT-Wiki / Атлас команд Windows 15 квітня 2026 Переглядів: 118 Автор: Claudia

    Перед стартом
    • Керування службами потребує прав адміна. Запускайте cmd або PowerShell як адміністратор.
    • sc — це sc.exe, legacy-команда. У PowerShell 7+ алiас sc НЕ прив'язаний до sc.exe — треба писати sc.exe явно, або використовувати PS-командлети.
    • Усі приклади працюють і на Windows 10/11, і на Windows Server 2016+.

    Яку команду вибрати: sc vs PowerShell

    Це одне з типових «чому у Windows 10 способів робити одне й те саме».

    • sc.exe — швидка, працює навіть без PowerShell, синтаксис коротший у рядку. Але менш гнучка: не повертає об'єктів, parsing виводу — через findstr.
    • PowerShell (Get-Service, Restart-Service, Set-Service, Start-Service, Stop-Service) — повертає об'єкти, гарно ланцюжиться (|), легко скриптувати.

    Типовий вибір: для інтерактивної разової дії — sc query wuauserv. Для скриптів, автоматизації, масових операцій — PowerShell.

    Довідкова таблиця — sc.exe

    КомандаЩо робить
    sc query [name]Статус служби (running/stopped/paused). Без name — усі запущені.
    sc queryex nameРозширений статус з PID процесу — корисно для kill-ання.
    sc query type= service state= allУсі служби (включно зі stopped). Увага: пробіл після =обов'язковий.
    sc start nameЗапустити.
    sc stop nameЗупинити.
    sc config name start= auto|delayed-auto|demand|disabledЗмінити тип запуску.
    sc config name binPath= "..."Змінити шлях до exe.
    sc qc nameQuery Config — показати повну конфігурацію служби.
    sc qfailure nameПереглянути recovery actions.
    sc failure name reset= N actions= restart/60000/restart/60000/run/0Налаштувати recovery на падіння.
    sc description name "..."Описати службу.
    sc create name binPath= "..." start= autoСтворити нову службу.
    sc delete nameВидалити службу.
    Синтаксис sc — пастка на рівному місці

    Після = у параметрах sc config і sc failure завжди має бути пробіл. start= auto — працює. start=auto — не працює, але помилка невиразна. Це єдиний CLI-інструмент Windows з такою особливістю, тому перевіряйте двічі при копіюванні з чужих скриптів.

    Сценарій 1. Дізнатися стан служби й перезапустити її

    sc:

    sc query spooler

    У виводі: STATE : 4 RUNNING. Перезапуск класичним способом — стоп+старт:

    sc stop spooler
    sc start spooler

    Між ними може знадобитися пауза, якщо служба довго зупиняється. sc не має рестарту в одну команду.

    PowerShell:

    Get-Service spooler
    Restart-Service spooler -Force

    -Force — потрібне якщо у служби є залежні, які теж треба перезапустити. Без нього буде запит підтвердження.

    Сценарій 2. Змінити тип запуску (startup type)

    Задача: вимкнути Print Spooler на серверах без принтерів (регулярна security-вимога після PrintNightmare).

    sc:

    sc stop spooler
    sc config spooler start= disabled

    PowerShell:

    Stop-Service spooler
    Set-Service spooler -StartupType Disabled

    Значення -StartupType: Automatic, AutomaticDelayedStart, Manual, Disabled.

    Delayed-auto — для важкого старту

    Тип AutomaticDelayedStart (sc config X start= delayed-auto) — служба запускається через 2 хвилини після boot. Корисно для важких служб, які вимагають щоб мережа, AD, DNS уже підтяглися (бекапи, моніторинг, антивіруси). Зменшує час boot'у, бо одразу стартує критичний мінімум.

    Сценарій 3. Перезапуск з залежностями

    Задача: треба перезапустити W32Time (Windows Time), але вона залежить від RPC, і від неї залежать інші — потрібно правильний порядок.

    Перевірити залежності перед запуском:

    Get-Service W32Time | Select-Object -ExpandProperty ServicesDependedOn

    І зворотно — хто залежить від W32Time:

    Get-Service W32Time | Select-Object -ExpandProperty DependentServices

    Правильний рестарт з усіма залежними (Force зупиняє залежні, потім стартує їх разом):

    Restart-Service W32Time -Force

    sc еквівалент — нема прямого, треба стартувати стек вручну.

    Сценарій 4. Налаштування recovery actions — «рестартуй мене, якщо я впаду»

    Задача: ваш власний application-сервіс іноді крашиться раз-два на місяць. Треба, щоб Windows автоматично стартував його після падіння.

    sc failure MyAppService reset= 86400 actions= restart/60000/restart/60000/run/0

    Розбір:

    • reset= 86400 — лічильник «скільки падінь» скидається через 86400 секунд (24 години).
    • actions= — список пар тип/мілісекунди затримки. У прикладі:
      • 1-е падіння: restart/60000 — перезапустити через 60 секунд.
      • 2-е: те саме.
      • 3-е й далі: run/0 — зовнішня дія (запустити команду) з 0 затримки.

    Переглянути поточні налаштування:

    sc qfailure MyAppService

    Це те саме, що вкладка Recovery у services.msc, але без GUI.

    Сценарій 5. PID процесу служби — щоб kill-нути, якщо застрягла

    Задача: Restart-Service висне, і сам stop теж — процес служби не завершується. Треба знайти PID і вбити taskkill'ом.

    sc queryex spooler

    Вивід містить PID : 4532. Далі:

    taskkill /F /PID 4532

    Або в PowerShell одним рядком:

    Get-Process -Id (Get-WmiObject Win32_Service -Filter "Name='spooler'").ProcessId | Stop-Process -Force

    Після примусового вбивства — треба перевірити, що state не застряг у STOP_PENDING:

    sc query spooler

    Сценарій 6. Масова перевірка — «які служби впали на 50 серверах»

    $hosts = Get-Content C:\Temp\servers.txt
    foreach ($h in $hosts) {
        $s = Get-Service -ComputerName $h -Name 'BITS','wuauserv','W32Time' -ErrorAction SilentlyContinue
        foreach ($svc in $s) {
            if ($svc.Status -ne 'Running') {
                [PSCustomObject]@{
                    Server = $h
                    Service = $svc.Name
                    Status = $svc.Status
                }
            }
        }
    } | Export-Csv C:\Temp\stopped-services.csv -NoTypeInformation

    Get-Service -ComputerName вимагає прав адміна на цільовій машині і відкритих WMI-портів.

    Типові пастки

    Пастка 1: STOP_PENDING назавжди

    Якщо служба зависла у стані STOP_PENDING, повторний sc stop не допомагає. Вирішується примусовим вбивством процесу (див. Сценарій 5) з подальшим sc start. Тайм-аут очікування явного завершення — до 125 секунд за замовчуванням, до цього sc висітиме.

    Пастка 2: sc config binPath= з лапками

    Якщо шлях до exe містить пробіл, потрібні внутрішні лапки з escape:

    sc config MyService binPath= "\"C:\Program Files\MyApp\svc.exe\" -arg"

    Типова помилка — забути escape внутрішніх лапок, тоді служба створюється з некоректним шляхом і не стартує.

    Пастка 3: Set-Service -StartupType не зупиняє

    Зміна startup type через Set-Service не зупиняє працюючу службу. Якщо treба зараз зупинити і заборонити запуск, потрібні обидві команди: Stop-Service X + Set-Service X -StartupType Disabled.

    Небезпека: sc delete

    sc delete одразу видаляє реєстровий ключ служби. Відновити — тільки заново створити через sc create з тими ж параметрами (а ви їх пам'ятаєте?). Перед sc delete завжди робіть sc qc NAME і зберігайте повний вивід — саме звідти потім брати binPath, start, description, dependencies.

    Чеклист типових операцій

    Пам'ятка
    • Перевірка стану: sc query X / Get-Service X.
    • Перезапуск (правильно, з залежними): Restart-Service X -Force.
    • Змінити startup: sc config X start= auto або Set-Service X -StartupType Automatic.
    • Delayed-auto: sc config X start= delayed-auto.
    • Recovery при падінні: sc failure X reset= 86400 actions= restart/60000/restart/60000//0.
    • Знайти PID: sc queryex X.
    • Залежності: Get-Service X | Select -Expand ServicesDependedOn.
    • Повна конфігурація: sc qc X (зберегти перед delete!).

    Пов'язане

    services.msc і PowerShell не виключають одне одного. GUI — для огляду. CLI — для точкових змін і масових операцій.

    Опубліковано: 15-04-2026, 19:10 · Автор: Claudia
    Вхід
    Опитування

    Якою програмою обліку ви користуєтесь?