Erstellen von PowerShell-Skripts für MSIX App Attach (Vorschau)Create PowerShell scripts for MSIX app attach (preview)

Wichtig

Das MSIX-Features zum Anfügen von Apps befindet sich zurzeit in der öffentlichen Vorschauphase.MSIX app attach is currently in public preview. Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und ist nicht für Produktionsworkloads vorgesehen.This preview version is provided without a service level agreement, and we don't recommend using it for production workloads. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar.Certain features might not be supported or might have constrained capabilities. Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.For more information, see Supplemental Terms of Use for Microsoft Azure Previews.

In diesem Thema erfahren Sie, wie Sie PowerShell-Skripts für MSIX App Attach einrichten.This topic will walk you through how to set up PowerShell scripts for MSIX app attach.

Wichtig

Bevor Sie beginnen, sollten Sie dieses Formular ausfüllen und übermitteln, um MSIX App Attach in Ihrem Abonnement zu aktivieren.Before you get started, make sure to fill out and submit this form to enable MSIX app attach in your subscription. Wenn Ihre Anforderung noch nicht genehmigt wurde, funktioniert MSIX App Attach nicht.If you don't have an approved request, MSIX app attach won't work. Die Genehmigung von Anforderungen kann an Werktagen bis zu 24 Stunden dauern.Approval of requests can take up to 24 hours during business days. Sie erhalten eine E-Mail, wenn Ihre Anforderung akzeptiert und abgeschlossen wurde.You'll get an email when your request has been accepted and completed.

Installieren von ZertifikatenInstall certificates

Sie müssen Zertifikate auf allen Sitzungshosts im Hostpool installieren, auf denen die Apps aus Ihren MSIX App Attach-Paketen gehostet werden.You must install certificates on all session hosts in the host pool that will host the aps from your MSIX app attach packages.

Wenn Ihre App ein Zertifikat verwendet, das nicht öffentlich vertrauenswürdig ist oder selbst signiert wurde, wird dieses wie folgt installiert:If your app uses a certificate that isn't public-trusted or was self-signed, here's how to install it:

  1. Klicken Sie mit der rechten Maustaste auf das Paket, und wählen Sie Eigenschaften aus.Right-click the package and select Properties.
  2. Wählen Sie im angezeigten Fenster die Registerkarte Digitale Signaturen aus. Es darf nur ein Element in der Liste auf der Registerkarte vorhanden sein, wie in der folgenden Abbildung gezeigt.In the window that appears, select the Digital signatures tab. There should be only one item in the list on the tab, as shown in the following image. Wählen Sie dieses Element aus, um das Element zu markieren, und wählen Sie dann Details aus.Select that item to highlight the item, then select Details.
  3. Wenn das Fenster mit den Details zur digitalen Signatur angezeigt wird, klicken Sie auf die Registerkarte Allgemein, dann auf View Certificate (Zertifikat anzeigen) und schließlich auf Install certificate (Zertifikat installieren).When the digital signature details window appears, select the General tab, then select View Certificate, then select Install certificate.
  4. Wenn das Installationsprogramm geöffnet wird, wählen Sie Lokaler Computer als Speicherort aus, und klicken Sie dann auf Weiter.When the installer opens, select local machine as your storage location, then select Next.
  5. Wenn Sie vom Installationsprogramm gefragt werden, ob Sie zulassen möchten, dass die App Änderungen an Ihrem Gerät vornimmt, wählen Sie Ja aus.If the installer asks you if you want to allow the app to make changes to your device, select Yes.
  6. Wählen Sie Alle Zertifikate in folgendem Speicher speichern und dann Durchsuchen aus.Select Place all certificates in the following store, then select Browse.
  7. Wenn das Fenster zum Auswählen des Zertifikatspeichers angezeigt wird, wählen Sie Vertrauenswürdige Personen aus, und klicken Sie dann auf OK.When the select certificate store window appears, select Trusted people, then select OK.
  8. Klicken Sie auf Weiter und dann auf Fertig stellen.Select Next and Finish.

Vorbereiten von PowerShell-Skripts für das MSIX-Feature zum Anfügen von AppsPrepare PowerShell scripts for MSIX app attach

Das MSIX-Feature zum Anfügen von Apps weist vier verschiedene Phasen auf, die in der folgenden Reihenfolge ausgeführt werden müssen:MSIX app attach has four distinct phases that must be performed in the following order:

  1. PhaseStage
  2. RegisterRegister
  3. Registrierung aufhebenDeregister
  4. Staging aufhebenDestage

In jeder Phase wird ein PowerShell-Skript erstellt.Each phase creates a PowerShell script. Die Beispielskripts für die einzelnen Phasen sind hier verfügbar.Sample scripts for each phase are available here.

Stagen eines PowerShell-SkriptsStage PowerShell script

Bevor Sie die PowerShell-Skripts aktualisieren, stellen Sie sicher, dass Sie über die Volume-GUID des Volumes auf der VHD verfügen.Before you update the PowerShell scripts, make sure you have the volume GUID of the volume in the VHD. So rufen Sie die Volume-GUID ab:To get the volume GUID:

  1. Öffnen Sie die Netzwerkfreigabe, in der sich die VHD innerhalb des virtuellen Computers befindet, auf dem Sie das Skript ausführen möchten.Open the network share where the VHD is located inside the VM where you'll run the script.

  2. Klicken Sie mit der rechten Maustaste auf die VHD, und wählen Sie Einbinden aus.Right-click the VHD and select Mount. Dadurch wird die VHD in einen Laufwerkbuchstaben eingebunden.This will mount the VHD to a drive letter.

  3. Nachdem Sie die VHD eingebunden haben, wird das Fenster Datei-Explorer geöffnet.After you mount the VHD, the File Explorer window will open. Erfassen des übergeordneten Ordners und Aktualisieren der Variable $parentFolderCapture the parent folder and update the $parentFolder variable

    Hinweis

    Wenn kein übergeordneter Ordner angezeigt wird, bedeutet dies, dass MSIX nicht ordnungsgemäß erweitert wurde.If you don't see a parent folder, that means the MSIX wasn't expanded properly. Wiederholen Sie den vorherigen Abschnitt, und versuchen Sie es noch mal.Redo the previous section and try again.

  4. Öffnen Sie den übergeordneten Ordner.Open the parent folder. Wenn das Paket ordnungsgemäß erweitert wurde, wird ein Ordner mit dem gleichen Namen wie das Paket angezeigt.If correctly expanded, you'll see a folder with the same name as the package. Aktualisieren Sie die Variable $packageName, sodass sie mit dem Namen dieses Ordners übereinstimmt.Update the $packageName variable to match the name of this folder.

    Beispiel: VSCodeUserSetup-x64-1.38.1_1.38.1.0_x64__8wekyb3d8bbwe.For example, VSCodeUserSetup-x64-1.38.1_1.38.1.0_x64__8wekyb3d8bbwe.

  5. Öffnen Sie eine Eingabeaufforderung, und geben Sie mountvol ein.Open a command prompt and enter mountvol. Mit diesem Befehl wird eine Liste von Volumes und deren GUIDs angezeigt.This command will display a list of volumes and their GUIDs. Kopieren Sie die GUID des Volumes, für das der Laufwerkbuchstabe mit dem Laufwerk übereinstimmt, in das Sie die VHD in Schritt 2 eingebunden haben.Copy the GUID of the volume where the drive letter matches the drive you mounted your VHD to in step 2.

    Wenn Sie in diesem Beispiel Ihre VHD in Laufwerk C: eingebunden haben, sollten Sie z.B. in dieser Beispielausgabe für den Befehl „mountvol“ den Wert über C:\ kopieren:For example, in this example output for the mountvol command, if you mounted your VHD to Drive C, you'll want to copy the value above C:\:

    Possible values for VolumeName along with current mount points are:
    
    \\?\Volume{a12b3456-0000-0000-0000-10000000000}\
    **_ NO MOUNT POINTS _*_
    
    \\?\Volume{c78d9012-0000-0000-0000-20000000000}\
        E:\
    
    \\?\Volume{d34e5678-0000-0000-0000-30000000000}\
        C:\
    
    
  6. Aktualisieren Sie die Variable _ $volumeGuid* mit der soeben kopierten Volume-GUID.Update the _ $volumeGuid* variable with the volume GUID you just copied.

  7. Öffnen Sie eine PowerShell-Eingabeaufforderung mit Administratorrechten, und aktualisieren Sie das folgende PowerShell-Skript mit den Variablen, die für Ihre Umgebung gelten.Open an Admin PowerShell prompt and update the following PowerShell script with the variables that apply to your environment.

    #MSIX app attach staging sample
    
    #region variables
    $vhdSrc="<path to vhd>"
    $packageName = "<package name>"
    $parentFolder = "<package parent folder>"
    $parentFolder = "\" + $parentFolder + "\"
    $volumeGuid = "<vol guid>"
    $msixJunction = "C:\temp\AppAttach\"
    #endregion
    
    #region mountvhd
    try
    {
          Mount-Diskimage -ImagePath $vhdSrc -NoDriveLetter -Access ReadOnly
          Write-Host ("Mounting of " + $vhdSrc + " was completed!") -BackgroundColor Green
    }
    catch
    {
          Write-Host ("Mounting of " + $vhdSrc + " has failed!") -BackgroundColor Red
    }
    #endregion
    
    #region makelink
    $msixDest = "\\?\Volume{" + $volumeGuid + "}\"
    if (!(Test-Path $msixJunction))
    {
         md $msixJunction
    }
    
    $msixJunction = $msixJunction + $packageName
    cmd.exe /c mklink /j $msixJunction $msixDest
    #endregion
    
    #region stage
    [Windows.Management.Deployment.PackageManager,Windows.Management.Deployment,ContentType=WindowsRuntime] | Out-Null
    Add-Type -AssemblyName System.Runtime.WindowsRuntime
    $asTask = ([System.WindowsRuntimeSystemExtensions].GetMethods() | Where { $_.ToString() -eq 'System.Threading.Tasks.Task`1[TResult] AsTask[TResult,TProgress](Windows.Foundation.IAsyncOperationWithProgress`2[TResult,TProgress])'})[0]
    $asTaskAsyncOperation = $asTask.MakeGenericMethod([Windows.Management.Deployment.DeploymentResult], [Windows.Management.Deployment.DeploymentProgress])
    $packageManager = [Windows.Management.Deployment.PackageManager]::new()
    $path = $msixJunction + $parentFolder + $packageName # needed if we do the pbisigned.vhd
    $path = ([System.Uri]$path).AbsoluteUri
    $asyncOperation = $packageManager.StagePackageAsync($path, $null, "StageInPlace")
    $task = $asTaskAsyncOperation.Invoke($null, @($asyncOperation))
    $task
    #endregion
    

Registrieren eines PowerShell-SkriptsRegister PowerShell script

Um das Registrierungsskript auszuführen, führen Sie die folgenden PowerShell-Cmdlets mit den Platzhalterwerten aus, die durch Werte ersetzt wurden, die für Ihre Umgebung gelten.To run the register script, run the following PowerShell cmdlets with the placeholder values replaced with values that apply to your environment.

#MSIX app attach registration sample

#region variables
$packageName = "<package name>"
$path = "C:\Program Files\WindowsApps\" + $packageName + "\AppxManifest.xml"
#endregion

#region register
Add-AppxPackage -Path $path -DisableDevelopmentMode -Register
#endregion

Aufheben der Registrierung eines PowerShell-SkriptsDeregister PowerShell script

Ersetzen Sie in diesem Skript den Platzhalter für $packageName durch den Namen des Pakets, das Sie testen.For this script, replace the placeholder for $packageName with the name of the package you're testing.

#MSIX app attach deregistration sample

#region variables
$packageName = "<package name>"
#endregion

#region deregister
Remove-AppxPackage -PreserveRoamableApplicationData $packageName
#endregion

Aufheben des Stagings des PowerShell-SkriptsDestage PowerShell script

Ersetzen Sie in diesem Skript den Platzhalter für $packageName durch den Namen des Pakets, das Sie testen.For this script, replace the placeholder for $packageName with the name of the package you're testing. In einer Produktionsbereitstellung wäre es am besten, dies beim Herunterfahren auszuführen.In a production deployment it would be best to run this on Shutdown.

#MSIX app attach de staging sample

$vhdSrc="<path to vhd>"

#region variables
$packageName = "<package name>"
$msixJunction = "C:\temp\AppAttach"
#endregion

#region deregister
Remove-AppxPackage -AllUsers -Package $packageName
Remove-Item "$msixJunction\$packageName" -Recurse -Force -Verbose
#endregion

#region Detach VHD
Dismount-DiskImage -ImagePath $vhdSrc -Confirm:$false
#endregion

Einrichten von Simulationsskripts für den Agent für das Feature zum Anfügen von AppsSet up simulation scripts for the MSIX app attach agent

Nachdem Sie die Skripts erstellt haben, können Benutzer diese manuell ausführen oder sie so einrichten, dass sie automatisch als Skripts zum Starten, Anmelden, Abmelden und Herunterfahren ausgeführt werden.After you create the scripts, users can manually run them or set them up to run automatically as startup, logon, logoff, and shutdown scripts. Weitere Informationen zu diesen Arten von Skripts finden Sie unter Verwenden von Skripts zum Starten, Herunterfahren, Anmelden und Abmelden in der Gruppenrichtlinie.To learn more about these types of scripts, see Using startup, shutdown, logon, and logoff scripts in Group Policy.

Jedes dieser automatischen Skripts führt eine Phase der Skripts zum Anfügen von Apps aus:Each of these automatic scripts runs one phase of the app attach scripts:

  • Das Startskript führt das Stagingskript aus.The startup script runs the stage script.
  • Das Anmeldeskript führt das Registrierungsskript aus.The logon script runs the register script.
  • Das Abmeldeskript führt das Skript zum Aufheben der Registrierung aus.The logoff script runs the deregister script.
  • Das Skript zum Herunterfahren führt das Skript zum Aufheben des Stagings aus.The shutdown script runs the destage script.

Offlineverwendung von PaketenUse packages offline

Bei der Verwendung von Paketen aus Microsoft Store for Business oder Microsoft Store for Education in Ihrem Netzwerk oder auf Geräten, die nicht mit dem Internet verbunden sind, müssen Sie die Paketlizenzen aus dem Microsoft Store abrufen und auf Ihrem Gerät installieren, um die App erfolgreich ausführen zu können.If you're using packages from the Microsoft Store for Business or the Microsoft Store for Education within your network or on devices that aren't connected to the internet, you need to get the package licenses from the Microsoft Store and install them on your device to successfully run the app. Wenn Ihr Gerät online ist und eine Verbindung mit Microsoft Store for Business herstellen kann, sollten die erforderlichen Lizenzen automatisch heruntergeladen werden. Wenn Sie jedoch offline sind, müssen Sie die Lizenzen manuell einrichten.If your device is online and can connect to the Microsoft Store for Business, the required licenses should download automatically, but if you're offline, you'll need to set up the licenses manually.

Um die Lizenzdateien zu installieren, müssen Sie ein PowerShell-Skript verwenden, das die MDM_EnterpriseModernAppManagement_StoreLicenses02_01-Klasse im WMI-Bridge-Anbieter aufruft.To install the license files, you'll need to use a PowerShell script that calls the MDM_EnterpriseModernAppManagement_StoreLicenses02_01 class in the WMI Bridge Provider.

So richten Sie die Lizenzen für die Offlineverwendung ein:Here's how to set up the licenses for offline use:

  1. Laden Sie das App-Paket, die Lizenzen und die erforderlichen Frameworks aus Microsoft Store for Business herunter.Download the app package, licenses, and required frameworks from the Microsoft Store for Business. Sie benötigen sowohl die codierten als auch die nicht codierten Lizenzdateien.You need both the encoded and unencoded license files. Ausführliche Downloadanweisungen finden Sie hier.Detailed download instructions can be found here.
  2. Aktualisieren Sie die folgenden Variablen im Skript für Schritt 3:Update the following variables in the script for step 3:
    1. $contentID ist der ContentID-Wert aus der nicht codierten Lizenzdatei (XML-Datei).$contentID is the ContentID value from the Unencoded license file (.xml). Sie können die Lizenzdatei in einem Text-Editor Ihrer Wahl öffnen.You can open the license file in a text editor of your choice.
    2. $licenseBlob ist die vollständige Zeichenfolge für das Lizenzierungsblob in der codierten Lizenzdatei (BIN-Datei).$licenseBlob is the entire string for the license blob in the Encoded license file (.bin). Sie können die codierte Lizenzdatei in einem Text-Editor Ihrer Wahl öffnen.You can open the encoded license file in a text editor of your choice.
  3. Führen Sie das folgende Skript an einer PowerShell-Eingabeaufforderung mit erhöhten Rechten aus.Run the following script from an Admin PowerShell prompt. Ein guter Zeitpunkt, um die Lizenzinstallation durchzuführen, ist am Ende des Stagingskripts, das ebenfalls an einer Eingabeaufforderung mit Administratorberechtigungen ausgeführt werden muss.A good place to perform license installation is at the end of the staging script that also needs to be run from an Admin prompt.
$namespaceName = "root\cimv2\mdm\dmmap"
$className = "MDM_EnterpriseModernAppManagement_StoreLicenses02_01"
$methodName = "AddLicenseMethod"
$parentID = "./Vendor/MSFT/EnterpriseModernAppManagement/AppLicenses/StoreLicenses"

#TODO - Update $contentID with the ContentID value from the unencoded license file (.xml)
$contentID = "{'ContentID'_in_unencoded_license_file}"

#TODO - Update $licenseBlob with the entire String in the encoded license file (.bin)
$licenseBlob = "{Entire_String_in_encoded_license_file}"

$session = New-CimSession

#The final string passed into the AddLicenseMethod should be of the form <License Content="encoded license blob" />
$licenseString = '<License Content='+ '"' + $licenseBlob +'"' + ' />'

$params = New-Object Microsoft.Management.Infrastructure.CimMethodParametersCollection
$param = [Microsoft.Management.Infrastructure.CimMethodParameter]::Create("param",$licenseString ,"String", "In")
$params.Add($param)


try
{
   $instance = New-CimInstance -Namespace $namespaceName -ClassName $className -Property @{ParentID=$parentID;InstanceID=$contentID}
   $session.InvokeMethod($namespaceName, $instance, $methodName, $params)

}
catch [Exception]
{
     write-host $_ | out-string
}

Nächste SchritteNext steps

Dieses Feature wird zurzeit nicht unterstützt, aber Sie können der Community in der Windows Virtual Desktop TechCommunity Fragen stellen.This feature isn't currently supported, but you can ask questions to the community at the Windows Virtual Desktop TechCommunity.

Sie können Ihr Feedback in Bezug auf Windows Virtual Desktop auch im Windows Virtual Desktop-Feedback-Hub hochladen.You can also leave feedback for Windows Virtual Desktop at the Windows Virtual Desktop feedback hub.