UWP を管理できるコマンド集

## Universal Windows Platform（UWP）とは？
UWP とは、Microsoft が提供するアプリケーション開発のための統合プラットフォームであり、UWP は PC、スマートフォン、タブレット、Xbox など、さまざまなデバイスで動作するアプリケーションを単一のコードベースで開発できるように設計されています。

UWP で開発されたアプリを UWP アプリとよび、従来の Win32 系アプリに比べて、セキュリティ、パフォーマンス、アクセシビリティの向上しているとされています。

さまざまなデバイスで動作するとはいえ、UWP アプリは、PC で使用されるのがほとんどだと思います。この投稿も PC で動作している UWP アプリについての話です。

## UWP アプリの種類
UWPアプリは、Microsoft ストアからダウンロード＆インストールできるものと Windows OS の一部として動作しているものがあります。

従来は、`C:\Windows\System32` 配下にあったメモ帳、電卓、ペイントは、 UWP アプリへ置き換えが進み、電卓は Windows 10 で、メモ帳、ペイントは Windows 11 で Microsoft ストアから配信される UWP アプリになりました。これらのアプリは、Microsoft ストアからアプリの更新プログラムが配信されたり、アプリをアンインストールできるようになりました。なお、アンインストールしても Microsoft ストアを通じて再インストール可能です。

一方、Windows OS の一部として動作している UWP アプリは、アンインストールができません。スタートメニューや設定アプリは、Windows OS の一部として動作している UWP アプリの例になります。

## UWP アプリの管理
UWP アプリは、ユーザーごとに管理されており、ユーザーの初回ログイン時にあらかじめ登録されている UWP アプリが自動でインストールされる仕組みになっています。Windows OS の一部として動作している UWP アプリは、自動でインストールされるのは、当然だと思いますが、Microsoft ストアから配信されるアプリもインストールされます。

メモ帳、電卓、ペイントは、初回ログイン時インストールされるリストにデフォルトで含まれているため、自動的にインストールされます。なお、初回ログイン時にインストールされる UWP リストは、カスタマイズできるので UWP 版の電卓をインストールしないようにすることも可能です。

## PowerShell コマンド集
### UWP のインストール状況を確認
インストールされている UWP アプリを確認できるコマンドは [Get-AppxPackage](https://learn.microsoft.com/en-us/powershell/module/appx/get-appxpackage) になります。

ログインしているユーザー自身にインストールされている UWP アプリを確認する場合は、PowerShell を管理者ではなく、ユーザー権限で起動し、実行してください。
```powershell
# PowerShell（ユーザー権限）
Get-AppxPackage | ConvertTo-json | Out-File -FilePath getAppxPackage_$env:USERNAME.json
```
PC にログインしたすべてのユーザーのインストール状況を確認したい場合には、PowerShell を管理者として起動して `-allusers` オプションを付与してコマンドを実行してください。
```powershell
# PowerShell（管理者権限）
Get-AppxPackage -allusers | ConvertTo-json | Out-File -FilePath getAppxPackage_allusers.json
```

:::note info
ユーザーごとにインストールされている UWP アプリは異なる場合があります。
:::
:::note info
ConvertTo-json は、Json ファイルで出力するために入れていますが、普通のテキストファイル(.txt)で出力する場合はなくても OK です。
:::

### インストールされているアプリをすべて更新
Microsoft Store でアップデート可能なバージョンが配信されている UWP アプリをすべて更新したい場合は、アップデートを実行したいユーザーの権限で PowerShell を起動し、以下の２つのコマンドを実行してください。

```powershell
# コマンド１
[Windows.ApplicationModel.Store.Preview.InstallControl.AppInstallManager,InstallService.dll,ContentType=WindowsRuntime]
# コマンド２
(new-object Windows.ApplicationModel.Store.Preview.InstallControl.AppInstallManager).SearchForAllUpdatesAsync()
```
AppInstallManager Class (Windows.ApplicationModel.Store.Preview.InstallControl)
https://learn.microsoft.com/en-us/uwp/api/windows.applicationmodel.store.preview.installcontrol.appinstallmanager

:::note info
アップデートは、非同期で実行されるのでしばらく待っていれば、徐々にアプリが更新されていきます。アプリが更新されたかは、System のイベントログに ID 19 が記録されていることで確認はできます。
:::

### UWP アプリをアンインストール
インストールされている UWP アプリをアンインストールするコマンドは [Remove-AppxPackage](https://learn.microsoft.com/en-us/powershell/module/appx/remove-appxpackage) になります。

アプリをアンインストールするには、アンインストールしたいユーザーの権限で PowerShell を起動し、`Remove-AppxPackage` を実行してください。コマンドの実行方法としては、以下の２種類が考えられます。

```powershell:例：カメラアプリをアンインストール
# 1. Get-AppxPackage でアプリを指定＆パイプしてアンインストール
Get-AppxPackage "Microsoft.WindowsCamera" | Remove-AppxPackage

# 2. PackageFullName を指定してアンインストール
Remove-AppxPackage -Package "Microsoft.WindowsCamera_2024.2408.1.0_x64__8wekyb3d8bbwe"
```

:::note info
アプリ名:Microsoft.WindowsCamera や PackageFullName は、Get-AppxPackage の実行結果から確認ができます。
:::
:::note info
Get-AppxPackage と同様に管理者権限で起動した PowerShell で Remove-AppxPackage を `-allusers` オプションを付けて実行すれば、その端末にログインしたすべてのユーザーからアプリをアンインストールできます。
:::

### 再インストール
インストールされているアプリが正常に動作していないように思えたら、[Add-AppxPackage](https://learn.microsoft.com/ja-jp/powershell/module/appx/add-appxpackage) コマンドで UWP アプリの再登録（再インストール）を実施することで改善する場合があります。
特にWindows OS の一部として動作している UWP アプリは、Remove-AppxPacakge の実行時にエラーが発生するので、この方法で再インストールする必要があります。

UWP アプリのインストール パスにある AppXManifest.xml を指定して、Add-AppxPackageを実行すると指定したアプリを再インストールできます。InstallLocation は、Get-AppxPackage の実行結果から確認ができます。

```powershell:コマンドのフォーマット
Add-AppxPackage -DisableDevelopmentMode -Register "<InstallLocation>\AppXManifest.xml" -ForceApplicationShutdown 
```

```powershell:コマンド実行例
# CBS
Add-AppxPackage -DisableDevelopmentMode -Register "C:\Windows\SystemApps\MicrosoftWindows.Client.CBS_cw5n1h2txyewy\AppXManifest.xml" -ForceApplicationShutdown 

# StartMenuExperienceHost
Add-AppxPackage -DisableDevelopmentMode -Register "C:\Windows\SystemApps\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\AppXManifest.xml" -ForceApplicationShutdown 

# ShellExperienceHost
Add-AppxPackage -DisableDevelopmentMode -Register "C:\Windows\SystemApps\ShellExperienceHost_cw5n1h2txyewy\AppXManifest.xml" -ForceApplicationShutdown 

# 設定アプリ
Add-AppxPackage -DisableDevelopmentMode -Register "C:\Windows\ImmersiveControlPanel\AppXManifest.xml" -ForceApplicationShutdown 
```

### 初回ログイン時にインストールされる UWP アプリのリストを管理
初回ログイン時にインストールされる UWP アプリを管理する主なコマンドは、以下の３つになります。これらのコマンドは、PowerShell を管理者として起動し、実行する必要があります。

Get-AppxProvisionedPackage
https://learn.microsoft.com/en-us/powershell/module/dism/get-appxprovisionedpackage

Remove-AppxProvisionedPackage
https://learn.microsoft.com/en-us/powershell/module/dism/remove-appxprovisionedpackage

Add-AppxProvisionedPackage
https://learn.microsoft.com/en-us/powershell/module/dism/add-appxprovisionedpackage

マスターを作成し、Windows PC や VDI を大規模展開する企業以外にあまり、一般のユーザーが使用することはないと思いますので、初回ログイン時にインストールされる UWP アプリを出力するコマンドのみを記載しておきます。

```powershell
Get-AppxProvisionedPackage -Online | ConvertTo-json | Out-File -FilePath getAppxProvisionedPackage.json
```

## さいごに
どのアプリが、UWP アプリであることを意識する場面はあまりありませんが、UWP アプリが正常に動作しないとか、アプリがインストールされていないとかを調べるときには、活用できるかなと思います。