コマンド操作で複数アプリを一括でアンインストールする方法

コマンド操作で複数アプリを一括でアンインストールする方法。

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 DisplayName

Wingetコマンドを使った方法

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"
Windowsで複数のアプリを一括インストールする方法(winget)
Windowsで複数のアプリを一括インストールする方法(winget)
Windowsで複数のアプリをコマンド操作で一括インストールやアップデートしたいときにおすすめの、標準搭載のツール「winget」の使い方を解説します。

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

あとがき

コマンド操作でアプリをアンインストールできれば、不要なアプリをまとめて削除したり、複数のパソコンでアプリをアンインストールしたいといったときにとても便利です。ご活用あれ。