Home > Windows にまつわる e.t.c.

落ちないサービスの止め方


何らかの理由でサービスを止めようとしても、「停止中」になってサービスが落ちてくれない事があります。

このような場合は、PowerShell でプロセスそのものを殺してサービス停止します。

プロセスを殺す場合は、kill(Stop-Process の Alias)でプロセス ID を指定するのですが、残念な事に、Get-Service ではプロセス ID が取得できません。

このため、プロセス ID は Win32_Service の Name で検索し、ProcessID を取得します。

これを PowerShell で書くとこんな感じになります

# サービス名
$ServiceName = "W3SVC"

# 該当サービスのプロセスIDの取得
$ID = (Get-Wmiobject Win32_Service | ? { $_.Name -eq $ServiceName }).ProcessID

# プロセスを殺す
kill -Id $ID -Force

 

停止中になっているサービスを全部殺すには、以下のようにします。

# 停止中になっているサービスをリストアップ
$StopPendingServiceNames = (Get-Service | ? { $_.Status -eq "StopPending" }).Name

foreach( $StopPendingServiceName in $StopPendingServiceNames ){
    # プロセスIDの取得
    $ID = (Get-Wmiobject Win32_Service | ? { $_.Name -eq $StopPendingServiceName }).ProcessID

    # サービスを殺す
    kill -Id $ID -Force
}

 

これでもサービスが落ちない時は、コンピューターそのものを再起動します。

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.