Поиск по сайту:

Как остановить службу с помощью PowerShell


Сервисы работают непрерывно в фоновом режиме на компьютерах. Но иногда вам нужно остановить службу, прежде чем вы сможете выполнить конкретную задачу. Мы можем сделать это с помощью команды Stop-Service в PowerShell.

Команда содержит несколько опций, таких как принудительная остановка службы, остановка нескольких служб по части имени и опция без ожидания, которая позволяет вашему скрипту продолжать выполнение во время остановки службы.

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

Остановить службу с помощью PowerShell

Чтобы остановить службу, нам нужно знать имя службы. Имя часто не совпадает с отображаемым именем службы. Когда вы открываете консоль services.msc, то имя, указанное там, является отображаемым именем, а не именем службы.

Например, когда мы смотрим на службу «Спуллер печати», ее имя службы на самом деле «Спуллер». Мы также можем увидеть это, когда смотрим на службу с помощью команды Get-Service:

Get-Service -displayname "Print Spooler"

Result
Status   Name               DisplayName
------   ----               -----------
Running  Spooler            Print Spooler

Чтобы остановить службу в этом случае, у вас есть три варианта. Вы можете остановить её, используя фактическое имя службы, использовать параметр -displayname или передать командлет Stop-Service после командлета Get-Service:

Stop service by it's name
Stop-Service "Spooler"

Stop service based on the display name
Stop-Service -Display "Print Spooler"

Get service first, then stop it
Get-Service -displayname "Print Spooler" | Stop-Service

Использование подстановочных знаков

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

Этот метод также позволяет остановить несколько служб с одинаковым именем с помощью одной команды. Например, чтобы остановить все службы Google, сначала мы получаем все службы, названия которых начинаются с Google, а затем останавливаем их все с помощью команды stop-service:

Stop all services where the name starts with Google
Stop-Service -Name "Google*" | Stop-Service

При использовании подстановочных знаков иногда нужно исключить определенные сервисы. Мы можем сделать это с помощью параметра -exclude, который также поддерживает подстановочные знаки. Таким образом, мы можем, например, получить все сервисы Google, кроме сервисов Chrome:

Stop-Service -Name "Google*" -Exclude "*Chrome*"

Вы также можете использовать параметр -Include, поэтому для приведенного выше примера вы можете получить все службы, где имя содержит Google, и включить «Обновление», чтобы получить только службы обновления.

Принудительная остановка службы

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

Чтобы решить эту проблему, мы можем использовать параметр -Force. Это остановит службу, даже если у нее есть зависимые службы.

Stop-Service -Name "iisadmin" -Force

При использовании опции принудительной остановки сервисов с зависимыми сервисами, хорошей идеей будет также использовать опцию -Confirm. Таким образом, вы сможете проверить и подтвердить для каждого зависимого сервиса, хотите ли вы его также остановить.

NoWait

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

В этих случаях вы можете использовать опцию -NoWait. Это скажет PowerShell, что он может продолжать выполнение остальной части скрипта, пока служба останавливается:

Stop-Service -Name "Spooler" -NoWait

Остановить службу на удаленном компьютере

Чтобы остановить службу на удаленном компьютере с помощью PowerShell, сначала нам нужно получить службу на удаленном компьютере с помощью команды Get-Service, а затем мы можем передать команду stop-service.

Командлет Get-Service поставляется с встроенной поддержкой удаленных компьютеров с параметром -Computername. Важно отметить, что этот метод не работает в PowerShell 7 и выше.

Get-Service -ComputerName $hostname -Name "Spooler" | Stop-Service

При использовании PowerShell 7 нам необходимо использовать командлет Invoke-Command вместо этого. Этот командлет позволяет запускать скрипты или команды на удаленных компьютерах. Чтобы остановить службу на удаленном компьютере с помощью PowerShell 7, мы можем сделать следующее:

Invoke-Command -ComputerName $hostname -ScriptBlock { Stop-Service -Name "Spooler" }

Заключение

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

Надеюсь, эта статья помогла вам. Если у вас есть какие-либо вопросы, просто оставьте комментарий ниже.