【Windows11】コマンドでアプリをアンインストール/削除する方法 - winget・PowerShell対応

この記事では、Windows11でコマンドを使い、アプリをアンインストール(削除)する具体的な手順を解説します。Windows標準のパッケージ管理ツールであるwingetPowerShellの両方に対応したIT担当者向けの内容です。

通常のGUI(コントロールパネルや設定アプリ)では削除できない破損したアプリの強制アンインストールや、新しいPCのセットアップ時に複数のプリインストールアプリを一括で削除する、といった作業は、情シスの現場で頻繁に発生します。コマンドラインは、こうした手動では煩雑な作業を、迅速かつ確実に実行するための強力なツールです。

この記事を最後まで読めば、wingetコマンドを使った単体アプリのアンインストールから、--purgeオプションによる完全削除、さらにはPowerShellスクリプトを使った複数アプリの一括削除といった、高度な自動化手順を習得できます。

目次

コマンドでアンインストールするメリットと事前に知っておくべき注意点

Windows 11でコマンドラインを使ってアプリを削除する主なメリットは、通常の方法で削除できないアプリの強制削除、複数アプリの一括削除、エラー時の詳細情報取得です。ただし、システムに必要なアプリを誤って削除するリスクがあるため、実行前の確認が重要です。

主なメリット

  • 破損したアプリの強制削除 - 設定アプリやコントロールパネルでエラーが出て削除できない時の手段の一つ
  • 複数アプリの一括削除 - プリインストールアプリをまとめて削除できる
  • サイレント実行 - 確認画面なしでバックグラウンドで削除できる
  • 詳細なエラー情報 - トラブルシューティングに役立つ

通常のアンインストールならコントロールパネルからアプリをアンインストール/削除する方が簡単です。

必ず知っておくべき注意点

  • 管理者権限が必要 - PowerShellやコマンドプロンプトは「管理者として実行」する必要がある
  • 取り消し不可 - 削除したアプリは簡単に元に戻せない
  • 入力ミスに注意 - 特にワイルドカード(*)使用は要注意
  • システムアプリの誤削除リスク - 警告なしで重要なアプリも削除可能

重要なアプリを削除する前は、必ずシステムの復元ポイントを作成しておきましょう。

wingetコマンドでアプリをアンインストールする手順とコマンド一覧

winget(Windows Package Manager)は、Windows10/11に標準搭載されているパッケージ管理ツールです。コマンドラインから簡単にアプリのインストールや削除ができます。ここでは、wingetを使ったアプリのアンインストール方法を詳しく解説します。

wingetコマンドが使えるか確認する

Windows11には標準でwingetがインストールされていますが、バージョンや設定によっては有効化が必要な場合があります。wingetコマンドが使えない・認識されないエラーを防ぐため、以下の手順で事前に動作確認を行いましょう。

  1. PowerShellを管理者権限で起動する
  2. 管理者権限のPowerShellでwinget --versionを実行
winget --versionコマンドでwingetコマンドが使えるか確認する
winget --versionコマンドでwingetコマンドが使えるか確認する

バージョン情報(例:v1.6.3482)が表示されればwingetが利用可能です。「'winget' は認識されていません」というエラーが表示される場合は、Microsoft公式サイトから「アプリ インストーラー」をインストールしてください。

インストール済みアプリ名とアプリIDを取得する

wingetでアプリをアンインストールするには、正確なアプリ名またはアプリIDが必要です。ここでは、インストール済みアプリの一覧を表示し、アンインストールに必要なアプリ名とIDを取得する方法を解説します。

wingetを初めて使用する際、使用許諾契約への同意を求められます。
Y」を入力してEnterを押すことで、wingetが使用可能になります。この同意は初回のみ必要で、以降は表示されません。

PowerShellで以下のコマンドを実行すると、PC内のすべてのアプリが表示されます。

winget list
winget listコマンドでインストール済みアプリ名とアプリIDを取得する
winget listコマンドでインストール済みアプリ名とアプリIDを取得する

アプリIDの表示が長くて途切れる場合は、アプリ名でもアンインストール可能です。また、アプリ名は部分一致でもアンインストール可能です。

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

「見つかりません」エラーが表示された場合は、winget listでアプリ名とIDを再確認してください。

PowerShellで複数アプリを一括削除する効率的な方法

複数のアプリを一つずつアンインストールするのは時間がかかります。PowerShellスクリプトを使えば、指定したアプリをまとめて自動削除できます。新しいPCのセットアップ時や定期的なメンテナンスで特に便利です。

スクリプト実行前に必ずアプリのリストを確認してください。
重要なアプリを誤って削除しないよう注意し、初回はテスト環境で実行することをおすすめします。

以下の手順でスクリプトを.ps1ファイルとして保存すれば、繰り返し使用できます。

  1. メモ帳を開き、スクリプトを貼り付け
  2. uninstall-apps.ps1という名前でデスクトップに保存(拡張子は.ps1
  3. PowerShellを管理者として実行
  4. 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公式削除ツールを使った方法などを詳しく解説しています。

コマンドでアプリをアンインストールする方法に関するよくある質問と答え

最後に、コマンドでアプリをアンインストールする方法に関するよくある質問と答えをまとめました。

なぜコマンドでアプリをアンインストールするのですか?

GUIで削除できないアプリの強制削除や、複数アプリの一括削除を自動化できるためです。

wingetとPowerShell、どちらを使うべきですか?

単体のアプリを簡単かつ確実に削除するならwingetがおすすめです。複数のアプリをまとめて削除するならPowerShellスクリプトが強力です。

コマンドプロンプトとPowerShell、どちらで実行すればいいですか?

どちらでもwingetコマンドは実行できますが、Windows11ではPowerShellをおすすめします。
コマンドプロンプトで実行する場合は、必ずコマンドプロンプトを管理者として起動してください。

wingetコマンドに対応しているPowerShellは?

Windows11 に標準搭載されている PowerShell 5.1(Windows PowerShell)なら問題なく動作します。
もちろん PowerShell 7.x(PowerShell Core)でも同じように実行可能です。
記事内で紹介しているPowerShellで複数アプリを一括削除するスクリプトも同様です。

PowerShell起動時に「新機能と改善のために最新の PowerShell をインストールしてください」と表示されます。

これはWindows標準のPowerShell 5.1を使用している際の通知です。wingetは現在のバージョンでも問題なく動作しますが、最新版にアップグレードする場合はPowerShellの最新バージョンをインストールする方法をご覧ください。

インストールされているアプリの一覧を表示するコマンドは?

winget listです。

インストールされているアプリが多すぎてwinget listの結果から探すのが大変です。どうすればいいですか?

winget listコマンドからさらに絞り込むことで効率的に目的のアプリを特定できます。
たとえば削除したいアプリの名前や一部のキーワードがわかっている場合は、次のように入力してください。winget list firefox
このコマンドはキーワードに一致するアプリだけを一覧表示します。結果にはアプリ名(Name)、アプリID(Id)、バージョン(Version)が表示されるため、該当アプリをすぐに見つけられます。

winget uninstallで「一致するパッケージが見つかりません」と表示されます。

IDや名前の入力ミスが原因です。winget listで表示された通りに正確に入力してください。名前にスペースがある場合は"App Name"のようにダブルクォーテーションで囲みます。

確認メッセージなしでサイレントアンインストールするには?

コマンドの末尾に--silentオプションを追加してください。
例:winget uninstall App.ID --silent

設定ファイルなども含めて完全に削除したいです。

コマンドの末尾に--purgeオプションを追加してください。ただし、ユーザーデータも消えるため注意が必要です。
例:winget uninstall App.ID --purge

PowerShellのGet-Package | Uninstall-Packageコマンドとは違うのですか?

Get-Package | Uninstall-PackageはPowerShellに標準で備わっているアプリ削除コマンドですが、いくつかの制約があります。wingetGet-Package | Uninstall-Packageでは対応しきれない様々な形式のアプリ(例: EXEインストーラー)を削除でき、設定ファイルを完全に削除する--purgeオプションも備えているため、より強力で確実なアンインストールが可能です。

wingetコマンド以外に設定ファイルなども含めて完全にアンインストールする方法はありませんか?

Microsoftが公式に提供している「PC Manager」(無償)はディープアンインストールに対応しています。
詳しい使い方はWindows11でアプリを完全に削除する方法をご覧ください。

「依存関係があるためアンインストールできません」と表示されます。

--forceオプションで強制できますが、他のアプリに影響が出る可能性があるためおすすめできません。予め依存関係にあるアプリを先にアンインストールしてください。
強制的にアンインストールする場合は実行前に復元ポイントの作成をおすすめします。

IT担当者として、wingetコマンドでのアンインストールはどんな時に使いますか?

新規PCのキッティングで、複数の不要なプリインストールアプリを一括削除するスクリプトを実行する際に最も活用します。また、GUIでエラーが出て削除できないアプリの強制削除や、トラブルシューティング時のログ取得でも活用しています。

最後までご覧いただき、ありがとうございました。
記事の内容は独自検証に基づくものであり、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日
よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

情シスの自由帳管理人のアバター 情シスの自由帳管理人 情シスの自由帳管理人

社内SE歴15年以上。現在も社内のPC管理・ネットワーク・サーバー運用から、日常的なトラブル対応、プログラム開発まで幅広く従事しています。
「情シスの自由帳」では、パソコンが苦手な方や新人の社内SEの方、テレワーク中に困りごとがある方に向けて、実務経験に基づいた再現性の高い解説を心がけています。

【基本検証環境】
Windows 11 Home(64bit)/Intel(R) Core(TM) Ultra 7 155H(1.40GHz)/32GB RAM

コメント

コメントする

目次