
[!] この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
当社では文教分野でPCの運用・管理を支援する製品V-Boot ⧉・V-Recover ⧉を開発しています。
これらの製品は多台数のPCへ、お客様が作成したイメージ(OSやアプリケーションなどの設定に関する情報)を⼀斉配信し、同じ環境に統⼀することができます。
どのような環境に統一するかはお客様により様々ですが、その中でも「PCを利用するユーザーが使用できるストアアプリについて制御したい」といった要望が多く、当社ではその実現方法について調査しました。
この記事ではその際に調査した、Windows環境でユーザーの初回ログオン時に自動でインストールされるストアアプリを追加・削除する方法についてご紹介します。
ストアアプリとは
はじめに、ストアアプリの概要についてご説明します。
ストアアプリとは、Microsoft Storeからインストール・購入できるアプリのことです。
従来のデスクトップアプリ(.NET FrameworkやWin32APIで作られたアプリ)と比較すると、以下のような特徴があります。
ストアアプリ | デスクトップアプリ | |
---|---|---|
インストール方法 | Microsoft Store | ソフトメーカーや外部のサイト |
インストールのための権限 | Microsoft Storeが利用できれば誰でも | 管理者権限のみ |
インストール先フォルダ | 管理者権限でもアクセスできない隔離された領域 | 任意のフォルダ |
アプリの実行場所 | 個別のサンドボックス内 | PCのデスクトップ上 |
アプリ設定の保存フォルダ | 各ユーザーのプロファイルのAppData\Local\Packages配下のフォルダ | アプリごとに異なる |
アンインストール時 | インストール先フォルダのファイルが保持される | 基本的には全てのファイルが削除される |
また、ストアアプリの中にはプロビジョニングアプリとして登録されているものがあります(例:メモ帳など)。
プロビジョニングアプリとして登録されているストアアプリは、ユーザーが最初にログオンした時に自動でインストールされるようになります。
初回ログオン時に自動でインストールされるストアアプリを設定する
ここからは、V-Boot・V-Recoverを導入する際に実際におこなっている、ユーザーが最初にログオンした時に自動でインストールされるストアアプリを設定する方法についてご紹介します。
前提条件
OS:Windows 11 Pro 22H2
環境:ドメインに参加済み
ユーザーに利用させたくないストアアプリを削除する
プロビジョニングアプリとして登録されているストアアプリの中には、授業や業務では必要のないアプリが混じっています(例:ゲームなど)。 そういったストアアプリをユーザーに利用させたくない場合には、プロビジョニングアプリから削除しておくことで最初のログオン時に自動でインストールされなくなります。
-
Windows PowerShellを管理者権限で実行します。
-
以下のコマンドを実行して、削除したいアプリの識別名を確認します。
Terminal window Get-AppxProvisionedPackage -Online -
削除したいアプリの「PackageName」の値を確認します。以下はMicrosoftのペイントアプリの例です。
DisplayName : Microsoft.PaintVersion : 11.2304.33.0Architecture : neutralResourceId : ~PackageName : Microsoft.Paint_11.2304.33.0_neutral_~_8wekyb3d8bbweRegions : all -
以下のコマンドの「PackageName」に手順3で確認した値を入力してプロビジョニングアプリから削除します。
Terminal window Remove-AppxProvisionedPackage -Online -PackageName <PackageName>
この手順でプロビジョニングアプリから削除したストアアプリについては、Microsoft Storeから再度同じアプリをインストールしても、プロビジョニングアプリとして登録されないようになります。
削除するストアアプリについては、慎重に判断してください。
ユーザーに利用させたいストアアプリを追加する
授業や業務などでユーザーに利用させたいストアアプリがある場合は、以下の手順のどちらかを実施することで最初のログオン時に自動でインストールされるようになります。
- 利用したいストアアプリをプロビジョニングアプリとして登録する
- ユーザーのログオン時に、ログオンスクリプトで利用したいストアアプリをインストールする
利用させたいストアアプリをプロビジョニングアプリとして登録する
プロビジョニングアプリとして登録することで、ユーザーの初回ログオン時に自動でインストールされるようになります。
なお、プロビジョニングアプリとして登録するには、登録したいアプリのパッケージファイルが必要となります。あらかじめ登録したいアプリのパッケージファイルを取得し、任意のフォルダに配置してください。
※Microsoftでは、パッケージファイルのダウンロードリンクを一般には公開していません。そのため、この手順で追加できるのは自作のアプリなどのみとなります。
-
管理者ユーザーでログオンします。
-
Windows PowerShellを管理者権限で実行します。
-
以下のコマンドを実行して、プロビジョニングアプリとして登録したいアプリをインストールします。
Terminal window Add-AppxProvisionedPackage -Online -PackagePath "パッケージファイルのパス" -SkipLicense -
以下の結果が返ってくることを確認します。
Terminal window Path :Online : TrueRestartNeeded : False -
登録したいアプリがインストールされたことを確認するため、以下のコマンドを実行します。
Terminal window Get-AppxProvisionedPackage -Online | Where-Object { $_.DisplayName -ieq "登録したいアプリのDisplayName" } -
以下の結果が返ってくることを確認します。
Terminal window DisplayName : "登録したいアプリのDisplayName"Version : "登録したいアプリのバージョン情報"Architecture : neutralResourceId : ~PackageName : "登録したいアプリのPackageName"Regions : all
ユーザーのログオン時に、ログオンスクリプトで利用させたいストアアプリをインストールする
ログオンスクリプトでストアアプリのマニフェストファイル(appxManifest.xml)を指定することで、初回ログオンしたユーザーに対して利用したいストアアプリをインストールすることができます。プロビジョニングアプリへの登録ができないストアアプリを追加したい場合は、この手順を実施する必要があります。
なお、この手順ではストアアプリのインストールはログオン後に順番に実行されるため、インストールするストアアプリが多い場合はインストールに時間がかかることがあります。
また、インストールが終わるまではストアアプリを利用することができません。
手順を実施する前に、以下のようなフォルダを作成して必要なスクリプトを準備します。
C|└─StoreApp | | GetAppList.ps1 | InstallAppPackage.ps1 | InstallAppPackage.vbs
各スクリプトの詳細については以下になります。
-
GetAppList.ps1
- スクリプトを実行したユーザーにインストールされているストアアプリの一覧を取得するPowershellスクリプトです。管理者ユーザーで一度だけ実行します。
- 実行すると、取得したストアアプリの一覧が記載されたファイルが、パラメータで指定したパスに出力されます。この手順では、GetAppList.ps1と同じフォルダに「AppList.txt」というテキストファイルを出力します。
Terminal window Param( [string]$file )$ExportFile = $file$AppxManifest = "\appxManifest.xml"Remove-Item $ExportFile# 実行ユーザーにインストールされているストアアプリの一覧を取得$StoreNameList = (Get-AppxPackage | ? { $_.SignatureKind -ne "System" } | Where IsFrameWork -eq $false).Name# 取得したストアアプリの一覧を出力for ($i=0 ; $i -lt $StoreNameList.length ; $i++){$StoreName = $StoreNameList[$i].TrimEnd()$StorePath = (Get-appxpackage $StoreName -User .\$TargetUser).InstallLocationecho $StorePath$AppxManifest >> $ExportFile} -
InstallAppPackage.vbs
- 後述する「InstallAppPackage.ps1」を実行するVBScriptです。
レジストリに登録することで、ユーザーの初回ログオン時に自動で実行されます。
Option Explicit' このファイルと同じフォルダにある「同じファイル名.ps1」を、ウィンドウを開かずサイレント実行するDim psFilePath : psFilePath = Replace(WScript.ScriptFullName, ".vbs", ".ps1")WScript.CreateObject("WScript.Shell").Run "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -File """ & "InstallAppPackage.ps1のパス" & """ " & "AppList.txtのパス", 0 - 後述する「InstallAppPackage.ps1」を実行するVBScriptです。
-
InstallAppPackage.ps1
- 取得したストアアプリの一覧を元に、ストアアプリをインストールするPowershellスクリプトです。
「InstallAppPackage.vbs」によって自動で実行されます。
Terminal window Param( [string]$file )$ImportFile = $file$Storelist = Get-Content "$ImportFile"for ($i=0 ; $i -lt $Storelist.length ; $i++){Add-AppxPackage -Register $Storelist[$i] -DisableDevelopmentMode} - 取得したストアアプリの一覧を元に、ストアアプリをインストールするPowershellスクリプトです。
※ 紹介したスクリプトの内容については、あくまで一例となります。ストアアプリ一覧の取得と初回ログオン時のインストールができれば、どのような内容でも構いません。 この手順では、紹介した内容のスクリプトを使う前提で説明します。
スクリプトの準備ができたら、以下の設定を実施します。
-
管理者ユーザーでログオンします。
-
ユーザーの初回ログオン時に、自動でインストールしたいストアアプリの一覧を用意します。
2.1. Microsoft Storeから、ユーザーに利用させたいストアアプリをインストールします。また、利用しないストアアプリはアンインストールします。
2.2. 以下のコマンドでGetAppList.ps1を実行し、管理者ユーザーにインストールされているストアアプリの一覧を取得します。Terminal window .\GetAppList.ps1 -File "C:\StoreApp\AppList.txt"2.3. インストールされているストアアプリの中で、自動でインストールする必要がないストアアプリがある場合は、取得したファイルを編集し、対象のストアアプリ名を削除します。
-
プロビジョニングアプリに登録されているストアアプリの中で、自動でインストールする必要がないストアアプリがある場合は、「ユーザーに利用させたくないストアアプリを削除する」の手順を実施してプロビジョニングアプリから削除します。
-
InstallAppPackage.vbsをレジストリへ登録します。
4.1. レジストリ エディターを開きます。
4.2. 「HKEY_USERS」のサブキーを選択し、「ファイル→ハイブの読み込み」を選択します。4.3.
C:\Users\Default\NATUSER.DAT
を選択し、開くを押します。4.4. 任意のキー名を入力します。
4.5. 「HKEY_USERS\読み込んだハイブのキー名\Software\Microsoft\Windows\CurrentVersion\RunOnce」に、InstallAppPackage.vbsのパスを登録します。
4.6. 読み込んだハイブを選択し、「ファイル→ハイブのアンロード」を選択して読み込んだハイブをアンロードします。
実施後は、ユーザーが初回ログオンした時にストアアプリが自動でインストールされるようになります。
おわりに
この記事では、ユーザーの初回ログオン時に自動でインストールされるストアアプリの追加・削除方法についてご紹介しました。
V-Bootに携わっているベンダー会社様や、学校・企業などでPCを管理している方の一助になれば幸いです。