ユーザーの初回ログオン時に自動でインストールするストアアプリを設定する

カバー

当社では文教分野でPCの運用・管理を支援する製品V-BootV-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
環境:ドメインに参加済み

ユーザーに利用させたくないストアアプリを削除する

プロビジョニングアプリとして登録されているストアアプリの中には、授業や業務では必要のないアプリが混じっています(例:ゲームなど)。 そういったストアアプリをユーザーに利用させたくない場合には、プロビジョニングアプリから削除しておくことで最初のログオン時に自動でインストールされなくなります。

  1. Windows PowerShellを管理者権限で実行します。

  2. 以下のコマンドを実行して、削除したいアプリの識別名を確認します。

    Get-AppxProvisionedPackage -Online
  3. 削除したいアプリの「PackageName」の値を確認します。以下はMicrosoftのペイントアプリの例です。

    DisplayName  : Microsoft.Paint
    Version      : 11.2304.33.0
    Architecture : neutral
    ResourceId   : ~
    PackageName  : Microsoft.Paint_11.2304.33.0_neutral_~_8wekyb3d8bbwe
    Regions      : all 
  4. 以下のコマンドの「PackageName」に手順3で確認した値を入力してプロビジョニングアプリから削除します。

    Remove-AppxProvisionedPackage -Online -PackageName <PackageName>

この手順でプロビジョニングアプリから削除したストアアプリについては、Microsoft Storeから再度同じアプリをインストールしても、プロビジョニングアプリとして登録されないようになります。
削除するストアアプリについては、慎重に判断してください。

ユーザーに利用させたいストアアプリを追加する

授業や業務などでユーザーに利用させたいストアアプリがある場合は、以下の手順のどちらかを実施することで最初のログオン時に自動でインストールされるようになります。

  1. 利用したいストアアプリをプロビジョニングアプリとして登録する
  2. ユーザーのログオン時に、ログオンスクリプトで利用したいストアアプリをインストールする

利用させたいストアアプリをプロビジョニングアプリとして登録する

プロビジョニングアプリとして登録することで、ユーザーの初回ログオン時に自動でインストールされるようになります。
なお、プロビジョニングアプリとして登録するには、登録したいアプリのパッケージファイルが必要となります。あらかじめ登録したいアプリのパッケージファイルを取得し、任意のフォルダに配置してください。
※Microsoftでは、パッケージファイルのダウンロードリンクを一般には公開していません。そのため、この手順で追加できるのは自作のアプリなどのみとなります。

  1. 管理者ユーザーでログオンします。

  2. Windows PowerShellを管理者権限で実行します。

  3. 以下のコマンドを実行して、プロビジョニングアプリとして登録したいアプリをインストールします。

    Add-AppxProvisionedPackage -Online -PackagePath "パッケージファイルのパス" -SkipLicense
  4. 以下の結果が返ってくることを確認します。

    Path          :
    Online        : True
    RestartNeeded : False
  5. 登録したいアプリがインストールされたことを確認するため、以下のコマンドを実行します。

    Get-AppxProvisionedPackage -Online | Where-Object { $_.DisplayName -ieq "登録したいアプリのDisplayName" }
  6. 以下の結果が返ってくることを確認します。

    DisplayName  : "登録したいアプリのDisplayName"
    Version      : "登録したいアプリのバージョン情報"
    Architecture : neutral
    ResourceId   : ~
    PackageName  : "登録したいアプリのPackageName"
    Regions      : all

ユーザーのログオン時に、ログオンスクリプトで利用させたいストアアプリをインストールする

ログオンスクリプトでストアアプリのマニフェストファイル(appxManifest.xml)を指定することで、初回ログオンしたユーザーに対して利用したいストアアプリをインストールすることができます。プロビジョニングアプリへの登録ができないストアアプリを追加したい場合は、この手順を実施する必要があります。
なお、この手順ではストアアプリのインストールはログオン後に順番に実行されるため、インストールするストアアプリが多い場合はインストールに時間がかかることがあります。
また、インストールが終わるまではストアアプリを利用することができません。

手順を実施する前に、以下のようなフォルダを作成して必要なスクリプトを準備します。

C  
|  
└─StoreApp  
    |
    | GetAppList.ps1
    | InstallAppPackage.ps1
    | InstallAppPackage.vbs

各スクリプトの詳細については以下になります。

  • GetAppList.ps1

    • スクリプトを実行したユーザーにインストールされているストアアプリの一覧を取得するPowershellスクリプトです。管理者ユーザーで一度だけ実行します。
    • 実行すると、取得したストアアプリの一覧が記載されたファイルが、パラメータで指定したパスに出力されます。この手順では、GetAppList.ps1と同じフォルダに「AppList.txt」というテキストファイルを出力します。
    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).InstallLocation
    echo $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

    • 取得したストアアプリの一覧を元に、ストアアプリをインストールするPowershellスクリプトです。
      「InstallAppPackage.vbs」によって自動で実行されます。
    Param( [string]$file )
    
    $ImportFile = $file
    
    $Storelist = Get-Content "$ImportFile"
    
    for ($i=0 ; $i -lt $Storelist.length ; $i++){
    Add-AppxPackage -Register $Storelist[$i] -DisableDevelopmentMode
    }

※ 紹介したスクリプトの内容については、あくまで一例となります。ストアアプリ一覧の取得と初回ログオン時のインストールができれば、どのような内容でも構いません。 この手順では、紹介した内容のスクリプトを使う前提で説明します。

スクリプトの準備ができたら、以下の設定を実施します。

  1. 管理者ユーザーでログオンします。

  2. ユーザーの初回ログオン時に、自動でインストールしたいストアアプリの一覧を用意します。
    2.1. Microsoft Storeから、ユーザーに利用させたいストアアプリをインストールします。また、利用しないストアアプリはアンインストールします。
    2.2. 以下のコマンドでGetAppList.ps1を実行し、管理者ユーザーにインストールされているストアアプリの一覧を取得します。

    .\GetAppList.ps1 -File "C:\StoreApp\AppList.txt"

    2.3. インストールされているストアアプリの中で、自動でインストールする必要がないストアアプリがある場合は、取得したファイルを編集し、対象のストアアプリ名を削除します。

  3. プロビジョニングアプリに登録されているストアアプリの中で、自動でインストールする必要がないストアアプリがある場合は、「ユーザーに利用させたくないストアアプリを削除する」の手順を実施してプロビジョニングアプリから削除します。

  4. 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を管理している方の一助になれば幸いです。


TOP
アルファロゴ 株式会社アルファシステムズは、ITサービス事業を展開しています。このブログでは、技術的な取り組みを紹介しています。X(旧Twitter)で更新通知をしています。