Управление службами в Windows PowerShell

В этой статье рассмотрены способы решения некоторых типичных задач, связанных со службами с помощью Windows PowerShell.

Служба (service) — это процесс, который запускается на устройстве в фоновом режиме для выполнения определенных действий в ответ на запросы пользователей, приложений, системы.

Состав имеющихся в наличии и запущенных служб зависит от версии операционной системы и установленных в ней приложений.

Основным инструментом для управления службами в графическом режиме на локальном компьютере является консоль Службы, которая находится в программной группе Средства администрирования Windows. Запустить консоль

Службы также можно выполнив команду services.msc в диалоговом окне Выполнить. Также в состав всех версий операционной системы Windows, входит стандартная утилита net.exe командного интерпретатора cmd.exe, в которой для управления службами предусмотрены команды net start и net stop.

Как просмотреть список служб в Windows PowerShell

Запустите консоль Windows PoweShell с административными привилегиями.
Чтобы получить список служб зарегистрированных на локальном компьютере, используйте командлет:

Get-Service

На скриншоте ниже видно, что по умолчанию отображаются имя службы (колонка Name), её отображаемое имя (колонка DisplayName) и состояние (колонка Status).

Для того чтобы отобразить только работающие в данный момент службы, то нужно отфильтровать объекты, у которых значением свойства Status является строка "Running". Для этого выполните команду:

Get-Service | Where-Object {$_.Status -eq "Running"}

Чтобы просмотреть службы зарегистрированные на удалённом компьютере, можно воспользоваться WMI классом Win32_Service. Если с помощью командлета Select-Object получить свойства State, Name, и DisplayName объекта Win32_Service, то формат выводимых данных будет похож на формат вывода командлета Get-Service. Например:

Get-WmiObject -Class Win32_Service -ComputerName winnoteRU | Select-Object -Property State, Name, DisplayName

Как остановить или приостановить службы в Windows PowerShell

Локальную службу можно остановить с помощью командлета Stop-Service. Параметр -Name задает имя службы для остановки, параметр -Force позволяет остановить указанную службу вместе со всеми службами зависящими от нее.

Например следующая команда остановит службу Spooler (Диспетчер печати) со всеми зависящими от нее службами:

Stop-Service -Name Spooler -Force

По умолчанию команлет Stop-Service не передает далее по конвейеру объекты, соответствующие останавливаемым службам, и поэтому на экране ничего не отображается. Для остановки служб с выводом информации нужно указать параметр -PassThru, например выполните команду:

Stop-Service -Name Spooler -Force -PassThru

Командлет Suspend-Service позволяет приостановить работу одной или нескольких служб, имена которых задаются в качестве параметра -Name. При приостановке (временной остановке) службы, она продолжает выполняться, однако её действия приостанавливаются до поступления команды на возобновление работы.

Также следует учитывать, что не всякую службу можно приостановить. У объектов System.ServiceProcess.ServiceController, соответствующих службам, имеется логическое свойство CanPauseAndContinue, которое равно $True, если служба может быть приостановлена. Следующая команда приостановит все службы, для которых это возможно:

Get-Service | Where-Object {$_.CanPauseAndContinue} | Suspend-Service -PassThru

Для остановки или приостановки служб на удалённом компьютере можно воспользоваться соответственно методами StopService и PauseService WMI-класса Win32_Service.

Как запустить или перезапустить службу в Windows PowerShell

Запустить службу на локальном компьютере можно с помощью командлета Start-Service. В качестве значения параметра Name указывается имя запускаемой службы. Как и в предыдущих командлетах *-Service, после запуска службы на экран не выводится никакого сообщения.

Для вывода информации можно использовать параметр -PassThru. Например, следующая команда запускает службу WSearch (служба индексирования контента) и выводит на экран информацию об этой службе:

Start-Service -Name Wsearch -PassThru

Командлет Restart-Service выполняет перезапуск (то есть остановку и последующий запуск) служб, указанных в качестве значения параметра -Name или полученных по конвейеру. Например, следующая команда перезапустит службу NetSetupSvc (Служба настройки сети):

Get-Service -Name NetSetupSvc | Restart-Service

Как изменить параметры службы

В Windows PowerShell имеется командлет Set-Service, позволяющий редактировать некоторые параметры служб, такие как, отображаемое имя (параметр -DisplayName), описание (параметр -Description), и тип запуска (параметр -StartupType).

Возможные значения параметра -StartupType: Automatic (служба запускается автоматически), Manual (служба запускается вручную), или Disabled (служба отключена). Имена изменяемых служб указываются в качестве значения -Name.

Следует отметить, что ни описание службы, ни тип запуска не являются свойствами объектов System.ServiceProcess.ServiceController, возвращаемых командлетом Get-Service. Это значит что командлет Get-Service не позволяет проверить чему равны значения данных параметров для определенной службы.

Решить эту проблему можно с помощью WMI-класса Win32_Service, который имеет свойства Description (описание службы) и StartMode (режим запуска службы). Теперь посмотрим, например, чему равно значение этих свойств для службы WSearch (служба индексирования контента):

Get-WmiObject Win32_Service -Filter "name = \'WSearch\'" | fl StartMode, Description

Выведенная информация показывает что служба индексирования контента запускается автоматически (значение свойства StartMode равно Auto).

Теперь с помощью командлета Set-Service изменим режим запуска службы индексирования контента с автоматического на ручной, для этого выполните команду:

Set-Service -Name WSearch -StartupType Manual

Проверим проделанные изменения с помощью объекта Win32_Service, для этого выполните следующую команду:

Get-WmiObject Win32_Service -Filter "name = \'WSearch\'" | fl Name, StartMode

Значение свойства StartMode успешно изменено.

Чтобы удалить службу, нужно использовать средство настройки диспетчера служб sc.exe, о том как это сделать, читайте в статье Как удалить службу в Windows 10.

WinNOTE
Добавить комментарий