Toepassingsinstallatie met remoteApp Virtual Machine

Installeer een toepassing via de catalogussjabloon voor virtuele machines.

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

  • De meest voorkomende use-case voor de installatie van de RemoteApp-app is het implementeren van externe toepassingen die toegankelijk zijn vanuit een Azure Virtual Destop.
  • 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 container (artefacten) 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

Installatie

Opslagaccount instellen om Visual Studio Code te installeren

  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 Vscode.exe en upload het installatieprogramma naar de app-map in het opslagaccount.
  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' -Argument "/VERYSILENT /MERGETASKS=!runcode"
    

Sjabloon instellen

  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 Next

  2. Tabblad Basis:

    • Voer voor Virtual Machine name de naam van de virtuele machine in.
    • Admin username Admin passwordVoer de gebruikersnaam en het wachtwoord in die u gebruikt om u aan te melden bij uw virtuele machine.
  3. App-tabblad:

    • Voer voor App folder URI de URI van de container in. Selecteer een artefact in de container, kopieer de URI, 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 invoer van de naam (bijvoorbeeld: main.ps1) van het script waarmee de toepassing wordt geïnstalleerd.

    Schermopname van het tabblad App tijdens een implementatie van een virtuele machine.

Privécontainer:

  1. Voor App folder in private container selecteert u true om de rol reader toegang te geven tot het opslagaccount via de virtuele machine.

  2. Haal voor Storage container resource id de volgende drie onderdelen op: <storage-account-resource-id> + '/blobServices/default/containers/' + <container-name>.

    • Als u Storage container resource id wilt ophalen uit het opslagaccount, selecteert u 'Overzicht', selecteert u uiterst rechts 'JSON-weergave' en kopieert u de resource-id van het opslagaccount.

    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/000000a0-a0a0-000a-00a0-0000aaa0a000/resourceGroups/providers/Microsoft.Storage/storageAccounts/storage-account-example/blobServices/default/containers/container-name
  3. Als de parameter AzCopy File URI wordt weergegeven, voegt u de URI toe aan de azcopy.exe vanuit de container

    • 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 Review and Create, als validaties zijn geslaagd , selecteert u Create.
  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-installatie

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')
        - ('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 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. Doorgaan met implementeren van sjabloon