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

仮想マシン サービス カタログ テンプレートを使用してアプリケーションをインストールします。

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

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

Note

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

前提条件

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

Note

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

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

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

展開されたソフトウェア

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

Installation

Visual Studio Codeをインストールするようにストレージ アカウントを設定する

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

セットアップ テンプレート

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

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

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

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

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

  2. [基本] タブ:

    • Virtual Machine nameの場合は、仮想マシンの名前を入力します。
    • Admin usernameAdmin passwordには、仮想マシンへのログインに使用するユーザー名とパスワードを入力します。
  3. [アプリ] タブ:

    • App folder 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 Scriptの場合は、アプリケーションをインストールするスクリプトの名前 (例: main.ps1) を入力します。

    仮想マシンのデプロイ中に [アプリ] タブを示すスクリーンショー。

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

  1. App folder in private container では、reader ロールによるストレージ アカウントへの仮想マシン経由のアクセスを許可するには、true を選択します。

  2. Storage container resource idでは、<storage-account-resource-id> + '/blobServices/default/containers/' + <container-name>の 3 つの部分を取得します。

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

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

    • コンテナー名には、成果物を保持するプライベート コンテナーの名前をコピーします。
    • ストレージ コンテナーのリソース ID の例: subscriptions/000000a0-a0a0-000a-00a0-0000aaa0a000/resourceGroups/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. Review and Createを選択し、検証に合格した場合はCreateを選択します。
  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')
        - ('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 reboot script
      $rebootScriptPath = "C:\winget\reboot.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. テンプレートのデプロイに進む