Es ist leider nicht immer möglich, schnell auf ein Gerät mit einem Installationsproblem zuzugreifen.
Wäre es nicht praktisch, die Logs der eigenen Win32 Apps oder PowerShell-Skripte zentral anfordern und einsehen zu können?
Genau das kannst du tun, indem du die Intune Funktion "Collect diagnostics" verwendest und deine custom Logs im richtigen Verzeichnis ablegst.

Table of Contents

Wir funktioniert die Funktion "Collect diagnostics"

In Intune gibt es für jedes Gerät in der Übersicht den Button "Collect diagnostics". Devices".
Devices > Windows > Gerät-Name

Durch Anklicken dieses Buttons wird die Logsammlung gestartet. Der Vorgang dauert, wenn das Gerät online ist, in der Regel zwischen 5 und 20 Minuten (manchmal leider auch länger).

Intune, Collect diagnostics

Ist der Vorgang abgeschlossen findest du die Logs zum Download bereit unter "Device diagnostics":

Intune, download Collect diagnostics

Heruntergeladen wird mit diesem Button ein ZIP, dass ein paar hundert MB gross ist.
In diesem findest du Sammlungen von Registry Keys, Eventlogs, verschiedenen CMD-Abfragen und und und...

(i) Der Download steht für 30 Tage zur Verfügung.

Der Ordner, den wir in diesem Fall benötigen, ist der Ordner mit der Nummer "62". Dort werden die Logs der Intune Management Extension abgelegt. Ich zeige dir in den nächsten Abschnitten, wie du die Logs für PowerShell Scripts und Win32 Apps ebenfalls dort ablegen kannst.

Inhalt Device diagnostics

Eigene Logs im Intune Verzeichnis abspeichern

Damit die Logs gesammelt werden und im entsprechenden Ordner erscheinen, müssen folgende Kriterien erfüllt sein:

  • Ablageort lokal: C:\ProgramData\Microsoft\IntuneManagementExtension\Logs\
  • Keine Unterordner
  • Dateiendung ".log"
  • Adminrechte

Achte darauf, nicht zu viel in diesen Ordner zu packen, damit das Diagnostic Package nicht zu gross wird.

Logs/Transcript in PowerShell Scripts

Wenn du ein PowerShell-Skript mit Intune verteilst, kannst du das wie bisher tun. Du musst nur ein Transcript zu deinem Script hinzufügen.

Die kannst du, indem du folgenden zwei Zeilen um deinen Code herum packst:

Start-Transcript -Path "$env:ProgramData\Microsoft\IntuneManagementExtension\Logs\NameOfYourScript-script.log" -Force

# paste your code here

Stop-Transcript
Code language: PowerShell (powershell)

In der ersten Zeile noch den Namen des Logs eintragen und das war's.

Logs/Transcript in Win32 Apps

Die Logik in den Win32 Apps ist identisch mit der in den PowerShell Scripts. Wenn du ohnehin eine PowerShell als Installationsdatei verwendest, kannst du den gleichen Wrapper wie für die PowerShell-Skripte verwenden.

Start-Transcript -Path "$env:ProgramData\Microsoft\IntuneManagementExtension\Logs\ProgramName-installation.log" -Force

# paste your code here

Stop-TranscriptCode language: PowerShell (powershell)

Vergiss nicht, auch die Deinstallationsroutinen in ein Transcript zu packen und ihr einen eindeutigen Namen zu geben.

Falls du ein Batch-File zur Installation verwendest (z.B. install.cmd), kannst du folgenden Zusatz zur Erstellung des Logs nutzen:

@echo off
set LOGFILE=%ALLUSERSPROFILE%\Microsoft\IntuneManagementExtension\Logs\ProgramName-installation.log
call :LOG > %LOGFILE%
exit /B

:LOG

:: Your code below 
Code language: DOS .bat (dos)

Logs mit dem PSAppDeployToolkit (PSADT)

Wenn du PSDAT für die Verteilung von Win32-Applikationen verwendest, musst du nur den Log-Pfad in der Konfiguration anpassen. Diesen findest du in der Datei "AppDeployToolkit/AppDeployToolkitConfig.xml":

PSAppDeployToolkit Log Path
Toolkit_LogPath: $envProgramData\Microsoft\IntuneManagementExtension\Logs

Wenn mit dem Toolkit auch MSI's verteilt werden, musst du auch den Pfad der MSI-Logdateien anpassen. Dieser befindet sich in der gleichen Datei:

PSAppDeployToolkit MSI Log Path
MSI_LogPath: $envProgramData\Microsoft\IntuneManagementExtension\Logs

User Logs ins IME Verzeichnis schreiben

Da der Endbenutzer keine Schreibrechte im IME-Pfad hat, können Logs, die im Benutzerkontext erzeugt werden, nicht hier abgelegt werden.
Hier kann uns aber die "Proactive Remediation" Funktion von Intune aushelfen. Damit können wir in einem definierten Intervall Logs aus einem oder mehreren Benutzerverzeichnissen in das IME-Verzeichnis kopieren oder verschieben.

Du kannst das Template herunterladen und direkt verwenden. In der Vorlage habe ich das Verzeichnis, in das das PSADT schreibt, und ein Beispiel für das Benutzerverzeichnis im AppData angegeben. Du kannst die Vorlage aber an deine Bedürfnisse anpassen.
Ergänze dazu im Detection- und Remediation File in der ersten Zeile die Pfade:

In der Remediation hast du zusätzlich die Möglichkeit zwischen dem Mode "copy" oder "move" zu wählen.
Mit dem Modus "move" werden die Logs verschoben und sind anschliessend nicht mehr im Userverzeichnis vorhanden. Dies hat den Vorteil, dass die Remediation nur dann gestartet wird, wenn neue Logs vorhanden sind.

Im Modus "copy" werden die Logs jedes Mal kopiert.

Den Modus definierst du im Remediation-Script in der zweiten Zeile:

Wie du das Proactive Remediations Paket in Intune erstellst und weitere Beispiele findest du hier: Endpoint Analysis Proactive Remediation Community Repository | scloud
(Das Paket muss im Systemkontext hochgeladen/ausgeführt werden.)

Zusammenfassung

Mit ein paar kleinen Anpassungen in deinen PowerShell Scripts, Win32 Apps oder den Einstellungen des PSAppDeployToolkit kannst du deine eigenen Logs deiner Installationen so speichern, dass du sie zentral und relativ schnell einsehen kannst. Dies ist unabhängig vom Standort und dem Zugriff auf das Endgerät möglich. Das Gerät muss lediglich über eine aktive Internetverbindung verfügen.
Dass das Abrufen der Logdaten meist 20 Minuten und manchmal sogar länger dauert, ist sicher nicht optimal. Aber immer noch besser als gar keinen Zugriff auf die Logs zu haben.