Гид по технологиям

Управление службами Windows через командную строку

6 min read Системное администрирование Обновлено 09 Apr 2026
Управление службами Windows через командную строку
Управление службами Windows через командную строку

Мониторинг служб Windows через командную строку

Зачем использовать командную строку для управления службами

Стандартный путь — открыть Панель управления → Администрирование → Службы (services.msc) и управлять сервисами вручную. Это удобно для одиночных машин, но неудобно при работе с десятками или сотнями компьютеров. Командная строка даёт:

  • Быструю проверку состояния всех служб на удалённом хосте.
  • Удалённую остановку/запуск конкретной службы одной командой.
  • Возможность автоматизировать операции через скрипты и планировщик задач.

Важно: для удалённого использования SC нужны административные права на целевой хост и разрешённый сетевой доступ (RPC/SMB).

Основные команды SC и примеры

Краткое объяснение терминов:

  • Служба — фоновый процесс Windows, который запускается системой или по требованию.
  • Имя службы (ServiceName) — внутренний идентификатор, а не отображаемое имя.

Примеры команд:

  • Просмотр всех служб на локальной машине:
sc query
  • Просмотр всех служб на удалённой машине (замените COMPUTERNAME):
sc \\COMPUTERNAME query | more
  • Показать только остановленные службы:
sc \\COMPUTERNAME query state= inactive | more
  • Показать статус конкретной службы:
sc \\COMPUTERNAME query Spooler
  • Остановить службу на удалённом хосте:
sc \\COMPUTERNAME stop Spooler
  • Запустить службу:
sc \\COMPUTERNAME start Spooler

Примечание: символы экранирования — два обратных слеша \\ перед именем компьютера.

Просмотр вывода постранично и логирование

Пайп | more делает вывод постраничным. Чтобы сохранить вывод в файл на локальной машине, перенаправьте результат:

sc \\COMPUTERNAME query > C:\temp\services.txt

Чтобы логировать результаты операций (старт/стоп) используйте перенаправление вывода в файл:

sc \\COMPUTERNAME stop Spooler >> C:\temp\results.txt 2>&1

Пример интерактивного скрипта на VBScript для остановки/запуска службы

Этот скрипт спрашивает имя компьютера, имя службы и действие, выполняет команду SC и сохраняет вывод в файл. Поместите код в файл с расширением .vbs и запустите двойным щелчком или через cscript.

' sc-control.vbs
Option Explicit
Dim objShell, strComputer, strService, strAction, cmd, exec, outputFile, fso, outFile, line
Set objShell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
outputFile = "C:\\temp\\results.txt"
If Not fso.FolderExists("C:\\temp") Then fso.CreateFolder("C:\\temp")
strComputer = InputBox("Введите имя компьютера (или "." для локального):", "Компьютер", ".")
If strComputer = "" Then WScript.Quit
strService = InputBox("Введите имя службы (ServiceName):", "Служба")
If strService = "" Then WScript.Quit
strAction = InputBox("Введите действие: start или stop:", "Действие", "stop")
If LCase(strAction) <> "start" And LCase(strAction) <> "stop" Then
  WScript.Echo "Неверное действие"
  WScript.Quit
End If
cmd = "cmd /c sc \\\" & strComputer & "\\\" " & LCase(strAction) & " " & strService
Set exec = objShell.Exec(cmd)
Set outFile = fso.OpenTextFile(outputFile, 8, True)
outFile.WriteLine("=== " & Now & " ===")
outFile.WriteLine("Команда: " & cmd)
Do While Not exec.StdOut.AtEndOfStream
  line = exec.StdOut.ReadLine()
  outFile.WriteLine(line)
Loop
If Not exec.StdErr.AtEndOfStream Then
  Do While Not exec.StdErr.AtEndOfStream
    line = exec.StdErr.ReadLine()
    outFile.WriteLine("ERR: " & line)
  Loop
End If
outFile.Close
WScript.Echo "Готово. Результаты в " & outputFile

Важно: этот пример запускает внешнюю команду cmd и записывает вывод в файл. Убедитесь, что у пользователя есть права на запись в C:\temp и права администратора на целевой хост.

Современная альтернатива — PowerShell

PowerShell предоставляет объекты, лучше подходит для автоматизации и даёт гибкость:

  • Локально:
Get-Service -Name Spooler
Stop-Service -Name Spooler -Force
Start-Service -Name Spooler
  • Удалённо, если включён PowerShell Remoting:
Invoke-Command -ComputerName COMPUTERNAME -ScriptBlock { Stop-Service -Name Spooler -Force }
  • Получить все остановленные службы на удалённом хосте:
Invoke-Command -ComputerName COMPUTERNAME -ScriptBlock { Get-Service | Where-Object {$_.Status -eq 'Stopped'} }

Преимущества PowerShell: структурированный вывод (объекты), более тонкий контроль и возможность использовать креденшлы безопасно.

Когда использовать SC, а когда PowerShell

  • Используйте SC если:

    • Нет PowerShell Remoting.
    • Нужно быстро выполнить одну команду и получить текстовый вывод.
    • Требуется совместимость со старыми системами.
  • Используйте PowerShell если:

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

Проверки прав и сетевых требований

Важно:

  • Для выполнения SC против удалённой машины пользователь должен быть администратором на целевой машине.
  • Необходим доступ к RPC/SMB (обычно порты TCP 135, 139, 445 и динамические порты RPC). В сетях с жёстким firewall это может быть заблокировано.
  • Если машина находится в другом домене, потребуется доверие между доменами или явные учётные данные.

Проверка соединения:

ping COMPUTERNAME
telnet COMPUTERNAME 135
sc \\COMPUTERNAME query

Если ping проходит, но sc возвращает ошибку доступа, проверьте права и UAC (локальная политика может блокировать удалённое управление даже для членов группы Администраторы).

Отказоустойчивость и сценарии, когда это не сработает

Когда SC может не помочь:

  • Служба висит в состоянии STOP_PENDING длительное время — остановка не гарантирует немедленного завершения.
  • Процессы зависли на уровне драйвера или ядра — SC не сможет завершить такие процессы.
  • Низкий уровень сети/брендмауэр блокирует RPC/SMB.

Альтернативы в этих случаях:

  • Перезапуск сервиса-зависимости или связанного процесса вручную.
  • Перезагрузка сервера как крайняя мера.
  • Использование WMI/PowerShell с расширенными правами.

Чек-листы по ролям

Сисадминистратор:

  • Проверьте административные права на целевой хост.
  • Убедитесь, что порт 135 и SMB открыты.
  • Логируйте операции и сохраняйте результаты в централизованное хранилище.

Служба поддержки/Helpdesk:

  • Ищите отображаемое имя службы и ServiceName (используйте services.msc для проверки).
  • Если нужно быстро остановить сервис — используйте sc stop, записывайте причину в тикет.

DevOps/Automation:

  • Предпочитайте PowerShell Remoting и Runbooks.
  • Добавьте retries и проверки состояния после операций.

Шаблон SOP для остановки/запуска службы

  1. Подтвердить причину и окно обслуживания.
  2. Проверить зависимости службы:
sc qc Spooler
  1. Сделать бэкап конфигурации/важных файлов (если релевантно).
  2. Выполнить остановку и зафиксировать вывод:
sc \\COMPUTERNAME stop Spooler >> C:\temp\results.txt 2>&1
  1. Подтвердить состояние:
sc \\COMPUTERNAME query Spooler
  1. При проблемах восстановить из резервной копии или перезагрузить сервер.

Критерии приёмки

  • Служба должна перейти в состояние STOPPED в течение согласованного окна.
  • Логи операций должны быть сохранены и прикреплены к тикету.

Отладка и распространённые ошибки

  • ERROR 5: Access is denied — нет прав администратора.
  • The account is not authorized to logon locally — попробуйте использовать учетные данные доменного администратора или включить управление удалёнными службами в политике.
  • RPC server is unavailable — проблема с сетью или службой RPC на удалённом хосте.

Советы:

  • Запустите оболочку от имени администратора.
  • Используйте PsExec или PowerShell Remoting как альтернативу при проблемах с SC.

Пример автоматизации с PowerShell и параллельной обработкой

$computers = Get-Content -Path C:\temp\computers.txt
$service = 'Spooler'
$script = { param($svc) Stop-Service -Name $svc -Force -ErrorAction SilentlyContinue; Get-Service -Name $svc }
$results = Invoke-Command -ComputerName $computers -ScriptBlock $script -ArgumentList $service -ThrottleLimit 20
$results | Export-Csv C:\temp\svc-results.csv -NoTypeInformation

Этот подход масштабируется и возвращает структурированный CSV для последующего анализа.

Безопасность и соответствие

  • Никогда не храните пароли в открытом виде в скриптах. Используйте защищённые учётные данные (Credential Manager, секретные хранилища).
  • Логи операций считаются служебной информацией. При работе с клиентскими машинами соблюдайте политики конфиденциальности.

Быстрый справочник (cheat sheet)

  • sc \HOST query — список служб на HOST
  • sc \HOST query state= inactive — только остановленные
  • sc \HOST query ServiceName — статус конкретной службы
  • sc \HOST stop ServiceName — остановить
  • sc \HOST start ServiceName — запустить
  • PowerShell: Get-Service, Stop-Service, Start-Service, Invoke-Command

Ментальные модели и рекомендации

  • Думайте в терминах зависимостей: останавливая сервис, проверьте, не зависит ли от него что-то важное.
  • Минимизируйте время простоя: тестируйте команды на тестовом хосте и логируйте результат.
  • Автоматизируйте повторы и проверки: если служба не остановилась, попробуйте повторную команду с таймаутом, затем эскалацию.

Решения для распространённых сценариев

  • Если вы не можете подключиться по SC: проверьте сети, firewall и права. Попробуйте PsExec или PowerShell Remoting.
  • Если служба не останавливается и висит в STOP_PENDING: просмотрите журнал событий (Event Viewer) и процессы, связанные с этой службой.

Заключение

SC — простой и надёжный инструмент для администраторов, которым нужно быстро проверять и управлять службами на локальных и удалённых машинах. Для долгосрочной автоматизации и сложной логики лучше использовать PowerShell. Всегда проверяйте права, сетевые правила и зависимости перед выполнением операций, и логируйте результаты.

Краткие рекомендации:

  • Используйте SC для быстрых одноразовых задач и диагностики.
  • Используйте PowerShell для сценариев автоматизации и массовых изменений.

Поделитесь в комментариях: какой инструмент вы используете чаще — SC или PowerShell, и какие приёмы автоматизации помогают вам в работе?

Image Credit: Shutterstock

Окно «Службы» в Windows с перечислением служб

Управление компьютером и подключение к удалённому хосту

Диалог подключения к другому компьютеру в Windows

Вывод команды sc query с состоянием служб

Список остановленных служб в выводе sc query

Состояние сервиса STOP_PENDING при остановке

Запрос имени сервиса в скрипте

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

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как сделать карусель Instagram в InDesign
Дизайн

Как сделать карусель Instagram в InDesign

Как объединить PDF на Mac
Mac

Как объединить PDF на Mac

Как примерить тату в Photoshop
Дизайн

Как примерить тату в Photoshop

Установка и настройка Zabbix на Ubuntu/Debian
Мониторинг.

Установка и настройка Zabbix на Ubuntu/Debian

Подставка для телефона из глины своими руками
Ремесла

Подставка для телефона из глины своими руками

Как эффективно использовать Pinterest
Социальные сети

Как эффективно использовать Pinterest