Существует восемь основных служебных командлетов, разработанных для широкого спектра служебных задач. В разделе будут рассмотрены только перечисление и изменение состояния служб. Список остальных служебных командлетов можно получить с помощью команды Get-Help *-Service, а информацию о каждом служебном командлете можно получить с помощью команды Get-Help <имя_командлета>, например, Get-Help New-Service.

Получение служб

Службы локального или удаленного компьютера можно вывести с помощью командлета Get-Service. Как и в случае командлета Get-Process, использование команды Get-Service без параметров выводит список всех служб. Выводимые данные можно отсортировать по именам даже при использовании звездочки (*) в качестве подстановочного знака.

PS> Get-Service -Name se*
Status   Name			 DisplayName
------   ----			 -----------
Running  seclogon		 Secondary Logon
Running  SENS			 System Event Notification
Stopped  ServiceLayer	 ServiceLayer

Поскольку настоящее имя той или иной службы не всегда очевидно, может потребоваться поиск служб по отображаемым именам. Можно выполнить поиск по определенному имени, с использованием знаков подстановки, или получить список отображаемых имен.

PS> Get-Service -DisplayName se*
Status   Name			 DisplayName
------   ----			 -----------
Running  lanmanserver	 Server
Running  SamSs			Security Accounts Manager
Running  seclogon		 Secondary Logon
Stopped  ServiceLayer	 ServiceLayer
Running  wscsvc			 Security Center
PS> Get-Service -DisplayName ServiceLayer,Server
Status   Name			 DisplayName
------   ----			 -----------
Running  lanmanserver	 Server
Stopped  ServiceLayer	 ServiceLayer

Параметр ComputerName командлета Get-Service можно использовать для получения служб с удаленных компьютеров. Параметр ComputerName позволяет использовать несколько значений и символы подстановки, что позволяет получить список служб на нескольких компьютерах с помощью одной команды. Например, следующая команда возвращает службы на удаленном компьютере Server01.

Get-Service -ComputerName Server01

Получение обязательных и зависимых служб

Командлет Get-Service имеет два параметра, очень полезных для управления службами. Параметр DependentServices получает службы, зависящие от текущей службы. Параметр RequiredServices получает службы, от которых зависит текущая служба.

Эти параметры просто выводят значения свойств DependentServices и ServicesDependedOn (alias=RequiredServices) объекта System.ServiceProcess.ServiceController, выводимые командой Get-Service, при этом упрощая команды и делая информацию проще для восприятия.

Следующая команда позволяет получить службы, требуемые службой LanmanWorkstation.

PS> Get-Service -Name LanmanWorkstation -RequiredServices
Status   Name			 DisplayName
------   ----			 -----------
Running  MRxSmb20		 SMB 2.0 MiniRedirector
Running  bowser			 Bowser
Running  MRxSmb10		 SMB 1.x MiniRedirector
Running  NSI				Network Store Interface Service

Следующая команда позволяет получить службы, для которых требуется служба LanmanWorkstation.

PS> Get-Service -Name LanmanWorkstation -DependentServices
Status   Name			 DisplayName
------   ----			 -----------
Running  SessionEnv		 Terminal Services Configuration
Running  Netlogon		 Netlogon
Stopped  Browser			Computer Browser
Running  BITS			 Background Intelligent Transfer Ser...

Кроме того, можно получить список всех служб, связанных зависимостями. Именно это делает следующая команда, использующая командлет Format-Table для отображения свойств Status, Name, RequiredServices и DependentServices служб компьютера.

Get-Service -Name * | where {$_.RequiredServices -or $_.DependentServices} | Format-Table -Property Status, Name, RequiredServices, DependentServices -auto

Остановка, запуск, приостановка и перезагрузка служб

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

Stop-Service -Name spooler

Чтобы повторно запустить очередь печати принтера после остановки, используйте команду:

Start-Service -Name spooler

Чтобы приостановить очередь печати, используйте команду:

Suspend-Service -Name spooler

Командлет Restart-Service работает так же, как другие служебные командлеты, но далее будут представлены более сложные примеры его использования. В самом простом случае использования указывается имя службы:

PS> Restart-Service -Name spooler
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
PS>

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

Если требуется перезапустить сразу несколько служб, можно создать список служб, отфильтровать его и произвести перезагрузку.

PS> Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service
WARNING: Waiting for service 'Computer Browser (Browser)' to finish stopping...
WARNING: Waiting for service 'Computer Browser (Browser)' to finish stopping...
Restart-Service : Cannot stop service 'Logical Disk Manager (dmserver)' because
 it has dependent services. It can only be stopped if the Force flag is set.
At line:1 char:57
+ Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service <<<<
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...

У этих служебных командлетов нет параметра ComputerName, но их можно использовать на удаленном компьютере с помощью командлета Invoke-Command. Например, следующая команда перезапускает службу Spooler на удаленном компьютере Server01.

Invoke-Command -ComputerName Server01 {Restart-Service Spooler}

Установка свойств службы

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

Чтобы использовать командлет Set-Service в Windows Vista и более поздних версиях Windows, необходимо запускать Windows PowerShell командой "Запуск от имени администратора".

Дополнительные сведения см. в разделе Set-Service

См. также