Skip to content

WindowsのレジストリからPowerShellでアンインストールコマンドを取得する

Posted on:February 2, 2023 at 10:00 AM

Windows環境でインストーラーによってインストールしたソフトウェアが「プログラムの追加と削除」に表示されないことが稀にあるらしい。

このようなソフトウェアをアンインストールする方法として、Microsoftの公式記事には次の3つの方法が記載されていた。

このうち3つ目のレジストリを参照する方法で対応する場合、参照だけとはいえregeditを直接触るのは若干怖い。

たぶんPowerShellでも取れるやろということで調べてみたら次のような感じでいけるケースがありそうだった。

PowerShellでレジストリからアンインストールコマンドを取得してアンインストールする

例としてmackerel-agentの場合を紹介する。

レジストリキーを取得する

まずはレジストリキーを取得する必要がある。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

上記のパス配下のレジストリ値にソフトウェア名などが登録されていれば、次のようなコマンドを実行するとキーを知ることができる。

(HKEY_LOCAL_MACHINEHKLMのように省略できる。)

reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" /f mackerel-agent /s

mackerel-agentはDisplayNameの値にそれを含んでいるようなので、次のような結果が返ってくる。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{5BF7694F-2891-4383-B2F7-52E6FAFADDC2}
    DisplayName    REG_SZ    mackerel-agent

この結果の{5BF7694F-2891-4383-B2F7-52E6FAFADDC2}がレジストリキー。

レジストリキーの配下のUninstallStringを取得する

レジストリキー配下のUninstallStringの取得するには以下のコマンドを実行する。

reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{5BF7694F-2891-4383-B2F7-52E6FAFADDC2}" /v UninstallString

次のような結果が返ってくる。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{5BF7694F-2891-4383-B2F7-52E6FAFADDC2}
    UninstallString    REG_EXPAND_SZ    MsiExec.exe /X{5BF7694F-2891-4383-B2F7-52E6FAFADDC2}

UninstallStringを実行する

上記の結果から、プログラムの追加と削除からアンインストールを行うとMsiExec.exe /X{5BF7694F-2891-4383-B2F7-52E6FAFADDC2}が実行されている模様。

コマンドプロンプトなどから上記のコマンドを実行すると、プログラムの追加と削除にソフトウェアが表示されない場合でもアンインストールできるようだ。

MsiExec.exe /X{5BF7694F-2891-4383-B2F7-52E6FAFADDC2}

まとめ

regeditでやらかすことなく(実際はそんなことなさそうな気もする)、reg queryという参照コマンドだけで安心してレジストリを覗くことができた。

Windows何もわからん…