Ich habe viele verschiedene Kunden, die im Grunde die gleiche/ähnliche Basis an win32 Apps im Endpoint Manager benötigen. Die Apps jedes Mal mit dem intunewin File, dem Namen, des Herausgebers, Installationsbefehlen etc. einzupflegen, ist eine wenig befriedigende Arbeit. Darum habe ich mir ein Repository mit einer Software-Liste und einem PowerShell Script erstellt, welches das win32 App Deployment automatisiert.

Eine weiterentwickelte Version des Scripts findest du hier: The "Intune Win32 Deployer" | scloud

Den Code des PowerShell Scripts ein Beispiel CSV inklusive Repository habe ich auf meinem GitHub abgelegt: scloud/intune-win32-deployment at main · FlorianSLZ/scloud (github.com)
(Das Upload Script ist im Ordner "_UploadWin32App")

Wenn du Probleme mit Erkennungsregeln via Script hast (New-IntuneWin32AppDetectionRuleScript), kannst du folgenden Fix ausführen.
Voraussetzung: Modul ist im User Kontext installiert.

scloud/FIX_New-IntuneWin32AppDetectionRuleScript.ps1 at main · FlorianSLZ/scloud (github.com)

Table of Contents

Demo

Software CSV

Die Software-Liste, ein CSV-File besteht aus den wichtigsten Parametern für die win32 Apps. Dies sind Name, Beschreibung, Installations-/Deinstallations-Befehl, "runs as" sowie, falls vorhanden, die Abhängigkeit. Die Erkennungs-Regel und auch die Komptabilität habe ich bewusst weggelassen. Als Erkennungs-Regel nehme ich jeweils ein Custom Script und für die Komptabilität 64-bit und mindestens Windows 2004. Mit diesen Werten habe ich gute Erfahrungen gemacht, Natürlich könnte die Liste und das Script auch so erweitert werden, dass diese anhand des CSV's gesetzt werden.

Beispiel CSV

Name;Beschreibung;install;uninstall;as;Dependeny
7-Zip;7-Zip ist ein Packprogramm;%SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe -executionpolicy bypass -command .\install.ps1;%SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe -executionpolicy bypass -command .\uninstall.ps1;system
Code language: CSS (css)

Win32 Repository

In meinem Repository liegt jedes Programm in einem Ordner mit dem Programmnamen analog der Software-Liste. Wobei sich in diesem Ordner wiederum die benötigten Dateien für die Installations- und Deinstallations-Routine (meist instal.ps1 und uninstall.ps1), ein check.ps1 (Erkennungsregel) und ein PNG mit dem Programmnamen befinden. Zudem habe ich jeweils gleich das intunewin File erstellt, um aus dem Repo auch manuelle Uploads oder Updates durchführen zu können.

Der Ordner Inhalt eines solchen win32 Apps anhand des Beispiels 7-Zip sieht so aus:

win32 app Beispiel 7-Zip

Wie meine win32 Applikationen aufgebaut sind, habe ich zuvor in einem vergangenen Blog-Beitrag dokumentiert: my take on win32 apps - Intune

PowerShell Script/Automatisierung

Die Automatisierung beruht auf PowerShell mit dem Modul "Microsoft.Graph.Intune" und "IntuneWin32App". Das Script findest du hier.

Die Module lasen sich via PowerShell, als Admin installieren:

Install-Module IntuneWin32App -Force
Install-Module Microsoft.Graph.Intune -ForceCode language: PowerShell (powershell)

Der Aufbau und Ablauf des Scripts ist:

  • Modul Importieren und Initial Variabeln einlesen (Tenant-Präfix und Software-Repository)
win32 automated - initial variable
  • Verbindung zum Tenant und Login
win32 automated - login
  • Einlesen des CSV's (Software-list.csv aus dem Repository)
  • Auswahl der zu importierenden Apps anhand einer Grid View (Eines oder Mehrere möglich)
win32 automated - application selection
  • Erstellung und Upload der ausgewählten Apps
    • Verbindung aktualisieren
    • Intunewin-Datei einlesen
    • Displayname einlesen
    • Detection Rule erstellen (immer check.ps1)
    • System Anforderungen setzten (x64 und Windows 10 2004+)
    • Anzeige Bild setzen
    • Upload der App mit Parametern
    • 15 Sekunden warten, um von Azure nicht geblockt zu werden
      (Die Wartezeit verhindert eine Blockade von Azure)
win32 automated - processing application
  • Falls eine Abhängigkeit vorhanden ist:
    • Prüfen, ob diese bereits im MEM vorhanden ist.
    • Wenn nicht, anhand der Parameter aus dem CSV hochladen
    • Abhängigkeit hinzufügen
win32 automated - dependency
  • Fertig!
    Die Applikation ist mit allen Variablen, dem Icon und der Abhängigkeit gemäss CSV im MEM.
win32 automated - result

App Zuweisung (Tipp)

Das Script selbst weit die Applikationen keiner Gruppe zu.
Um die Zuweisung doch schnell umsetzten zu können und nicht jedes App nochmals im MEM öffnen zu müssen, nutze ich das Intune for Education Portal. Das Portal ist zwar speziell für Schulen entwickelt und wird auch nur für diese beworben. Allerdings ist es möglich, das Intune for Education Portal von jedem Tenant aus über die korrekte URL aufzurufen: https://intuneeducation.portal.azure.com

  • Über dieses können wir dann eine Gruppe auswählen und die zugewiesenen Apps bearbeiten/auswählen.
Intune for education - app assigment
  • Die Apps sind dann mit einem Klick zugewisen.
intune for education - app assigment

Achtung: Wird ein App in einer Gruppe abgewählt, wird es automatisch auf "uninstall" gesetzt.

Windows Sandbox

Bei mir kommt es immer wieder vor, dass sich Module nicht richtig nutzen lassen, da sie in einem Konflikt zu einem anderen oder einer spezifischen Version stehen. Darum nutze ich für die Deployments jeweils eine vorkonfigurierte Sandbox, die mit einem Doppelklick die aktuellen Module installiert und das Script startet.

Mehr dazu habe ich im vergangenen Beitrag "Pre-Installed PowerShell Module in Windows Sandbox" geschrieben.
Das entsprechende Sandbox File inklusive PowerShell findest du in meinem GitHub:
scloud/Windows-Sandbox/win32-automated at main · FlorianSLZ/scloud (github.com)