В этой статье рассмотрены способы решения некоторых типичных задач, связанных со службами с помощью 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.
а как делать Set-Service -startuptype сразу для нескольких служб?