treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

Windowsのシャットダウンが進まなくなって困った時の対処

Windows Serverで更新プログラムの問題が出たのもつかの間。
更新プログラムの適用で再起動時にシャットダウンが進まなくなった時にやったことをご報告します。

平たく言えば…

一言で言ってしまうと、シャットダウンを妨げているプロセスを強制終了して、シャットダウンを進めた、というやり方です。強制終了することの是非はありますので、自身の環境でやって良いかどうかは適宜判断する必要があります。

以前に

blog.treedown.net

ここでWindows Server 2008時代にやった内容が活きてきました。今回の対象はWindows Server 2016。OSの世代が進んでも、やり方は通用しました。

症状

前回画面がとれなかったので、今回は画面を取得。

f:id:treedown:20201125001454p:plain
シャットダウンはこの画面で停止していました。症状自体は前回と同一で「Hyper-V Virtual Machine Management」が「停止処理中」なので、プロセスとしては「C:\Windows\system32\vmms.exe」が対象になります。

そうなると、

f:id:treedown:20201125001514p:plain
別のコンピュータからservices.mscで確認するも、右クリックからは停止や再起動などはグレーアウトされており、操作はできない状態。

そこでpsexec.exeを使って、コマンドラインからtasklistコマンドでプロセスの状態を確認。

f:id:treedown:20201125001611p:plain

下の方をスクロールして探っていくと、

f:id:treedown:20201125001632p:plain

見つかりました。このvmms.exeが止まればOKのはず。

タスクを停止させる

さっそく前回と同じ方法で、やってみますが…。

f:id:treedown:20201125001658p:plain
ん?拒否されてしまいました…。アクセス元PCが悪かったか…。

そこで前回<シャットダウン中に処理が進まなくなった場合にもPsExec - treedown’s Report>に
「「taskkillはリモートシステムのタスクを落とせるのでpsexecを使う必要がない。」
という考え方もあります。(使ったことありませんが)実際にオプションにあります。」
という項で調べてあった別のやり方を試してみることにしました。

今回はリモート経由で別のコンピュータからtasklistコマンドでプロセス停止を試行します。

テンプレート:
TASKKILL /S system /U username /P password /IM "IMAGENAME" /F

  • system⇒taskkill発行対象となるコンピュータ名(名前解決できればFQDNで無くてもOK)
  • username⇒tasklistコマンドを実行するユーザ名、Active Directory環境なら「domain\username」形式で記述
  • password⇒上記usernameのパスワード、必要なら入れるがcmd.exeを実行しているログインユーザがそのままリモート実行先で有効なら省略可能(今回は省略)
  • IMAGENAME⇒taskkill対象のプロセス名、今回はvmms.exeを。

最後に「/F」強制オプションを付けます。

今回はこういう感じで実行。
taskkill /S ComputerNAME /U username /IM "vmms.exe" /F

f:id:treedown:20201125002003p:plain
無事、プロセスは強制終了され、OS再起動が進行しました。

まとめ

RPCサービスが動作している状態であれば、リモートからservices.mscでサービスの状態を確認して、コマンドプロンプトから、リモートのサービスに対してtasklistコマンドでプロセスを停止することはできる、ということが実践できました。