
Windowsにインストールされているストアアプリ(UWPアプリ)やデスクトップアプリは、一般的にはWindowsの設定画面からアンインストールすることが多いですが、複数のアプリを一括アンインストールしたいときや、複数のマシンから同じアプリをアンインストールしたいようなときは、コマンド操作でアンインストールするのが効率的です。
そこでここでは、Windows 11を例に、複数のストアアプリやデスクトップアプリをPowerShellコマンドを使って一括でアンインストールする方法を解説します。
目次
レジストリ情報を使った方法
Windowsでは、インストールされているデスクトップアプリの情報がレジストリに記録されており、レジストリ情報を使って指定したアプリをアンインストールできます。
たとえば、以下のようなPowerShellスクリプトを作成して管理者として実行すれば、指定したデスクトップアプリを一括でアンインストールできます。
#アンインストールするアプリを指定
$apps = @('7-Zip 26.00 (x64)', 'Mozilla Firefox (x64 ja)')
$insapps = Get-ChildItem -LiteralPath `
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',`
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',`
'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall'`
| Get-ItemProperty -ErrorAction Ignore
foreach ($app in $apps){
$appinfo = $insapps | Where-Object DisplayName -eq $app
if ($appinfo) {
Write-Warning "$($appinfo.DisplayName)をアンインストールします。よろしければ何かキーを押してください。"
Read-Host | Out-Null
if ($appinfo.UninstallString -match "msiexec") {
$CunintallString = $appinfo.UninstallString -replace "/I","/X" -replace "/i","/x"
cmd /c $CunintallString
} else {
cmd /c $appinfo.UninstallString
}
} else {
Write-Host "$($app)は、インストールされていません。"
}
}なお、マシンにインストールされているデスクトップアプリの名称は、以下のコマンドで確認できます。
PS> Get-ChildItem -LiteralPath 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall','HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall','HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall' | Get-ItemProperty -ErrorAction Ignore | Select-Object DisplayNameWingetコマンドを使った方法
Wingetは、Windows 11に標準搭載されているコマンドベースのパッケージ管理ツールで、デスクトップアプリやストアアプリ(UWPアプリ)をインストールするだけでなく、アンインストールもできます。(Winget以外でインストールしたアプリもWingetコマンドから認識されていればアンインストールできる可能性が高いです。)
Wingetコマンドでアプリをアンインストールする際、インターネット接続が必要になる場合があります。
たとえば、以下のようなPowerShellスクリプトを作成して管理者として実行すれば、指定したデスクトップアプリやUWPアプリを一括でWingetコマンドを使ってアンインストールできます。
[console]::OutputEncoding = [System.Text.Encoding]::UTF8
#アンインストールするアプリを指定
$apps = @('7-Zip 26.00 (x64)', 'Mozilla Firefox (x64 ja)')
$applist = (winget list --details | select-string '^\(.*/\d{3}\)') -replace "^\(.*/\d{3}\) ","" -replace " \[","," -replace "\]","" | ConvertFrom-Csv -Header Name,ID
foreach ($app in $apps){
$appinfo = $applist | Where name -eq $app
if ($appinfo){
Write-Warning "$($appinfo.Name)をアンインストールします。よろしければ何かキーを押してください。"
Read-Host | Out-Null
winget uninstall --id $appinfo.ID --purge
}else {
Write-Host "$($app)は、インストールされていません。"
}
}上のようなスクリプトの作成が面倒なら、以下のように単独のコマンドで複数のアプリをまとめてアンインストールすることもできます。
PS> winget uninstall --id "アプリID1" --id "アプリID2" --id "アプリID3"Remove-AppxPackageコマンドを使った方法
Microsoft StoreなどからインストールしたUWPアプリ(ストアアプリ)は、PowerShellのRemove-AppxPackageコマンドレットでアンインストールできます。
たとえば、以下のようなPowerShellスクリプトを作成して管理者として実行すれば、指定したUWPプアプリを一括でアンインストールできます。
# アンインストールするアプリを指定
$apps = @('Microsoft.Paint','Microsoft.PowerAutomateDesktop')
$insapps = Get-AppxPackage
foreach ($app in $apps){
$appinfo = $insapps | Where-Object Name -eq *$app*
if ($appinfo){
Write-Warning "$($appinfo.Name)をアンインストールします。よろしければ何かキーを押してください。"
Read-Host | Out-Null
Remove-AppxPackage $appinfo.PackageFullName -AllUsers
} else {
Write-Host "$($app)は、インストールされていません。"
}
}上のようなスクリプトの作成が面倒なら、以下のように1行ずつアンインストールするアプリを指定してアンインストールすることもできます。
PS> Get-AppxPackage 'Microsoft.Paint' | Remove-AppxPackage
PS> Get-AppxPackage 'Microsoft.PowerAutomateDesktop' | Remove-AppxPackageあとがき
コマンド操作でアプリをアンインストールできれば、不要なアプリをまとめて削除したり、複数のパソコンでアプリをアンインストールしたいといったときにとても便利です。ご活用あれ。