Applicatie-installatie door gebruik te maken van een RemoteApp virtuele machine

Gebruik de Virtual Machine servicecatalogustemplate om een applicatie te installeren en te configureren op een RemoteApp virtuele machine.

Het installatiescript van de toepassing ondersteunt de volgende scenario's:

  • Het meest voorkomende gebruiksscenario voor RemoteApp-applicatieinstallatie is het deployen van externe applicaties die je kunt bereiken via Azure Virtual Desktop.
  • Installeer uw vereisten, zoals cyberbeveiliging en bewakingsagenten.
  • Wijzigingen in scriptconfiguratie voor naleving of installatie van toepassingen.

Note

Deze voorbeeldimplementatie is alleen bedoeld voor demodoeleinden en vertegenwoordigt niet alle aanbevolen procedures voor netwerk-, systemen- of toepassingsbeheer.

Prerequisites

De RemoteApp-sjabloon ondersteunt scripting om het installatieproces van toepassingen te automatiseren en de virtuele machine te configureren. Voordat u de installatie van de RemoteApp-app kunt gaan gebruiken, moet u ervoor zorgen dat u het volgende hebt:

  • Een community, enclave, workload en ten minste één workloadresourcegroep en machtigingen voor het maken van resources in de workloadresourcegroep.
  • Schakel Advancedde onderhoudsmodus in voor uw enclave, zodat u de Private Link resources kunt toevoegen aan uw beheerde enclaveresourcegroep.
  • Een artefactencontainer binnen het opslagaccount.
  • Een openbaar eindpunt naar het opslagaccount en optioneel naar een bestaande kopie van AzCopy.exe.
  • Een kopie van AzCopy.exe
    • AzCopy downloaden.
    • Upload het AzCopy-installatieprogramma naar het opslagaccount op hetzelfde niveau als uw app-map.
    • Bestandsstructuur:
          - storage account
              - artifacts container
                  - app folder
                  - azcopy.exe 
      
      Schermopname van de structuur van de opslagcontainerorganisatie met meerdere app-mappen in dezelfde container en met dezelfde kopie van AzCopy.exe.
  • Enclaveverbindingen tussen de eerder gemaakte community-eindpunten en het enclavesubnet.

Note

Als het opslagaccount zich in een andere enclave bevindt, maakt u een enclave-eindpunt in de enclave met het opslagaccount. Maak vervolgens een enclaveverbinding tussen die opslagaccount-enclave en de enclave waar u de toepassing installeert.

Geïmplementeerde Azure-resources

  • Voorbeeld van een virtuele machine van RemoteApp
    • schijf
    • Windows virtuele machine
    • Windows-extensie voor virtuele machines

Software geïmplementeerd

  • Windows
  • Toepassing van uw keuze

De sjabloon implementeren

Applicatiebestanden voorbereiden

  1. Voeg de app-map toe aan de container in het opslagaccount. Diagram met de installatiemethode binnen dezelfde enclave. Diagram van de installatiemethode buiten enclave die het opslagaccount bevat.
    • Bestandsstructuur:
          - artifacts container
              - app folder
                  - app installer
                  - main script to install app
                  - (optional) additional scripts
                  - (optional) azcopy.exe
      
  2. Download het toepassingsinstallatieprogramma dat u nodig hebt. Download in dit voorbeeld Visual Studio Code en upload het installatieprogramma naar de app-map van het storageaccount.
  3. Upload het installatiescript van de main.ps1 toepassing dat compatibel is met de versie van Visual Studio Code die u hebt toegevoegd aan de app-map van het opslagaccount:
        # Main PowerShell script that installs the application
    
        Start-Process 'C:\vscode\VSCodeSetup-x64-<version>.exe' -ArgumentList '/VERYSILENT /MERGETASKS=!runcode'
    

De sjabloon configureren

  1. Selecteer op de overzichtspagina van de werkbelasting de optie +Add an Azure Service.

Schermopname van de overzichtspagina van de werkbelasting.

  1. Voor Service, selecteer Virtual Machine.

Schermafbeelding waarop Virtual Machine is geselecteerd in de lijst met servicecatalogi.

  1. Bevestig de selectie van de resourcegroep en selecteer vervolgens Volgende.

  2. Tabblad Basis:

    • Voer voor Virtual Machine name de naam van de virtuele machine in.
    • Voer voor Beheerdersgebruikersnaam en Beheerderswachtwoord de gebruikersnaam en het wachtwoord in die je gebruikt om je aan te melden bij je virtuele machine.
  3. App-tabblad:

    • Voor de App-map-URI voer je de URI naar de container in. Selecteer een artefact binnen de container, kopieer de URI ervan en verwijder alles na de mapnaam in de URI. Schermopname van de URI van de toepassingsmap voor gebruik in deze implementatie.

      Oorspronkelijke URI Gecorrigeerde 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>
    • Voorbeeld:

      • storageaccountexample.blob.core.windows.net/artifacts/vscode
    • Voor Main Script, voer je de naam in (bijvoorbeeld main.ps1) van het script dat de applicatie installeert.

    Schermafbeelding van het tabblad App tijdens de uitrol van een virtuele machine.

Privécontainer:

  1. Voor de App-map in een private container selecteer true om de identiteit van de virtuele machine toegang op containerniveau Storage Blob Data Reader te verlenen.

  2. Combineer voor Storage container resource id deze drie delen: <storage-account-resource-id> + /blobServices/default/containers/ + <container-name>.

    • Om de Storage container resource id te krijgen, selecteer je vanuit het opslagaccount Overzicht, selecteer JSON View helemaal rechts en kopieer je de resource ID van het storage-account.

    Schermopname van de resource-id van het account voor gebruik in deze implementatie.

    • Kopieer voor de containernaam de naam van de privécontainer die de artefacten bevat.
    • Voorbeeld van resource-id van opslagcontainer: /subscriptions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/resourceGroups/resource-group-example/providers/Microsoft.Storage/storageAccounts/storage-account-example/blobServices/default/containers/container-name
  3. Als de parameter AzCopy File URI wordt weergegeven, voer dan de URI naar azcopy.exe vanuit de container in.

    • Selecteer het bestand en kopieer de URL:

    Schermopname van de structuur van de opslagcontainerorganisatie met azcopy.exe bestand.

    Schermopname van de URI voor het azcopy.exe-bestand.

Voorbeeld van privécontainerparameters:

Schermopname van de voltooide parameters voor het tabblad App.

  1. Selecteer Controleren en maken. Als de validatie is geslaagd, selecteert u Maken.
  2. Zodra resources zijn geïmplementeerd, controleert u of de app is geïnstalleerd op de virtuele toepassingsmachine door verbinding te maken met de virtuele toepassingsmachine. Verbinding maken met de virtuele toepassingsmachine

WinGet en extra applicaties installeren

Mapstructuur:

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

Schermopname van de artefacten die nodig zijn om winget te installeren op de RemoteApp om vervolgens andere toepassingen te installeren en te beheren met behulp van winget.

  1. Download de installatieprogramma's en upload deze naar de map winget in de opslagcontainer
  2. Scripts maken en uploaden
    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. Ga verder met het configureren van het sjabloon.