Поделиться через


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

Этот пример относится только к 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

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

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

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>

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

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

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

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

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

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

См. также