sc та Restart-Service: керування службами Windows з консолі — без services.msc
- Керування службами потребує прав адміна. Запускайте 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 name | Query 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 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.
Тип 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 затримки.
- 1-е падіння:
Переглянути поточні налаштування:
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-портів.
Типові пастки
Якщо служба зависла у стані STOP_PENDING, повторний sc stop не допомагає. Вирішується примусовим вбивством процесу (див. Сценарій 5) з подальшим sc start. Тайм-аут очікування явного завершення — до 125 секунд за замовчуванням, до цього sc висітиме.
sc config binPath= з лапкамиЯкщо шлях до exe містить пробіл, потрібні внутрішні лапки з escape:
sc config MyService binPath= "\"C:\Program Files\MyApp\svc.exe\" -arg"
Типова помилка — забути escape внутрішніх лапок, тоді служба створюється з некоректним шляхом і не стартує.
Set-Service -StartupType не зупиняєЗміна startup type через Set-Service не зупиняє працюючу службу. Якщо treба зараз зупинити і заборонити запуск, потрібні обидві команди: Stop-Service X + Set-Service X -StartupType Disabled.
sc deletesc 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!).
Пов'язане
- ← Назад до Атласу команд Windows.
tasklist/taskkill— коли процес треба вбити.Get-WinEvent(наступна спиця) — подивитися, чому служба падає.
services.msc і PowerShell не виключають одне одного. GUI — для огляду. CLI — для точкових змін і масових операцій.