Команда SC – управление службами.
Команда SC используется для конфигурирования, опроса состояния, остановки, запуска, удаления и добавления системных служб в командной строке Windows. Большая часть подкоманд команды SC применима так же по отношению к драйверам. При наличии соответствующих прав, команда SC может применяться для управления службами как на локальной, так и на удаленной системе.
Формат командной строки:
sc сервер [команда] [имя службы] параметр1 параметр2 .
При запуске SC.EXE без параметров, отображается подсказка по использованию команды.
сервер — имя или IP-адрес удаленной системы в формате «\\cервер».
query -Запрос состояния службы или перечисление состояний типов служб.
queryex — Запрос расширенного состояния службы или перечисление состояний типов служб.
start — Запуск службы.
pause — Отправка службе управляющего запроса PAUSE для приостановки ее работы.
interrogate — Отправка службе управляющего запроса INTERROGATE.
continue — Отправка службе управляющего запроса CONTINUE для возобновления ее работы.
stop — Отправка службе запроса STOP.
config — Изменение конфигурации службы (постоянное).
description — Изменение описания службы.
failure — Изменение действия, выполняемого службой при сбое.
failureflag — Изменение флага действия, выполняемого службой при сбое.
sidtype — Изменение типа SID службы.
privs — Изменение привилегий, требуемых для службы.
qc — Запрос данных конфигурации для службы.
qdescription — Запрос описания службы.
qfailure — Запрос действия, выполняемого службой при сбое.
qfailureflag — Запрос флага действия, выполняемого службой при сбое.
qsidtype — Запрос типа SID службы.
qprivs — Запрос привилегий, требуемых для службы.
qtriggerinfo — Запрос параметров службы.
qpreferrednode — Запрос предпочтительного узла NUMA службы.
delete — Удаление службы (из реестра).
create — Создание службы (добавление ее в реестр).
control — Отправка службе управляющего сигнала.
sdshow — Отображение дескриптора безопасности службы.
sdset — Установка дескриптора безопасности службы.
showsid — Отображение строки SID службы, соответствующей произвольному имени.
triggerinfo — Настройка параметров триггеров службы.
preferrednode — Задание предпочтительного узла NUMA службы.
GetDisplayName — Получение параметра DisplayName для службы.
GetKeyName — Получение имени раздела для службы (ServiceKeyName).
EnumDepend — Перечисление зависимостей службы.
Следующие команды не требуют имени службы:
sc сервер команда параметры boot -(ok | bad) Показывает, требуется ли сохранить последнюю загрузку в качестве последней удачной конфигурации загрузки
Lock -Блокировка базы данных служб
QueryLock -Запрос состояния блокировки (LockStatus) базы данных диспетчера управления службами (SCManager)
Справка для команд QUERY и QUERYEX:
Параметры QUERY и QUERYEX:
Если после команды query указано имя службы, будет возвращено cостояние этой службы. В этом случае дополнительные параметры не используются. Если после команды запроса указаны следующие параметры либо ничего не указано, выполняется перечисление служб.
type= — Тип служб для перечисления (driver, service, all) (по умолчанию = service)
state= — Состояние служб для перечисления (inactive, all) (по умолчанию = active)
bufsize= — Размер (в байтах) буфера перечисления (по умолчанию = 4096)
ri= — Номер индекса возобновления для начала перечисления (по умолчанию = 0)
group= — Группа служб для перечисления (по умолчанию = все группы)
Примеры использования SC.
sc query — Перечислить состояния активных служб и драйверов
sc query dnscache — Отобразить состояние службы DNS-клиент, имеющей короткое имя dnscache
Пример отображаемой информации:
Тип Состояние Код_выхода_Win32 | : 20 WIN32_SHARE_PROCESS : 4 RUNNING (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) : 0 (0x0) : 0 (0x0) : 0x0 : 0x0 |
sc \\mycomp queryex dnscache — отображение расширенного состояния службы DNS-клиент на компьютере с именем mycomp
Пример отображаемой информации:
Имя_службы: dnscache Тип Состояние Код_выхода_Win32 | : 20 WIN32_SHARE_PROCESS : 4 RUNNING (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) : 0 (0x0) : 0 (0x0) : 0x0 : 0x0 : 1312 : |
sc stop dnscache — остановить службу DNS-клиент на локальном компьютере
sc start dnscache — запустить службу DNS-клиент на локальном компьютере
sc query type= driver — отобразить информацию всех активных драйверов
sc query type= service — отобразить информацию всех активных служб Windows
sc query state= all — отобразить информацию всех активных драйверов и служб Windows
Обратите внимание на наличие пробела после знака равенства (state= all …) в параметрах перечисленных команд.
sc query type= driver group= NDIS — отобразить информацию обо всех драйверах группы NDIS ( сетевых драйверах )
Пример отображаемой информации:
Имя_службы: BfLwf
Выводимое_имя: Qualcomm Atheros Bandwidth Control
Тип Состояние   Код_выхода_Win32 Код_выхода_службы Контрольная_точка Ожидание | : 1 KERNEL_DRIVER : 4 RUNNING (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) : 0 (0x0) : 0 (0x0) : 0x0 : 0x0 |
.
.
.
Имя_службы: wna3100m
Выводимое_имя: NETGEAR WNA3100M N300 Wireless Mini USB Adapter
Тип Состояние   Код_выхода_Win32 Код_выхода_службы Контрольная_точка Ожидание | : 1 KERNEL_DRIVER : 4 RUNNING (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) : 0 (0x0) : 0 (0x0) : 0x0 : 0x0 |
sc query wna3100m — отобразить информацию о драйвере NETGEAR WNA3100M N300 Wireless Mini USB Adapter.
sc query type= interact — отобразить информацию обо всех интерактивных службах.
sc query state= inactive — отобразить информацию обо всех остановленных службах
sc query state= inactive > C:\Stopedsvc.txt — записать информацию обо всех остановленных службах в текстовый файл C:\Stopedsvc.txt . Перенаправление вывода в текстовый файл удобно использовать для сохранения информации и ее последующего использования.
sc qc dnscache — отобразить данные конфигурации для службы DNS-клиент.
Пример выводимой информации:
[SC] QueryServiceConfig: успех
Имя_службы: dnscache
Тип Тип_запуска Управление_ошибками Имя_двоичного_файла Группа_запуска Тег Выводимое_имя Зависимости &bnsp Начальное_имя_службы | : 20 WIN32_SHARE_PROCESS : 2 AUTO_START : 1 NORMAL : C:\Windows\system32\svchost.exe -k NetworkService : TDI : 0 : DNS-клиент : Tdx : nsi : NT AUTHORITY\NetworkService |
sc showsid dnscache — отобразить уникальный идентификатор SID службы DNS-клиент
Для конфигурирования системных служб используется команда sc config … , выполняющая изменение записи службы в реестре и в базе данных служб.
sc сервер config [имя службы] параметр1 параметр2.
Параметры командной строки:
Имя параметра включает знак равенства (=). Между знаком равенства и значением параметра должен быть пробел.
type= own|share|interact|kernel|filesys|rec|adapt — тип службы
start= boot|system|auto|demand|disabled|delayed-auto — тип запуска службы
error= normal|severe|critical|ignore — режим обработки ошибок
binPath= путь_к_двоичному_файлу — путь и имя исполняемого файла
group= группа_запуска — группа, к которой относится драйвер.
tag= yes|no наличие признака для определения порядка запуска внутри группы
depend= зависимости (разделенные / (косой чертой)) — зависимости службы
obj= имя_учетной_записи|имя_объекта
DisplayName= выводимое имя
password= пароль
Информация о драйверах и системных службах (сервисах) находится в разделе
HKLM\SYSTEM\CurrentControlSet\Services
Каждому драйверу или сервису соответствует свой раздел. Например, «msahci» — для драйвера стандартного SATA контроллера жестких дисков, «DNScache» — для службы «DNS клиент».
Управляем службами Windows с помощью PowerShell. Часть 2
Продолжаем знакомиться с тем, как осуществлять управление службами Windows с использованием PowerShell. В предыдущем посте мы рассмотрели, как получить статус службы на локальном и удаленном компьютере, произвести фильтрацию служб (например, найти только остановленные службы) и определить зависимые службы. В этом посте будут рассмотрены такие достаточно тривиальные вещи, как:
- Остановка службы
- Запуск службы
- Перезапуск службы
- Приостановка и возобновление работы
- Управление удаленными службами
- Настраиваем автозагрузку службы
Мы уделим большее внимание разбору команд в PowerShell для осуществления выше перечисленного на локальном компьютере. В разделе “управление службами удаленных компьютерах” мы рассмотрим, ограничения работы в PowerShell v2 и v3. Подробности под катом.
Так как команда для получения статуса службы называется Get-Service, догадаться о том, как пишутся другие команды не составит труда. На худой конец мы можем спросить у PowerShell обо всех командах, так или иначе относящихся к работе со службами. Обратите внимание, что мы использовали параметр –noun для получения всех команд, связанных со службами.
Взглянем на эти команды внимательнее.
STOP-SERVICE
Чтобы остановить службу, мы должны уточнить ее имя.
Однако в конвейер ничего не будет передано. Некоторые командлеты, такие как Stop-Service, созданы таким образом, что по умолчанию они не записывают объект в конвейер. Мы же заставим это сделать, использовав параметр –Passthru.
Если служба не запущена, то командлет ничего не выведет, равно как и не выдаст никакой ошибки. Поэтому иногда лучше передать объект в Stop-Service (естественно использовав при этом параметр –whatif).
Параметр –WhatIf был добавлен для того, чтобы мы посмотрели, что будет, если командлет будет запущен. Когда я удостоверюсь, что это именно та служба, которая меня интересует, я просто удалю -Whatif и остановлю службу.
Как я уже упомянул выше, если служба уже остановлена, то командлет ничего не сделает. И использование Stop-Service в этом случае никому не навредит. Однако я все же предпочитают более цивилизованный подход, а именно:
Если служба запущена, то объект передается в конвейер и отправляется в Stop-Service. Ниже приведен вариант с остановкой нескольких служб.
Некоторые службы не захотят останавливаться – в силу наличия зависимых служб – что мы и видим на скриншоте ниже.
В таком случае используем параметр –Force. В большинстве случаев это работает, но без “защиты от дурака”. Помните, что команда также остановит зависимые службы.
START-SERVICE
Запуск службы осуществляется аналогичным образом. Он поддерживает параметр –Whatif, и вам придется использовать –Passthru, чтобы увидеть объекты.
И снова: если служба уже запущена, командлет ничего не сделает. Однако вы можете попытаться запустить службу и получите такую ошибку.
Причиной тому в большинстве случаев является выключенные службы. Как конфигурировать настройки службы, я расскажу в следующей статье.
Если вы хотите запустить службы и все службы, зависимые от нее, используйте следующее выражение:
Мы должны явно получить зависимые службы, потому что Start-Service не запустит автоматически их.
RESTART-SERVICE
Вы удивитесь, но перезапуск службы работает также как два предыдущих примера. Используйте –Passthru, если хотите убедиться, что служба запущена.
Так как мы осуществляем остановку службы, нам может понадобиться параметр –Force.
ПРИОСТАНОВКА И ВОЗОБНОВЛЕНИЕ РАБОТЫ
Работа некоторых служб может быть приостановлена на некоторое время, а затем возобновлена, и мы можем это сделать через PowerShell. Однако если служба не удовлетворяет требованиям, мы получим такие ошибки. (на примере показано, что мы пытались приостановить службу bits)
В чем же проблема? Смотрим на объект (используя Get-Service).
Если значение свойства CanPauseAndContinue равно True, значит мы можем приостанавливать и возобновлять работу службы. Найдем такие службы:
Как мы видим, не так много служб удовлетворяют этому требованию.
Готовы возобновить работу службы? Используйте следующее выражение:
Оба командлета также поддерживают –Whatif.
УДАЛЕННЫЕ СЛУЖБЫ
Как вы могли обратить внимание, все примере выше мы демонстрировали на локальном машине. И это неслучайно. К сожалению даже в PowerShell v3, ни у одного из этих командлетов нет параметра, который позволял бы управлять службой на удаленном компьютере. Get-Service, конечно, поддерживает параметр –Computername, но не более. Службу лицезреть вы сможете, а что-либо с ней сделать не получится. Нет, можно, конечно, если удаленный компьютер работает с PS v2 и включен PowerShell Remoting. Тогда мы можете использовать все выше приведенные команды, используя Invoke-Command для удаленного компьютера или PSSession. С другой стороны, проще управлять одной службой на нескольких серверах.
Управление службами на удаленных компьютерах не ограничивается вышеперечисленным, но это уже будет предмет рассмотрения последующих статей.
Все эти командлеты могут быть использованы в конвейерном выражении и зачастую это лучший вариант. Использование Get-Service для получения объектов и последующая передача их в подходящий командлет.
УСТАНАВЛИВАЕМ УДАЛЕННЫЙ СТАТУС
Итак, мы выяснили, что у командлета Stop-Service отсутствует такой полезный параметр как –Computername. Мы можете использовать эти команды в удаленной сессии, обратившись к командлету Invoke-Command, что уже само по себе продуктивно, если вы работаете со службой на нескольких компьютерах. Одно можно запускать, останавливать, перезапускать, ставить на паузу и запускать заново, используя Set-Service.
Эта команда поддерживает параметр –WhatIf. Вы также должны использовать –Passthru для передачи объектов в конвейер.
Валидными значениям для параметра –Status являются “запущена” (running), “остановлена” (stopped) и “на паузе” (paused). Помните, что у службы есть зависимые службы, мы не сможете изменять ее, что и продемонстрировано на скриншоте ниже.
К сожалению, у Set-Service отсутствует параметр –Force, поэтому придется вернуться к использованию PowerShell remoting и Invoke-Command. Если вы хотите перезапустить удаленную службу, используйте следующую команду:
Не забудьте использовать –Passthru, в противном случае вторая команда Set-Service ничего не осуществит.
Что по мне, так я предпочитаю работать сразу с несколькими службами, которые я не могу удаленно остановить, используя Set-Service, хотя их запуск проблем составляет. Я использую Invoke-Command. Но помните, что используя параметр –Computername PowerShell осуществляет подключение, используя RPC и DCOM, что может привести к проблемам с файрволом. Invoke-Command использует PowerShell remoting, который мы может быть еще не настроили или не включили.
УСТАНАВЛИВАЕМ ТИП АВТОЗАПУСКА СЛУЖБЫ
Set-Service полезнен, когда вы хотите включить или отключить службу, используя параметр –StartupType. Если Вы настроили службу, используя значения Automatic, Manual or Disabled. К сожалению, не существует варианта для Automatic (Delayed).
Однако, просто взглянув на объект, мы не сможем сказать, к какому типу автозагрузки он относится.
Как это сделать – одна из тем следующей статьи.
Помните, что изменение типа автозагрузки не повлияет на текущий статус службы.
Так что если вы хотите выключить и остановить (или включить и запустить) службу, передайте объект в подходящий командлет.
Технически, Set-Service позволяет вам изменить отображаемое имя службы и описание, но лично мне никогда не приходилось использовать в своей работе. Я использую Set-Service для включения и выключения служб. Если необходимо управлять службами удаленно, то я использую Invoke-Command.
Все, что я продемонстрировал в последних статьях, было связано с использованием специфических типов объектов службы, которые, как вы могли заметить, имеют некоторые ограничения. В следующей статье мы рассмотрим другие возможности по управлению службами, которые призваны обойти эти ограничения.