Hallo und herzlich Willkommen zu diesem Tutorial. Hier zeige ich dir, wie du unter Microsoft Intune (Endpoint Manager) eine Applikation mittels PowerShell verteilen kannst.
Möchtest du ein einfaches PowerShell Skript verteilen, bietet der Endpoint Manager die Funktion “Skripts”. Möchtest du allerdings eine Applikation oder sonstiges Payload in Verbindung mit PowerShell verteilen, ist eine Win32 Anwendung erforderlich. Ein Beispiel hierfür wären Druckertreiber und Applikationen, welche keinen Installer besitzen.
In meinem Beispiel verteile ich die Applikation FFMPEG
Vorbereitungen
- Microsoft Intune verwaltetes Endgerät
- Microsoft Lizenz (eine Übersicht findest du hier)
- zu verteilende Applikation (in meinem Fall FFMPEG)
- Win32-Content-Prep-Tool (Download)
Erstellen einer Win32 Applikation (PowerShell)
Im ersten Schritt wird eine neue Ordnerstruktur angelegt. In meinem Fall erstelle ich den Ordnerpfad Intune Win32\FFMPEG\Version. In dem entsprechenden Ordner erstelle ich ein Installations- sowie Deinstallationsscript sowie einen _data Ordner, in welchem im nächsten Schritt relevante Anwendungsdaten kopiert werden.
Da es sich hierbei um eine reine Anwendung ohne grafischem Interface handelt und die Applikation in den meisten Fällen via CMD oder PowerShell aufgerufen wird, werde ich die Applikation in einen Unterordner nach %localappdata% verschieben. Dies hat den Vorteil, dass die Installation der Anwendung im Benutzerkontext, ohne der Notwendigkeit von administrativen Rechten geschehen kann. Zudem wird die benutzerspezifische PATH Variable editiert.
Im nächsten Schritt wird das Installationsskript “Inst_FFMPEG.ps1” bearbeitet:
# ------------------------------- # # Installation FFMPEG ohne # # administrative Rechte # # UnknownWorkspace - 14.09.2023 # # ------------------------------- # # Pruefe ob Ordnerstruktur bereits vorhanden if (Get-Item "$($env:localappdata)\ffmpeg" -ErrorAction SilentlyContinue) { Write-Host "Ordner $($env:localappdata)\ffmpeg bereits vorhanden" } else { New-Item -ItemType Directory -Path "$($env:localappdata)\ffmpeg" Write-Host "Ordner $($env:localappdata)\ffmpeg wurde erstellt" } # Pruefe ob Applikation bereits vorhanden if (Get-Item "$($env:localappdata)\ffmpeg\ffmpeg.exe" -ErrorAction SilentlyContinue) { Write-Host "Datei $($env:localappdata)\ffmpeg\ffmpeg.exe bereits vorhanden" exit 9001 } else { Copy-Item "_data\ffmpeg.exe" "$($env:localappdata)\ffmpeg" Write-Host "Datei ffmpeg.exe wurde in den Zielpfad abgelegt" } # Aktualisiere Benutzer Umgebungsvariablen $currentEnvVar=[Environment]::GetEnvironmentVariable("PATH", "USER") if ($currentEnvVar -like "*ffmpeg*") { Write-Host "Pfad fuer ffmpeg bereits in Umgebungsvariable für Benutzer" } else { [Environment]::SetEnvironmentVariable("Path", $currentEnvVar + ";%localappdata%\ffmpeg", "User") Write-Host "Pfad fuer ffmpeg in Umgebungsvariable fuer Benutzer hinzugefuegt" }
Das PowerShell Skript besteht aus drei einfachen Abschnitten:
- Prüfen und anlegen der Ordnerstruktur. Hier: %localappdata%\ffmpeg.
- Prüfen und kopieren der Applikation ffmpeg.exe aus dem Unterordner _data nach %localappdata%\ffmpeg.
- Prüfen und editieren der benutzerspezifischen PATH Variable.
Wenn das PowerShell Skript erfolgreich ausgeführt wurde, sollte in einer neuen CMD der Befehl “ffmpeg” erkannt werden:
Im nächsten Schritt wird das Deinstallationsskript “Uninst_FFMPEG.ps1” editiert:
# ------------------------------- # # Deinstallation FFMPEG ohne # # administrative Rechte # # UnknownWorkspace - 14.09.2023 # # ------------------------------- # # Pruefe ob Ordnerstruktur vorhanden if (Get-Item "$($env:localappdata)\ffmpeg" -ErrorAction SilentlyContinue) { Remove-Item -Recurse -Confirm:$false -Force "$($env:localappdata)\ffmpeg" Write-Host "Ordner $($env:localappdata)\ffmpeg wurde geloescht" } else { Write-Host "Ordner $($env:localappdata)\ffmpeg existiert nicht" } # Pruefe Umgebungsvariablen fuer Benutzer $currentEnvVar=[Environment]::GetEnvironmentVariable("PATH", "USER") if ($currentEnvVar -like "*ffmpeg*") { $removePath = "%localappdata%\ffmpeg" $regexRemovePath = [regex]::Escape($removePath) $arrPath = $currentEnvVar -split ';' | Where-Object {$_ -notMatch "^$regexRemovePath\\?"} $newEnvVar = $arrPath -join ';' [Environment]::SetEnvironmentVariable("Path", $newEnvVar, "User") Write-Host "Pfad fuer ffmpeg aus Umgebungsvariable fuer Benutzer entfernt" } else { Write-Host "Pfad fuer ffmpeg in Umgebungsvariable fuer Benutzer existiert nicht" }
Dieses PowerShell Skript besteht aus zwei Teilen:
- Prüfen und löschen der gesamten Ordnerstruktur “%localappdata%\ffmpeg” inklusive Inhalt.
- Prüfen der bestehenden Umgebungsvaraible PATH für den derzeit angemeldeten Nutzer und löschen des Pfads “%localappdata%\ffmpeg”.
Nun kann das Programm “Microsoft Win32 Content Prep Tool” heruntergeladen und die Datei “IntuneWinAppUtil.exe” in den Ordner Intune Win32 entpackt werden:
Jetzt kann eine administrative CMD geöffnet und in den entsprechenden Ordner gewechselt werden. Im Anschluss wird die Datei IntuneWinAppUtil.exe ausgeführt:
- Source Folder: Der Ordner, welcher samt Inhalt in ein entsprechendes Win32 Package umgewandelt wird
- Setup File: Pfad der Installationsdatei.
- Output Folder: Pfad, in welchem das fertige .intunewin Paket abgelegt werden soll.
- Catalog Folder: Pfad eines Ordners, dessen Dateien unter Windows als Katalogdateien behandelt werden.
Nachdem die Informationen abgesendet wurden, sollte das Programm ein .intunewin Paket erstellt haben:
Im letzten Schritt wird die neu erstellte Datei in “FFMPEG-6-0” umbenannt.
Win32 Applikation mittels Microsoft Endpoint Manager (Intune) erstellen und verteilen
Ist das Paket erstellt, kann sich am Microsoft Endpoint Manager angemeldet werden. Im Anschluss kann über den Reiter Apps, Alle Apps ein neues Win32 Paket hinzugefügt werden:
Nun muss das im ersten Schritt erstellte Paket ausgewählt werden:
Im Anschluss können etwaige Informationen zur App angegeben werden. Als Besonderheit kann hier gewählt werden, ob die Applikation im Unternehmensportal zur Installation angeboten werden soll. Dann wäre es allerdings sinnvoll, auch ein Logo der entsprechenden Applikationen weiter unten anzugeben:
Im nächsten Schritt muss ein Installations- sowie Deinstallationsbefehl angegeben werden. Hier muss, wie im Beispiel zu sehen, PowerShell mit einigen selbsterklärenden Parametern samt entsprechendem Skript angegeben werden. Außerdem kann angegeben werden, wie lange eine Installation typisch dauert. Bei überschreiten des Limits wird die Installation agebrochen und ein Fehler wird ausgegeben. Da die Installation ohne administrative Rechte im Nutzerkontext ausgeführt werden soll, muss die Option “Benutzer” bei Installationsverhalten ausgewählt werden.
Im Anschluss habe ich im PowerShell Skript Returncodes eingebaut welche, je nach Zustand, den Status der Installation verändern:
Nun können Anforderungen (Systemvoraussetzungen etc.) angegeben werden:
Erkennungsregeln helfen Intune dabei, zu erkennen ob die Applikation erfolgreich installiert wurde. Hier können manuelle Erkennungsregeln definiert werden:
Im Anschluss kann die Anwendung einer Gruppe zugewiesen werden. Außerdem kann konfiguriert werden, ob die Nutzer benachrichtigt werden sollen und wann die App bereitgestellt werden soll:
Ist dieser Schritt abgeschlossen, kann das Erstellen abgeschlossen werden. Auf dem zugewiesenen Client sollte innerhalb kurzer Zeit folgende Pop-Up Benachrichtigung auftauchen:
Am zuvor konfiguriertem Installationsort sollte nun auch ein Ordner inklusive Applikation liegen:
Schlusswort
Herzlichen Glückwunsch! Hiermit hast du deine eigene Applikation mittels Powershell erstellen und mittels Intune verteilen können. Ich hoffe dir hat die Anleitung geholfen. Um Applikationen ohne PowerShell mittels Intune verteilen zu können, lese gerne folgenden Blogartikel.