Управление сервисами

Этот пример относится только к Windows PowerShell 5.1.

Существует восемь основных командлетов службы , предназначенных для широкого спектра задач службы. В этой статье рассматривается только перечисление и изменение состояния выполнения для служб. Список командлетов службы можно получить с помощью Get-Command *-Service. Сведения о каждом командлете можно найти с помощью Get-Help <Cmdlet-Name>таких командлетов, как 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

Получение удаленных служб

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

Get-Service -ComputerName Server01

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

Invoke-Command -ComputerName Server02 -ScriptBlock { Get-Service }

Также управлять службами можно при помощи других командлетов *-Service. Дополнительные сведения о службе удаленного взаимодействия PowerShell см. в разделе about_Remote.

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

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

Параметр RequiredServices получает службы, от которых зависит служба 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

Параметр DependentServices получает, для которых требуется служба 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

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

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

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

Stop-Service -Name spooler

Чтобы запустить средство 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>

Обратите внимание, что вы получаете повторное предупреждение о запуске spooler печати. При выполнении операции службы, которая занимает некоторое время, 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 : can't 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 . Например, приведенная ниже команда перезапускает службу очередь печати принтера на удаленном компьютере Server01.

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

Задание свойств службы

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

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

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

См. также