SQLServerを完全にアンインストールするのはコントロールパネルの「プログラムと機能」からだけではできない。完全にアンインストールする方法、具体的にはここに書いてあるんだけど
https://blogs.msdn.microsoft.com/jpsql/2013/05/30/sql-server-4/
度重なるインストールアンインストールの繰り返しでうんざりしてきたのでレジストリを検索してUninstallStringを一発で表示させるようなPowerShellを書いてみた。一発できれいさっぱりアンインストールするPS1でなくてすいません。
- 最初に"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"の下のサブキーの一覧を取得してこのキーと連結したレジストリキーを作成する。
$keys = (Get-Item -Path "Registry::HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*") | Select-String "Uninstall"
- $keysの中身はこんな感じになる。
PS C:\Users\Administrator> $keys
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{0C795124-D561-46FC-B4ED-B4F052A8D9E6}
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{0D3E9E15-DE7A-300B-96F1-B4AF12B96488}
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1D8E6291-B0D5-35EC-8441-6616F567A0F7}
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{2FFF0757-4360-42F5-8814-16BB5CF0145F}
- このキー以下のValueの中身を検索し、DisplayNameに"SQL"が含まれるものについてのUninstallStringを抜き出せば良い
$keys|ForEach-Object{
$dispname = (Get-Item -Path "Registry::$_").GetValue("DisplayName");
if($dispname -ne $null -and $dispname.IndexOf("SQL") -gt -1){
"[" + $dispname + "]`t" + (Get-Item -Path "Registry::$_").GetValue("UninstallString");
}
}
- 実行するとMsiExecの行が表示される。
[SQL Server 2016 Shared Management Objects] MsiExec.exe /I{8AC195EB-E1EB-45D8-AEF2-6959C0212BB0}
[SQL Server 2016 XEvent] MsiExec.exe /I{8CF2CA8E-3984-46B9-B493-F844F3774FA1}
[SQL Server 2016 Client Tools Extensions] MsiExec.exe /I{AB765DC7-7642-4D1C-BEDC-035516CCD224}
[Microsoft SQL Server 2008 セットアップ サポート ファイル] MsiExec.exe /X{B326848D-CBFA-4959-A9E6-68AABC11C8E2}
[SQL Server 2016 Shared Management Objects Extensions] MsiExec.exe /I{B6E1A5EB-1C58-4A04-B76B-E5FE1BE22CA1}
・
・
・
あとはMsiExecのところを抜き出して、"/I"のところは"/X"に置き換えて実行します。GUID以外のMsiExecは実行しない様にしましょう。