RemoteApp仮想マシンを用いたアプリケーションインストール

Virtual Machineサービスカタログテンプレートを使用して、RemoteApp仮想マシン上でアプリケーションをインストールし設定します。

アプリケーション インストール スクリプトでは、次のシナリオがサポートされています。

  • RemoteApp アプリケーション インストールの最も一般的なユース ケースは、Azure Virtual Desktop からアクセスできるリモート アプリケーションをデプロイすることです。
  • サイバーセキュリティや監視エージェントなどの前提条件をインストールします。
  • コンプライアンスまたはアプリケーションのセットアップに関するスクリプト構成の変更。

Note

このサンプルデプロイはデモ目的のものであり、ネットワーク、システム、またはアプリケーションの管理に関するすべてのベスト プラクティスを表すわけではありません。

前提条件

RemoteApp テンプレートでは、アプリケーションのインストールと仮想マシンの構成プロセスを自動化するためのスクリプトがサポートされています。 RemoteApp アプリのインストールの使用を開始する前に、次の機能があることを確認する必要があります。

Note

ストレージ アカウントが別のエンクレーブにある場合は、ストレージ アカウントを使用して エンクレーブ 内にエンクレーブ エンドポイント を作成します。 次に、そのストレージ アカウント エンクレーブ と、アプリケーションをインストールするエンクレーブの間にエンクレーブ接続を作成します。

デプロイされた Azure リソース

  • RemoteApp の仮想マシンの例
    • Disk
    • Windows仮想マシン
    • Windows 仮想マシン拡張機能

展開されたソフトウェア

  • Windows
  • 選択したアプリケーション

テンプレートをデプロイする

アプリケーションファイルの準備

  1. ストレージ アカウント内のコンテナーにアプリ フォルダーを追加します。 同じエンクレーブ内のインストール方法を示す図。 ストレージ アカウントを含むエンクレーブ外のインストール方法を示す図。
    • ファイル構成:
          - artifacts container
              - app folder
                  - app installer
                  - main script to install app
                  - (optional) additional scripts
                  - (optional) azcopy.exe
      
  2. 必要なアプリケーション インストーラーをダウンロードします。 この例では、Visual Studio Codeをダウンロードし、インストーラーをストレージアカウントのアプリフォルダにアップロードします。
  3. ストレージ アカウント アプリ フォルダーに追加したVisual Studio Codeのバージョンと互換性のある main.ps1 アプリケーション インストーラー スクリプトをアップロードします。
        # Main PowerShell script that installs the application
    
        Start-Process 'C:\vscode\VSCodeSetup-x64-<version>.exe' -ArgumentList '/VERYSILENT /MERGETASKS=!runcode'
    

テンプレートを構成する

  1. ワークロードの概要ページで、 +Add an Azure Serviceを選択します。

ワークロードの概要ページを示すスクリーンショット。

  1. Serviceの場合は、[Virtual Machine] を選択します。

サービス カタログの一覧から選択された仮想マシンを示すスクリーンショット。

  1. リソース グループの選択を確認し、次へ を選択します。

  2. [基本] タブ:

    • Virtual Machine nameの場合は、仮想マシンの名前を入力します。
    • 管理者のユーザー名と管理者パスワードについては、仮想マシンにサインインする際に使うユーザー名とパスワードを入力します。
  3. [アプリ] タブ:

    • アプリ フォルダの URI については、コンテナの URI を入力してください。 コンテナ内のアーティファクトを選択し、そのURIをコピーし、URI内のフォルダ名以降はすべて削除します。 このデプロイで使用するアプリケーション フォルダー URI を示すスクリーンショット。

      元の URI 固定URI
      https://<storage-account>.blob.core.windows.net/<container-name>/<folder-name>/<script>.ps1 https://<storage-account>.blob.core.windows.net/<container-name>/<folder-name>
    • 例:

      • storageaccountexample.blob.core.windows.net/artifacts/vscode
    • メインスクリプトでは、アプリケーションをインストールするスクリプトの名前(例えばmain.ps1)を入力します。

    仮想マシン展開中のアプリタブのスクリーンショットです。

プライベート コンテナー:

  1. プライベート コンテナー内のアプリ フォルダーについては、Storage Blob Data Reader を選択して、仮想マシン ID にコンテナー レベルの true アクセスを許可します。

  2. ストレージコンテナリソースIDについては、以下の3つの部分を組み合わせます:<storage-account-resource-id> + /blobServices/default/containers/ + <container-name>。

    • ストレージ コンテナーのリソース ID を取得するには、ストレージ アカウントから [概要] を選択し、右端にある [JSON ビュー] を選択して、ストレージ コンテナーのリソース ID をコピーします。

    このデプロイで使用するアカウント リソース ID のスクリーンショット。

    • コンテナー名には、成果物を保持するプライベート コンテナーの名前をコピーします。
    • ストレージ コンテナーのリソース ID の例: /subscriptions/000000a0-a0a0-000a-00a0-0000aaa0a000/resourceGroups/resource-group-example/providers/Microsoft.Storage/storageAccounts/storage-account-example/blobServices/default/containers/container-name
  3. パラメーター AzCopy File URI が表示されている場合は、コンテナからの azcopy.exe に URI を入力します。

    • ファイルを選択し、その URL をコピーします。

    azcopy.exe ファイルを含むストレージ コンテナーの組織構造を示すスクリーンショット。

    azcopy.exe ファイルの URI を示すスクリーンショット。

プライベート コンテナー パラメーターの例:

[アプリ] タブのパラメーターが完了したことを示すスクリーンショット。

  1. [確認と作成] を選択します。 検証に合格した場合は、[ 作成] を選択します。
  2. リソースがデプロイされたら、アプリケーション仮想マシンに接続して、アプリケーション仮想マシンにアプリがインストールされているかどうかを確認します。 アプリケーション仮想マシンに接続する

WinGetおよび追加アプリケーションのインストール

フォルダー構造:

- artifacts container
    - WinGet app folder ('winget')
        - WinGet installer ('Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle')
        - Windows UI Library ('Microsoft.UI.Xaml.2.8.x64.appx')
        - main script to schedule install ('main.ps1')
        - script to install and schedule reboot ('install_winget.ps1')
        - script to restart the virtual machine ('restart.ps1')

winget を RemoteApp にインストールし、winget を使用して他のアプリケーションをインストールして管理するために必要な成果物を示すスクリーンショット。

  1. インストーラーをダウンロードし、ストレージ コンテナー内の winget フォルダーにアップロードする
  2. スクリプトの作成とアップロード
    1. main.ps1
      # This script creates and runs a scheduled task to install the appx package and msix bundle with elevated privileges
      
      $installScriptPath = "C:\winget\install_winget.ps1"
      
      # Create a scheduled task action to run the installation script with elevated permissions
      $taskAction = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "-ExecutionPolicy Bypass -File $installScriptPath"
      
      # Set the task to start 30 seconds from now
      $taskTrigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddSeconds(30)
      $taskPrincipal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
      
      # Register the scheduled task
      Register-ScheduledTask -TaskName "InstallWinget" -Action $taskAction -Trigger $taskTrigger -Principal $taskPrincipal
      
    2. install_winget.ps1
      Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force
      
      Start-Process -FilePath "DISM.exe" -ArgumentList "/Online /Add-ProvisionedAppxPackage /PackagePath:C:\winget\Microsoft.UI.Xaml.2.8.x64.appx /SkipLicense" -NoNewWindow -Wait
      Start-Process -FilePath "DISM.exe" -ArgumentList "/Online /Add-ProvisionedAppxPackage /PackagePath:C:\winget\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle /SkipLicense" -NoNewWindow -Wait
      
      $wingetDir = 'C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_1.23.1791.0_x64__8wekyb3d8bbwe'
      $currentPath = [System.Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine)
      [System.Environment]::SetEnvironmentVariable("Path", "$currentPath;$wingetDir", [System.EnvironmentVariableTarget]::Machine)
      
      # Schedule the restart script
      $rebootScriptPath = "C:\winget\restart.ps1"
      $taskAction = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "-ExecutionPolicy Bypass -File $rebootScriptPath"
      
      # Set the task to start 30 seconds from now
      $taskTrigger = New-ScheduledTaskTrigger -Once -At ((Get-Date).AddSeconds(30))
      $taskPrincipal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
      
      # Register the scheduled task
      Register-ScheduledTask -TaskName "Reboot" -Action $taskAction -Trigger $taskTrigger -Principal $taskPrincipal
      
    3. restart.ps1
      Restart-Computer -Force
      
  3. [テンプレートの構成] に進みます。