Detectieregels in Intune uitgelegd

Hoe ziet Intune of een Win32-app geïnstalleerd is? De vier typen detectieregels (MSI, bestand, register, script), wanneer je welke kiest en valkuilen.

Bijgewerkt op · 3 min. lezen

Een detectieregel vertelt Microsoft Intune hoe het kan controleren of een Win32-app op een apparaat staat. Intune gebruikt die regel vóór de installatie (staat de app er al?) en erna (is het gelukt?). Is de regel verkeerd, dan krijg je de bekende klachten: een app die als "mislukt" wordt gemeld terwijl hij gewoon werkt, of een installatie die elke paar uur opnieuw start.

De vier typen

1. MSI-productcode

Elke MSI heeft een unieke productcode in de vorm {12345678-ABCD-1234-ABCD-1234567890AB}. Intune kijkt of dat product geïnstalleerd is, en optioneel of de versie gelijk of hoger is.

  • Gebruik bij: MSI-installers. Dit is de betrouwbaarste regel.
  • Let op: bij een nieuwe versie verandert de productcode vaak. Pas de regel dan aan.

2. Bestand of map

Intune controleert of een bestand of map bestaat, of vergelijkt eigenschappen zoals de bestandsversie, grootte of wijzigingsdatum.

  • Voorbeeld: map C:\Program Files\MijnApp, bestand app.exe, controle Bestandsversie groter of gelijk aan 2.4.0.
  • Gebruik bij: EXE-installers met een vaste installatiemap.
  • Let op: een 32-bit app op 64-bit Windows staat in C:\Program Files (x86). Zet dan de optie 32-bit locatie op 64-bit systemen aan, of gebruik direct het juiste pad. Omgevingsvariabelen als %ProgramFiles% mogen ook.

3. Register

Intune kijkt naar een registersleutel of -waarde, bijvoorbeeld onder HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<app>. Je kunt controleren of de sleutel bestaat, of een waarde vergelijken als tekst, getal of versie.

  • Gebruik bij: installers die een eigen registersleutel met versienummer aanmaken.
  • Let op: ook hier bestaat de 32-bit-variant (WOW6432Node).

4. PowerShell-script

Voor lastige gevallen schrijf je zelf een controle. De app geldt als geïnstalleerd als het script exitcode 0 geeft én iets naar STDOUT schrijft:

$exe = 'C:\Program Files\MijnApp\app.exe'
if ((Test-Path $exe) -and ([version](Get-Item $exe).VersionInfo.FileVersion -ge [version]'2.4.0')) {
    Write-Output 'Geïnstalleerd'
    exit 0
}
exit 1
  • Let op: een script kan niet gecombineerd worden met andere regels. Het draait standaard als 64-bit proces onder SYSTEM.

Meerdere regels

Bij de typen MSI, bestand en register kun je meerdere regels toevoegen. Ze moeten dan allemaal kloppen (EN). Handig om bijvoorbeeld zowel een bestand als een registerwaarde te controleren.

Welke kies je?

Situatie Beste detectieregel
MSI-installer MSI-productcode, met versie ≥
EXE met vaste installatiemap Bestand, met bestandsversie ≥
App zonder versie in het bestand Register (Uninstall-sleutel, DisplayVersion)
Per-gebruiker installatie of complexe logica PowerShell-script

Tip: controleer altijd op de versie en niet alleen op het bestaan. Anders ziet Intune een oude versie als "geïnstalleerd" en werkt een update via supersedence niet goed.

Veelgemaakte fouten

  • Controleren op een pad dat per taal of gebruiker verschilt.
  • De versie in de regel niet bijwerken na een update.
  • Een script dat wel exitcode 0 geeft, maar niets naar STDOUT schrijft (Intune ziet dat als "niet gevonden").
  • Program Files versus Program Files (x86) door elkaar halen.

Automatisch goed ingesteld

Rol je apps uit via App-Packager, dan worden detectieregels voor WinGet-apps automatisch ingesteld op basis van de catalogusgegevens. Bij een eigen MSI lezen we de productcode en versie zelf uit en stellen we de detectieregel voor. Voor eigen apps kies je in een formulier uit alle vier de typen, inclusief versievergelijking en 32-bit-opties. Zie ook Win32-app maken voor Intune.

Laat App-Packager het werk doen

Kies een app uit 15.000+ WinGet-apps of upload je eigen installer. Wij verpakken, uploaden en houden hem up-to-date in Intune.