この記事では、Windows11でコマンドを使い、アプリをアンインストール(削除)する具体的な手順を解説します。Windows標準のパッケージ管理ツールであるwinget
とPowerShell
の両方に対応したIT担当者向けの内容です。
通常のGUI(コントロールパネルや設定アプリ)では削除できない破損したアプリの強制アンインストールや、新しいPCのセットアップ時に複数のプリインストールアプリを一括で削除する、といった作業は、情シスの現場で頻繁に発生します。コマンドラインは、こうした手動では煩雑な作業を、迅速かつ確実に実行するための強力なツールです。
この記事を最後まで読めば、winget
コマンドを使った単体アプリのアンインストールから、--purge
オプションによる完全削除、さらにはPowerShellスクリプトを使った複数アプリの一括削除といった、高度な自動化手順を習得できます。
コマンドでアンインストールするメリットと事前に知っておくべき注意点
Windows 11でコマンドラインを使ってアプリを削除する主なメリットは、通常の方法で削除できないアプリの強制削除、複数アプリの一括削除、エラー時の詳細情報取得です。ただし、システムに必要なアプリを誤って削除するリスクがあるため、実行前の確認が重要です。
主なメリット
- 破損したアプリの強制削除 - 設定アプリやコントロールパネルでエラーが出て削除できない時の手段の一つ
- 複数アプリの一括削除 - プリインストールアプリをまとめて削除できる
- サイレント実行 - 確認画面なしでバックグラウンドで削除できる
- 詳細なエラー情報 - トラブルシューティングに役立つ
必ず知っておくべき注意点
- 管理者権限が必要 - PowerShellやコマンドプロンプトは「管理者として実行」する必要がある
- 取り消し不可 - 削除したアプリは簡単に元に戻せない
- 入力ミスに注意 - 特にワイルドカード(*)使用は要注意
- システムアプリの誤削除リスク - 警告なしで重要なアプリも削除可能
重要なアプリを削除する前は、必ずシステムの復元ポイントを作成しておきましょう。
wingetコマンドでアプリをアンインストールする手順とコマンド一覧
winget(Windows Package Manager)は、Windows10/11に標準搭載されているパッケージ管理ツールです。コマンドラインから簡単にアプリのインストールや削除ができます。ここでは、wingetを使ったアプリのアンインストール方法を詳しく解説します。
wingetコマンドが使えるか確認する
Windows11には標準でwingetがインストールされていますが、バージョンや設定によっては有効化が必要な場合があります。wingetコマンドが使えない・認識されないエラーを防ぐため、以下の手順で事前に動作確認を行いましょう。
- PowerShellを管理者権限で起動する
- 管理者権限のPowerShellで
winget --version
を実行

バージョン情報(例:v1.6.3482)が表示されればwingetが利用可能です。「'winget' は認識されていません」というエラーが表示される場合は、Microsoft公式サイトから「アプリ インストーラー」をインストールしてください。
インストール済みアプリ名とアプリIDを取得する
wingetでアプリをアンインストールするには、正確なアプリ名またはアプリIDが必要です。ここでは、インストール済みアプリの一覧を表示し、アンインストールに必要なアプリ名とIDを取得する方法を解説します。
PowerShellで以下のコマンドを実行すると、PC内のすべてのアプリが表示されます。
winget list

wingetコマンドでアプリをアンインストールする
取得したアプリ名またはアプリIDを使って、実際にアプリをアンインストールします。基本的なコマンドから便利なオプション付きコマンドまで、用途に応じて使い分けましょう。
通常は「アプリIDを使用したアンインストールコマンド」で問題ありませんが、アプリIDが途中で途切れている場合は「アプリ名を使用したアンインストールコマンド」を試してみてください。
万が一アンインストール中にエラーが表示されたり、アンインストールが正常に終了できない場合は原因究明も兼ねて「ログファイルを出力しながら削除するコマンド」の実行をおすすめします。
winget uninstall Mozilla.Firefox.ja
winget uninstall "Mozilla Firefox (x64 ja)"
winget uninstall Mozilla.Firefox.ja --silent
winget uninstall Mozilla.Firefox.ja --force
winget uninstall Mozilla.Firefox.ja --purge
winget uninstall Mozilla.Firefox.ja --log %USERPROFILE%\Desktop\uninstall.log
PowerShellで複数アプリを一括削除する効率的な方法
複数のアプリを一つずつアンインストールするのは時間がかかります。PowerShellスクリプトを使えば、指定したアプリをまとめて自動削除できます。新しいPCのセットアップ時や定期的なメンテナンスで特に便利です。
以下の手順でスクリプトを.ps1
ファイルとして保存すれば、繰り返し使用できます。
- メモ帳を開き、スクリプトを貼り付け
uninstall-apps.ps1
という名前でデスクトップに保存(拡張子は.ps1
)- PowerShellを管理者として実行
powershell.exe -ExecutionPolicy Bypass -File "$env:USERPROFILE\Desktop\uninstall-apps.ps1"
を実行
<# ======================================================================
winget 一括アンインストール・スクリプト
- 厳密一致(--exact)で誤削除防止
- サイレント&合意フラグ付与で無人実行を安定化
- アプリごとにログ出力(失敗時の原因追跡)
- 成功/失敗/スキップを集計表示
使い方:
1) 下の $appsToRemove に削除したい「App ID」を列挙
2) 必要に応じて $UseForce / $UsePurge を切替
3) PowerShell(管理者)でこの .ps1 を実行
例)powershell.exe -ExecutionPolicy Bypass -File "$env:USERPROFILE\Desktop\uninstall-apps.ps1"
====================================================================== #>
# ========================= ユーザー設定 =========================
# 削除するアプリ ID(winget の「Id」値)を列挙
$appsToRemove = @(
# "Mozilla.Firefox",
# "Google.Chrome",
# "Zoom.Zoom"
# 上記はサンプルです。削除したいアプリのIDに置き換えてください
)
# 依存関係を無視して強制削除する場合は $true(慎重に)
$UseForce = $false
# 設定やユーザーデータも含め完全削除したい場合は $true(復元困難)
$UsePurge = $false
# ログの保存先フォルダ(既定:デスクトップ配下に作成)
$LogDir = Join-Path $env:USERPROFILE "Desktop\winget-uninstall-logs"
# 何をするかだけ表示(実行はしない)ドライランを有効化する場合は $true
$WhatIf = $false
# (任意)ユーザー/マシンスコープを指定したい場合:"user" | "machine" | $null
# ※ winget 側で未サポートや不要な場合は $null のままでOK
$Scope = $null
# ===============================================================
# 前提チェック:winget が使用可能か
Write-Host "winget の利用可否を確認中..." -ForegroundColor Cyan
try {
$wingetVersion = (& winget --version) 2>$null
} catch {
$wingetVersion = $null
}
if (-not $wingetVersion) {
Write-Host "`n[エラー] winget が認識されません。App Installer を更新/再インストールしてから再実行してください。" -ForegroundColor Red
Write-Host "参考: https://learn.microsoft.com/ja-jp/windows/msix/app-installer/install-update-app-installer"
exit 1
}
Write-Host "OK: winget $wingetVersion" -ForegroundColor Green
# ログフォルダを準備
if (-not (Test-Path $LogDir)) {
New-Item -Path $LogDir -ItemType Directory | Out-Null
}
# 集計用
$Succeeded = New-Object System.Collections.Generic.List[string]
$Failed = New-Object System.Collections.Generic.List[string]
$Skipped = New-Object System.Collections.Generic.List[string]
# 実行関数
function Invoke-WingetUninstall {
param(
[Parameter(Mandatory=$true)][string]$AppId
)
Write-Host "`n処理中: $AppId" -ForegroundColor Yellow
# ① ローカルに存在するかチェック(厳密一致)
& winget list --id $AppId --exact | Out-Null
if ($LASTEXITCODE -ne 0) {
Write-Host "スキップ: $AppId はインストールされていません(または ID 不一致)" -ForegroundColor Gray
$Skipped.Add($AppId) | Out-Null
return
}
# ② コマンドラインの組み立て
$args = @(
'uninstall',
'--id', $AppId,
'--exact',
'--silent',
'--accept-source-agreements',
'--accept-package-agreements'
)
if ($UseForce) { $args += '--force' }
if ($UsePurge) { $args += '--purge' }
if ($Scope) { $args += @('--scope', $Scope) }
# アプリごとのログファイル
$safeName = ($AppId -replace '[^\w\.-]', '_')
$logPath = Join-Path $LogDir ("{0}-{1:yyyyMMdd-HHmmss}.log" -f $safeName, (Get-Date))
$args += @('--log', $logPath)
# ③ 実行 or ドライラン
if ($WhatIf) {
Write-Host "[DRY-RUN] winget $($args -join ' ')" -ForegroundColor DarkCyan
$Succeeded.Add("$AppId(DRY-RUN)") | Out-Null
return
}
# 実行
& winget @args
$exit = $LASTEXITCODE
if ($exit -eq 0) {
Write-Host "成功: $AppId を削除しました" -ForegroundColor Green
$Succeeded.Add($AppId) | Out-Null
} else {
Write-Host "失敗($exit): $AppId の削除に失敗しました。ログ: $logPath" -ForegroundColor Red
$Failed.Add("$AppId(ExitCode=$exit)") | Out-Null
}
}
# メインループ
foreach ($app in $appsToRemove) {
if ([string]::IsNullOrWhiteSpace($app)) { continue }
Invoke-WingetUninstall -AppId $app
}
# 結果サマリ
Write-Host "`n========== 実行結果 ==========" -ForegroundColor Cyan
Write-Host ("削除成功: {0} 個" -f $Succeeded.Count)
foreach ($i in $Succeeded) { Write-Host (" ✓ {0}" -f $i) -ForegroundColor Green }
Write-Host ("削除失敗: {0} 個" -f $Failed.Count)
foreach ($i in $Failed) { Write-Host (" ✗ {0}" -f $i) -ForegroundColor Red }
Write-Host ("スキップ: {0} 個(未インストール/ID不一致)" -f $Skipped.Count)
foreach ($i in $Skipped) { Write-Host (" - {0}" -f $i) -ForegroundColor DarkGray }
Write-Host "`nログ保存先: $LogDir" -ForegroundColor Cyan
# 終了コード(失敗があれば 1 を返す)
if ($Failed.Count -gt 0) { exit 1 } else { exit 0 }
アンインストールできない・エラーが出る時の対処法
wingetコマンドを使ったアンインストールでは、いくつかの特有のエラーが発生することがあります。エラーメッセージに応じて、以下の対処法を確認してください。
「winget」コマンドが認識されない場合
PowerShellで「'winget' は、コマンドレット、関数、...として認識されません。」というエラーが表示された場合、winget自体が正しくインストールされていないか、不具合が発生している可能性があります。 まず、Microsoft公式サイトから「アプリ インストーラー」をインストールしてください。ほとんどの場合、これで解決します。
インストール後にPCを再起動し、winget --version
で動作確認してください。
管理者権限に関するエラーが表示される場合
wingetコマンド実行時に「アクセスが拒否されました」や「権限が不足しています」と表示される場合、PowerShellを管理者として実行していない場合がほとんどです。PowerShellを管理者権限で実行してから、再度コマンドを実行してください。
「一致するパッケージが見つかりません」エラーが表示される場合
このエラーは、指定したアプリ名やIDが間違っている場合に表示されます。もう一度winget list
を実行し、表示された一覧から正確な「名前(Name)」または「ID」をコピー&ペーストして試してください。
名前にスペースが含まれる場合は、"Mozilla Firefox (x64 ja)"
のように、必ずダブルクォーテーションで囲む必要があります。
「依存関係があるためアンインストールできません」と表示される
「依存関係があるためアンインストールできません」と表示される場合、基本的にはアンインストールの続行はおすすめしませんが、どうしてもアンインストールしたい場合は強制削除オプション(--force
)を追加してコマンドを実行してください。
※依存関係を無視して削除するため、実行前にシステムの復元ポイントを作成することをおすすめします。
winget uninstall Mozilla.Firefox.ja --force
アンインストーラー自体の実行に失敗する場合
wingetコマンドは成功したものの、その後起動したアンインストーラーがエラーを出す、あるいは完了してもアプリが消えない、といった場合があります。
これは、コマンドラインの問題ではなく、アプリやWindowsシステム自体に問題がある可能性が高いです。
その場合は、より包括的なトラブルシューティングが必要となります。以下の専門記事で、SFC/DISMコマンドによるシステム修復や、Microsoft公式削除ツールを使った方法などを詳しく解説しています。
コマンドでアプリをアンインストールする方法に関するよくある質問と答え
最後に、コマンドでアプリをアンインストールする方法に関するよくある質問と答えをまとめました。
最後までご覧いただき、ありがとうございました。
記事の内容は独自検証に基づくものであり、MicrosoftやAdobeなど各ベンダーの公式見解ではありません。
環境によって結果が異なる場合がありますので、参考のうえご利用ください。
誤りのご指摘・追記のご要望・記事のご感想は、記事のコメント欄またはこちらのお問い合わせフォームからお寄せください。個人の方向けには、トラブルの切り分けや設定アドバイスも実施します。
※Microsoft、Windows、Adobe、Acrobat、Creative Cloud、Google Chromeほか記載の製品名・サービス名は各社の商標または登録商標です。
公式情報・関連資料
実行環境詳細と検証日
- OS:Windows 11 Home 24H2(64bit)
※本記事の手順は Windows11 Home / Pro / Enterpriseで共通です(ポリシーで制限された環境を除く)。 - ハードウェア:Intel(R) Core(TM) Ultra 7 155H (1.40 GHz) / 32GB RAM
- 最終検証日:2025年9月23日
コメント