Anwendungsinstallation mittels einer RemoteApp-virtuellen Maschine

Verwenden Sie die Virtual-Machine-Servicekatalogvorlage, um eine Anwendung auf einer RemoteApp-virtuellen Maschine zu installieren und zu konfigurieren.

Das Anwendungsinstallationsskripting unterstützt die folgenden Szenarien:

  • Der häufigste Anwendungsfall für die Installation von RemoteApp-Anwendungen ist die Bereitstellung von entfernten Anwendungen, auf die Sie von einem Azure Virtual Desktop zugreifen können.
  • Installieren Sie Ihre erforderlichen Komponenten, z. B. Cybersicherheits- und Überwachungs-Agents.
  • Änderungen an der Skriptkonfiguration zur Compliance oder Anwendungskonfiguration.

Note

Diese Beispielbereitstellung dient nur zu Demozwecken und stellt nicht alle bewährten Methoden für die Verwaltung von Netzwerken, Systemen oder Anwendungen dar.

Voraussetzungen

Die RemoteApp-Vorlage unterstützt skripting, um den Prozess der Installation von Anwendungen zu automatisieren und den virtuellen Computer zu konfigurieren. Bevor Sie mit der Verwendung der RemoteApp-App-Installation beginnen können, müssen Sie folgendes sicherstellen:

  • Eine Community, Enklave, Workload und mindestens eine Workload-Ressourcengruppe und Berechtigungen zum Erstellen von Ressourcen innerhalb der Workload-Ressourcengruppe.
  • Aktivieren Sie Advancedden Wartungsmodus für Ihre Enklave, damit Sie die Private Link Ressourcen zu Ihrer verwalteten Ressourcengruppe hinzufügen können.
  • Ein Artefakt-Container im Speicherkonto.
  • Ein Community-Endpunkt für das Storage-Konto und optional auch für eine vorhandene Kopie von AzCopy.exe.
  • Eine Kopie von AzCopy.exe
    • Laden Sie AzCopy herunter.
    • Laden Sie das AzCopy-Installationsprogramm auf das Speicherkonto auf derselben Ebene wie Ihr App-Ordner hoch.
    • Dateistruktur:
          - storage account
              - artifacts container
                  - app folder
                  - azcopy.exe 
      
      Screenshot der Organisationsstruktur des Speichercontainers mit mehreren App-Ordnern im selben Container, die dieselbe Kopie von AzCopy.exe verwenden.
  • Enklavenverbindungen zwischen den zuvor hergestellten Communityendpunkten und dem Enklavensubnetz.

Note

Wenn sich das Speicherkonto in einer anderen Enklave befindet, erstellen Sie einen Enklavenendpunkt in der Enklave mit dem Speicherkonto. Erstellen Sie dann eine Enklaveverbindung zwischen dieser Speicherkonto-Enklave und der Enklave, in der Sie die Anwendung installieren.

Bereitgestellte Azure-Ressourcen

  • RemoteApp-Beispiel für einen virtuellen Computer
    • Datenträger
    • Virtueller Windows-Computer
    • Windows-Erweiterung für virtuelle Computer

Bereitgestellte Software

  • Windows
  • Anwendung Ihrer Wahl

Implementieren der Vorlage

Anwendungsdateien vorbereiten

  1. Fügen Sie dem Container im Speicherkonto App-Ordner hinzu. Diagramm, das die Installationsmethode innerhalb derselben Enklave zeigt. Diagramm, das die Methode der Installation außerhalb der Enklave zeigt, die das Speicherkonto enthält.
    • Dateistruktur:
          - artifacts container
              - app folder
                  - app installer
                  - main script to install app
                  - (optional) additional scripts
                  - (optional) azcopy.exe
      
  2. Laden Sie das benötigte Anwendungsinstallationsprogramm herunter. In diesem Beispiel laden Sie Visual Studio Code herunter und laden Sie den Installer in den Storage Account App-Ordner hoch.
  3. Laden Sie das main.ps1 Installer-Skript hoch, das mit der Version von Visual Studio Code kompatibel ist, die Sie dem App-Ordner des Speicherkontos hinzugefügt haben:
        # Main PowerShell script that installs the application
    
        Start-Process 'C:\vscode\VSCodeSetup-x64-<version>.exe' -ArgumentList '/VERYSILENT /MERGETASKS=!runcode'
    

Konfigurieren der Vorlage

  1. Wählen Sie auf der Seite "Workloadübersicht" die Option +Add an Azure Serviceaus.

Bildschirmfoto der Seite mit der Workloadübersicht.

  1. Wählen Sie Service für Virtual Machine aus.

Screenshot, der zeigt, dass „Virtuelle Maschine“ in der Dienstkatalogliste ausgewählt ist.

  1. Bestätigen Sie die Auswahl der Ressourcengruppe und wählen Sie dann Weiter aus.

  2. Registerkarte "Grundlagen":

    • Für Virtual Machine name geben Sie den Namen der virtuellen Maschine ein.
    • Für den Admin-Benutzernamen und das Admin-Passwort geben Sie den Benutzernamen und das Passwort ein, mit dem Sie sich auf Ihrer virtuellen Maschine anmelden.
  3. App-Tab:

    • Für App-Ordner URI geben Sie die URI für den Container ein. Wählen Sie ein Artefakt im Container aus, kopieren Sie dessen URI und entfernen Sie alles nach dem Ordnernamen im URI. Screenshot mit dem URI des Anwendungsordners zur Verwendung bei dieser Bereitstellung.

      Ursprünglicher URI Feste URI
      <storage-account>https://.blob.core.windows.net/<container-name>/<folder-name>/<script>.ps1 <storage-account>https://.blob.core.windows.net/<container-name>/<folder-name>
    • Beispiel:

      • storageaccountexample.blob.core.windows.net/artifacts/vscode
    • Für Main Script geben Sie den Namen (zum Beispiel main.ps1) des Skripts ein, das die Anwendung installiert.

    Bildschirmfoto, das die Registerkarte App während einer Bereitstellung einer virtuellen Maschine zeigt.

Privater Container:

  1. Für den App-Ordner im privaten Container wählen Sie true aus, um der Identität des virtuellen Computers Zugriff auf Containerebene Storage Blob Data Reader zu gewähren.

  2. Für Storage Container resource id kombinieren Sie diese drei Teile: <storage-account-resource-id> + /blobServices/default/containers/ + <container-name>.

    • Um die Ressourcen-ID des Speichercontainers zu erhalten, wählen Sie im Speicherkonto Overview aus, wählen Sie JSON View in der ganz rechten Ecke aus und kopieren Sie die Ressourcen-ID des Speicherkontos.

    Screenshot der Ressourcen-ID des Kontos zur Verwendung in dieser Bereitstellung.

    • Kopieren Sie für den Containernamen den Namen des privaten Containers, der die Artefakte enthält.
    • Beispiel für eine Speichercontainerressourcen-ID: /subscriptions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/resourceGroups/resource-group-example/providers/Microsoft.Storage/storageAccounts/storage-account-example/blobServices/default/containers/container-name
  3. Wenn der Parameter AzCopy File URI angezeigt wird, fügen Sie den URI zum azcopy.exe aus dem Container hinzu.

    • Wählen Sie die Datei aus, und kopieren Sie die URL:

    Screenshot der Struktur der Speichercontainerorganisation mit azcopy.exe Datei.

    Screenshot mit dem URI für die azcopy.exe-Datei.

Beispielparameter für private Container:

Screenshot mit den ausgefüllten Parametern der Registerkarte „App“.

  1. Klicken Sie auf Überprüfen und erstellen. Wenn die Überprüfung erfolgreich ist, wählen Sie "Erstellen" aus.
  2. Nachdem Ressourcen bereitgestellt wurden, überprüfen Sie, ob die App auf dem virtuellen Anwendungscomputer installiert ist, indem Sie eine Verbindung mit dem virtuellen Anwendungscomputer herstellen. Herstellen einer Verbindung mit dem virtuellen Anwendungscomputer

WinGet und weitere Anwendungen installieren

Ordnerstruktur:

- 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')

Screenshot mit den Artefakten, die zum Installieren von Winget auf der RemoteApp erforderlich sind, um dann andere Anwendungen mit Winget zu installieren und zu verwalten.

  1. Laden Sie Installer herunter, und laden Sie sie in den Winget-Ordner im Speichercontainer hoch.
  2. Erstellen und Hochladen von Skripts
    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. Fahren Sie mit Die Vorlage konfigurieren fort.