Wie apps uitrolt via Intune kent het probleem: een update van een Win32-app start op een moment dat de gebruiker die app open heeft staan. In het beste geval mislukt de installatie, in het slechtste geval sluit de app zonder waarschuwing en is er werk weg. Intune zelf geeft je weinig mogelijkheden om de gebruiker daar netjes bij te betrekken.

Daarom heb ik AppUpdateKit gemaakt: een verzameling PowerShell-scripts en een grafische Builder waarmee je van elke installer een Intune-pakket maakt dat de gebruiker vraagt wanneer de update mag komen.

Repository: github.com/Fonfey/AppUpdateKit

Waarom ik dit gemaakt heb

In onze organisatie gebruiken we Intune, en vanaf de laptops werken we veel met VDI. De Omnissa-client op die laptops wilden we via Intune bijwerken. Dat kan als required, maar dan wordt de update geïnstalleerd zodra hij op de laptop aankomt, ook als de gebruiker op dat moment een actieve VDI-sessie heeft. Dat vonden we niet gebruiksvriendelijk. Een gebruiker die midden in zijn werk zit, wil niet dat de client onder zijn sessie wordt bijgewerkt.

We wilden dit anders doen:

  • De gebruiker weet dat er een update is, en dat er dus iets van hem verwacht wordt.
  • De gebruiker houdt deels controle: hij kiest of de update direct komt of liever even wordt uitgesteld.
  • Wij als beheerders weten dat de update alsnog wordt geïnstalleerd als de gebruiker uitstelt.
  • De gebruiker weet hoeveel tijd hij maximaal heeft, dus dat hij niet eindeloos kan uitstellen maar wel even de ruimte heeft.

Zo ontstond AppUpdateKit: een extra laag bovenop Intune om applicatie-updates en nieuwe software netter bij de gebruikers te brengen. Het is ook makkelijker voor beheerders. Met de Builder maak je een Intune-pakket in een paar stappen, in plaats van elke keer zelf de scripts en instellingen in elkaar te zetten.

Daarbij is versiebeheer belangrijk. Zo is overzichtelijk welke versies er al gemaakt zijn, weet elke beheerder wat er nu in omloop is, en kun je eenvoudig een kleine aanpassing doen aan een bestaand pakket.

Wat de gebruiker ziet

Elke app die je met de kit verpakt, krijgt dezelfde vensters rechtsonder in beeld, met het logo en de kleur van die app. In de voorbeelden hieronder heet de app Voorbeeldapp.

1. Update beschikbaar. De gebruiker kiest zelf: Later of Nu bijwerken. Het venster laat zien hoe vaak uitstellen nog mag.

Venster met de titel Voorbeeldapp, de tekst 'Er is een update beschikbaar' en de knoppen Later en Nu bijwerken
Het venster 'Update beschikbaar' rechtsonder in beeld.

2. Laatste waarschuwing. Is er vaak genoeg uitgesteld, dan volgt een waarschuwing met aftelklok. Er is alleen nog de knop Nu installeren.

Venster met de tekst 'De update start over 5 minuten', een oranje waarschuwing en alleen de knop Nu installeren
Na de laatste keer uitstellen: de update start na de aftelklok.

3. Tijdens de installatie. Een melding met voortgangsbalk laat zien dat de app wordt bijgewerkt.

Donkere melding 'Update wordt geïnstalleerd' met een blauwe voortgangsbalk
De melding tijdens de installatie. Die sluit vanzelf zodra de update klaar is.

4. Na afloop. Een groene melding als het gelukt is, of een rode als het misging.

Twee donkere meldingen: 'Update geïnstalleerd' met een groen vinkje en 'Update niet gelukt' met een rood kruisje
Het resultaat: gelukt (boven) of niet gelukt (onder).

Staat de app nog niet op de laptop, dan herkent het pakket dat en gaan de teksten over een nieuwe installatie in plaats van een update. Zo gebruik je hetzelfde pakket voor allebei.

De Builder

Je hoeft geen scripts met de hand te schrijven. Start Start-Builder.cmd en je doorloopt een paar tabbladen:

  1. Basis: kies de installer. Naam, versie, type (MSI, NSIS of Inno Setup) en de stille parameters worden automatisch herkend. Je vult de processen in die moeten zijn gesloten, plus een logo en een kleur.
  2. Installatie: meerdere onderdelen in volgorde, bijvoorbeeld eerst een runtime en dan de app. Per onderdeel stel je de parameters in en welke exitcodes als geslaagd tellen. Er is ook ruimte voor extra stappen vóór en na de installatie.
  3. Teksten: eigen teksten in het Nederlands en Engels, met voorbeeldknoppen om elke popup te bekijken zonder iets te installeren.
  4. Uitstellen: hoe vaak en hoe lang de gebruiker mag uitstellen, en wanneer de update mag komen (zie hieronder).
  5. Versies: elke build blijft bewaard, inclusief installers, zodat je altijd kunt terugzien hoe een versie is gemaakt.

Met Bouw pakket maakt de Builder het install.intunewin-bestand, de Intune-scripts en een overzicht met alle instellingen.

Slim omgaan met timing

Een update die midden in een presentatie start, is precies wat je wilt voorkomen. Daarom kun je per app instellen:

  • Tijdvenster: altijd, alleen binnen werktijd of juist alleen daarbuiten, met eigen tijden en werkdagen.
  • Inactief: direct en zonder popup installeren als de gebruiker een tijd niets doet of het scherm vergrendeld is.
  • Niemand ingelogd: direct installeren of wachten tot er iemand inlogt.
  • Herstart: nooit, alleen als de installer erom vraagt (exitcode 3010 of 1641) of altijd. De gebruiker kan de herstart uitstellen tot een deadline, daarna volgt een aftelklok.

Eén app voor updates én Autopilot

Tijdens de inrichting van een nieuwe laptop wil je geen popups. De kit herkent of Windows nog in de OOBE zit of de Enrollment Status Page nog bezig is, en installeert de app dan direct en stil. Daarna werkt hetzelfde pakket gewoon als update met popup. Je hoeft dus niet twee apps in Intune te onderhouden.

Aanpassen zonder opnieuw te verpakken

Naast het .intunewin-bestand maakt elke build ook een Install.ps1 en Uninstall.ps1. Die upload je in Intune bij het installer-type PowerShell script. Teksten, instellingen en installatieparameters staan dan in dat script en niet in het pakket. Wil je een tekst of een uitstelregel aanpassen, dan doe je dat direct in Intune. Opnieuw verpakken is alleen nodig bij een nieuwe installer, een ander logo of een nieuwe versie van de kit.

Werk je liever met een gewone opdrachtregel, dan kan dat ook, met parameters zoals:

Parameter Wat het doet
/noprocesscheck Niet controleren of de app open staat
/noconsent Geen popup, wel meldingen
/silent Geen popup en geen meldingen
/<eigen naam> Eigen schakelaar, bijvoorbeeld om snelkoppelingen over te slaan

Zelf proberen

  1. Download of clone de repository.

  2. Deblokkeer de bestanden eenmalig in PowerShell:

    Get-ChildItem C:\AppUpdateKit -Recurse | Unblock-File
  3. Start Start-Builder.cmd, maak met + Nieuwe app je eerste app en klik op Bouw pakket.

  4. Upload het resultaat uit Output\<AppId>\<versie>\ als Win32-app in Intune.

De volledige handleiding, ook voor gebruik zonder Builder, staat in de LEESMIJ van de repository. De Builder en de popups werken in het Nederlands en het Engels.

Vragen, ideeën of een bug gevonden? Maak gerust een issue aan in de repository.