Zum Hauptinhalt springen

XFA mit Microsoft Intune vorinstallieren

Fügen Sie XFA.msi als Win32 app mit einer Erkennungsregel auf Basis des Vorhandenseins hinzu und übergeben Sie Ihr Enrollment-Token als Installationsargument.

XFA braucht kein MDM

XFA ist dafür gemacht, vom Team selbst installiert zu werden, das Sie absichern wollen. Die Leute installieren es selbst, nach einer Einladung über Awareness oder bei einer Anmeldung, die durch Enforcement geschützt ist. Für die meisten Organisationen ist das der gesamte Rollout.

Fügen Sie XFA nicht als Line-of-Business-App hinzu

XFA.msi als Line-of-Business-App hochzuladen ist der naheliegende Weg, und es ist der, der schiefgeht. Eine Line-of-Business-App erkennt XFA an seinem MSI-Product Code, und XFA erzeugt diesen Product Code neu, jedes Mal, wenn es sich selbst aktualisiert. Nach der ersten Selbstaktualisierung findet Intune den gespeicherten Code nicht mehr, meldet XFA als nicht installiert und installiert bei jeder Prüfung die ältere paketierte Version über die neuere. Ignore app version rettet das nicht: Das ignoriert die Version, nicht den Product Code. Paketieren Sie XFA stattdessen als Win32 app, wo Sie die Erkennungsregel selbst festlegen.

Holen Sie sich Ihr Enrollment-Token

Kopieren Sie es aus Integrationen > XFA über MDM vorinstallieren > Microsoft Intune im XFA-Dashboard, wo der fertige Befehl mit dem Token darin steht. Das Vorinstallieren ist eine Enterprise-Funktion.

1. Das Installationspaket herunterladen und verpacken

Legen Sie zwei Dateien in einen leeren Ordner:

  • XFA.msi.
  • uninstall-xfa.ps1, das Entfernungsskript unten. Der Product Code von XFA ändert sich mit jeder Selbstaktualisierung, die Deinstallation kann die ursprüngliche MSI also nicht benennen; nach einem Update passt ihr Product Code nicht mehr zu dem, was installiert ist. Das Skript ermittelt das aktuelle Produkt über Windows Installer anhand des festen UpgradeCode von XFA, der sich nie ändert und nicht von der 32- oder 64-Bit-Registry-Sicht abhängt, und entfernt es dann:
$ErrorActionPreference = 'Stop'
$upgradeCode = '{FE5FD0A4-8D39-42FD-B0DE-18EB89B7CAC4}'
try {
$installer = New-Object -ComObject WindowsInstaller.Installer
$products = @($installer.RelatedProducts($upgradeCode))

if ($products.Count -ne 1) { exit 1 }
$p = Start-Process 'msiexec.exe' -ArgumentList "/x $($products[0]) /qn" -Wait -PassThru
if (-not $p) { exit 1 }
exit $p.ExitCode
} catch {
exit 1
}

Intune liefert Win32 apps als .intunewin-Dateien aus. Verpacken Sie den gesamten Ordner, denn das ist es, was uninstall-xfa.ps1 in die App bringt, mit dem Win32 Content Prep Tool von Microsoft:

IntuneWinAppUtil.exe -c <folder with XFA.msi and uninstall-xfa.ps1> -s XFA.msi -o <output folder>

Ein Installationspaket deckt x64 und ARM64 ab. Auf einem ARM64-Gerät läuft es per Emulation, und XFA ersetzt sich automatisch durch die native ARM64-Version.

2. Die App hinzufügen

Gehen Sie im Intune Admin Center zu Apps > All apps > Create. Wählen Sie die Plattform Windows, wählen Sie Windows app (Win32) und laden Sie die gerade gebaute XFA.intunewin hoch.

3. Das Programm einstellen

FeldWert
Install commandmsiexec /i "XFA.msi" /qn ENROLLMENT_TOKEN=<token-from-xfa-dashboard>
Uninstall commandpowershell.exe -NoProfile -ExecutionPolicy Bypass -File uninstall-xfa.ps1
Install behaviorUser
Install behavior muss User sein, nicht System

Das ist die Einstellung, auf die es ankommt, und Win32 apps stehen standardmäßig auf System. Bleibt es dabei, führt Intune msiexec als Systemkonto aus, XFA installiert sich in das Systemprofil und kann sich nicht verbinden, weil es keine angemeldete Person gibt, für die installiert werden könnte. Setzen Sie Install behavior auf User, damit die Installation im Kontext des angemeldeten Benutzers läuft. Es ist dieselbe Falle wie Install for user im Configuration Manager.

Der Uninstall-Befehl führt uninstall-xfa.ps1 aus, das Skript, das Sie in Schritt 1 mitverpackt haben. Weil Install behavior auf User steht, läuft es als angemeldeter Benutzer und entfernt XFA über den Product Code, der gerade installiert ist.

4. Die Erkennungsregel einstellen

Das ist der Schritt, der verhindert, dass XFA sich in einer Schleife immer wieder installiert. Wählen Sie Use a custom detection script und laden Sie das Skript unten hoch.

Intune führt Erkennungsskripte als Systemkonto aus, obwohl die App für den Benutzer installiert wird. Eine Regel, die HKEY_CURRENT_USER oder %LOCALAPPDATA% liest, sieht also im Profil des Systemkontos nach und meldet XFA als fehlend. XFA ist außerdem eine Installation pro Benutzer, "installiert" ist also eine Frage zum angemeldeten Benutzer, nicht zur Maschine: Auf einem gemeinsam genutzten PC braucht jeder Benutzer seine eigene Kopie. XFA schreibt eine Markierung pro Benutzer nach HKCU\Software\XFA\DesktopApp, die das Systemkonto in der Hive dieses Benutzers unter HKEY_USERS lesen kann. Noch eine Feinheit: XFA.msi ist ein 32-Bit-Installationspaket, auf einer 64-Bit-Maschine liegt die Markierung also in der 32-Bit-Registry-Sicht, und nach der ARM64-Selbstaktualisierung wandert sie in die 64-Bit-Sicht. Erkennungsskripte laufen standardmäßig 64-Bit, ermitteln Sie also, wer angemeldet ist, und prüfen Sie beide Sichten:

$console = (Get-CimInstance Win32_ComputerSystem).UserName
if ($console) {
try {
$sid = ([System.Security.Principal.NTAccount]$console).Translate(
[System.Security.Principal.SecurityIdentifier]).Value
$installed = $false
foreach ($view in @([Microsoft.Win32.RegistryView]::Registry32,
[Microsoft.Win32.RegistryView]::Registry64)) {
$base = [Microsoft.Win32.RegistryKey]::OpenBaseKey(
[Microsoft.Win32.RegistryHive]::Users, $view)
try {
$key = $base.OpenSubKey("$sid\Software\XFA\DesktopApp")
if ($key) { $installed = $true; $key.Close() }
} finally { $base.Close() }
}
if ($installed) { Write-Output 'Installed' }
} catch { }
}

Intune betrachtet die App als installiert, sobald das Skript etwas auf die Standardausgabe schreibt, deshalb wird nichts geschrieben, wenn XFA fehlt. Erkannt wird das Vorhandensein, nicht die Version, die Selbstaktualisierungen von XFA lösen also nie etwas aus, und weil das Skript auf den angemeldeten Benutzer bezogen ist, installiert Intune XFA für jede Person auf einer gemeinsam genutzten Maschine, statt nach der ersten alle zu überspringen. Das try/catch verhält sich im Zweifel restriktiv: Lässt sich das Konto nicht zu einer SID auflösen, schreibt das Skript nichts und Intune liest "nicht installiert", nie einen falschen Treffer.

Das setzt voraus, dass jeweils nur ein Benutzer interaktiv angemeldet ist, der Normalfall bei einem Laptop oder Desktop. Auf einem Multi-Session-Host (Remote Desktop Session Host) meldet Win32_ComputerSystem.UserName nur den Benutzer an der physischen Konsole.

5. Die App zuweisen

Fügen Sie unter Assignments die Benutzergruppe, die XFA bekommen soll, unter Required hinzu.

Weisen Sie einer Benutzergruppe zu, nicht einer Gerätegruppe. XFA installiert sich für den, der angemeldet ist, und verbindet diese Person, eine Gerätezuweisung installiert es also für niemanden.

6. Prüfen

Nachdem Intune die App als installiert meldet, prüfen Sie, dass:

  • das XFA-Symbol im Infobereich des angemeldeten Benutzers erscheint; und
  • das Gerät für diesen Benutzer auf der XFA-Seite Geräte auftaucht.

Schlägt das Verbinden fehl, schlägt auch die Installation fehl, Intune zeigt die App also als failed, statt Erfolg auf einem Gerät zu melden, das Ihrer Organisation nie beigetreten ist. Intune meldet einen allgemeinen Installationsfehler (es zeigt den eigenen Ergebniscode von XFA nicht an), lesen Sie den Grund also auf dem Gerät in %TEMP%\xfa\xfa-enrollment.log:

CodeBedeutung
2Das Enrollment-Token wurde abgelehnt. Stellen Sie es im XFA-Dashboard neu aus.
3XFA war nicht erreichbar. Intune versucht es erneut.
1, 4, 5Der Befehl war falsch, oder das Gerät konnte seine Zugangsdaten nicht speichern.

XFA entfernen

Lösen Sie die Verbindung, bevor Sie deinstallieren. Eine Uninstall-Zuweisung in Intune führt den Uninstall-Befehl aus, aber nicht xfa unenroll, sie lässt die Affiliation zur Organisation also auf dem Server zurück, und auf einem Gerät, das zu mehr als einer Organisation gehört, entfernt sie XFA auch für die anderen.

Führen Sie zuerst dies als angemeldeter Benutzer aus, um nur diese Organisation zu entfernen und XFA installiert zu lassen:

xfa unenroll --organization-id <organization-id>

Entfernen Sie die Anwendung erst, wenn keine Affiliation mehr besteht. xfa enrollment-status liefert den Exit-Code 0, solange das Gerät noch mit irgendeiner Organisation verbunden ist, und 10, wenn das Entfernen sicher ist. Meldet es 10, setzen Sie die Uninstall-Zuweisung.