Завершение зависшей службы в PowerShell

Материал из Wikipedia PC-SUPP
Перейти к: навигация, поиск

Принудительное завершение зависшей службы в PowerShell

Это еще один из методов принудительного завершения процесса, при этом, не нужно узнавать PID.

Запускаем PowerShell от имени администратор.

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

Get-WmiObject -Class win32_service

У нас "поползёт" список из всех имеющихся служб, их статусом и режимом запуска.


PoSH1.png


Теперь нам необходимо выполнить отбор, чтобы найти нашу зависшую службу (а может быть и их несколько).

Следующая команда поможет нам выявить службы, которые находятся в состоянии stopping (останавливается)[1]:

Get-WmiObject -Class win32_service | Where-Object {$_.state -eq 'stop pending'}

Теперь нам нужно завершить процесс для найденных нами служб, в этом нам поможет Stop-Process. Чтобы каждый раз не выискивать каждую зависшую службу (ведь зависшая служба говорит о том, что тот или иной процесс не выполняется) выполним скрипт, который завершит все повисшие в системе службы:

$Services = Get-WmiObject -Class win32_service -Filter "state = 'stop pending'"
if ($Services) {
foreach ($service in $Services) {
try {
Stop-Process -Id $service.processid -Force -PassThru -ErrorAction Stop
}
catch {
Write-Warning -Message "Error. Error details: $_.Exception.Message"
}}}
else {
Write-Host "No services with 'Stopping' status" -ForegroundColor green
} 

См. также

Примечания

  1. Службы могут принимать следующие состояния:
    Running - Запущена
    Stopped - Остановлена
    Stopping - Останавливается