Intune troubleshooting – Partie 1 : collecter les logs de vos appareils et les uploader sur Azure file

Dans cet article, je vais vous présenter un moyen de collecter via Intune les logs relatifs à Intune de vos appareils enrôlés et de les uploader sur Azure file.

Contexte

Par défaut, Intune n’offre pas beaucoup de possibilités pour faire du troubleshooting sur un poste.
Pour cela, il faut souvent aller sur la machine, vérifier les journaux d’évènements, fichiers de logs Intune…
Vous souhaitez pouvoir collecter ces logs sans bouger et de manière sécurisée via un certificat.

Note: J’expliquerais dans un autre article comment mettre en place la zone permettant d’uploader nos fichiers de logs.

D’autres méthodes ?

Je présenterais dans d’autres articles, différentes manières de procéder :

  • Partie 1: Collecter les logs d’un appareil et les uploader sur Azure File
  • Partie 2: Collecter les logs d’un appareil et les uploader sur GitHub
  • Partie 3: Collecter les logs d’un appareil et les upload

Les scripts

Le script est disponible sur GitHub, sur le lien ci-dessous :

Prérequis

Win32 Prep tool
Nous allons utiliser l’outil Win32 Prep tool pour créer une application Win32 contenant notre script.
Celui-ci est disponible ici.

Contenu Azure

Pour la partie upload nous aurons besoin des choses suivantes sur Azure :

  • Un groupe de ressources
  • Un compte de stockage
  • Une Azure file share
  • Une App registration avec certificat

Création du certificat

Pour créer le certificat, nous utiliserons le script suivant :

Création de l’app avec certificat

Pour créer l’App registration il faudra procéder comme ci-dessous :

1/ Installer le module Az, comme ci-dessous :

Install-module Az -AllowClobber

2/ Saisir Connect -AZAccount

3/ Utiliser le code ci-dessous :

# Create the certificate
$Intune_Cert = New-SelfSignedCertificate -CertStoreLocation "cert:\LocalMachine\My" `
  -Subject "CN=IntuneLogCert" `
  -KeySpec KeyExchange
$keyValue = [System.Convert]::ToBase64String($Intune_Cert.GetRawCertData())

Exporter le certificat

Nous aurons besoin d’exporter le certificat dans le but de l’utiliser sur d’autres appareils.
Nous exporterons le certificat sous la forme d’un fichier pfx nommé : intune_cert.pfx
Ci-dessous le code pour l’exporter:

# Export the certificate
$Certificate_PFX_Path = "path\intune_cert.pfx" # Where to export the pfx
$Intune_Cert = Get-ChildItem -Path Cert:\LocalMachine\My\ | Where-Object {$_.Subject -match "IntuneLogCert"}
$PFX_PWD = "intune" | ConvertTo-SecureString -AsPlainText -Force
Export-PfxCertificate -Cert $Intune_Cert -FilePath $Certificate_PFX_Path -Password $PFX_PWD

Importer le certificat

Avant d’importer le certificat, nous allons exporter le mot de passe de celui-ci, de manière sécurisée dans un fichier texte.
Ce fichier nommé cert_import.txt sera utilisé plus tard.
Ci-dessous le code pour faire cela:

# Export password to secure file
$Cert_PWD_File = "password secure file path\cert_import.txt"
[Byte[]] $Encrypt_key = (1..16)
$PFX_PWD = "intune" | ConvertTo-SecureString -AsPlainText -Force
$PFX_PWD | ConvertFrom-SecureString -key $Encrypt_key | Out-File $Cert_PWD_File

Ci-dessous le code pour importer le certificat:

# Import the certificate
$Certificate_PFX_Path = "your certificate path\intune_cert.pfx" 
[Byte[]] $Encrypt_key = (1..16)
$Cert_PWD_File = "password secure file path\cert_import.txt"
$secureString = Get-Content $Cert_PWD_File | ConvertTo-SecureString -Key $Encrypt_key
Import-PfxCertificate -FilePath $Certificate_PFX_Path -CertStoreLocation Cert:\CurrentUser\My -Password $secureString 

Comment cela va fonctionner ?

  1. Configurer le compte de stockage
  2. Créer un certificat
  3. Créer une app registration avec ce certificat
  4. Créer un package intunewin
  5. Créer une appli win32 dans Intune
  6. Assigner l’application

Que voulons-nous collecter ?

Journaux d’évènements

Le script permettra de collecter les journaux d’évènements suivants:

  • System
  • Microsoft > Windows > DeviceManagement-Enterprise-Diagnostics-Provider
  • Microsoft > Windows > AAD
  • Microsoft > Windows > ModernDeployment-Diagnostics-Provider
  • Microsoft > Windows > AppxDeploymentServer
  • Microsoft > Windows > assignedaccess
  • Microsoft > Windows > assignedaccessbroker
  • Microsoft > Windows > provisioning-diagnostics-provider
  • Microsoft > Windows > shell-core
  • Microsoft > Windows > user device registration

Logs Intune

Le script permettra de collecter les logs situés dans ProgramData\Microsoft\IntuneManagementExtension.

Rapports de diagnostic

Le script permettra de collecter les rapports de diagnostic ci-dessous :

  • rapport global
  • Rapport Autopilot
  • DeviceEnrollment report
  • DeviceProvisioning report
  • TPM report

Comment utiliser le script ?

Le script est nommé Collect_Intune_Device_Logs.ps1
Pour cela il faudra remplir le fichier xml Azure_infos.xml avec les infos ci-dessous :

  • Tenant_ID: Your tenant ID
  • App_ID: Application ID of the app registration that uses your certificate
  • Azure_resourceGroupName: The resource group name from Azure
  • Azure_storageAccName: The storage account from Azure
  • Azure_fileShareName: The file share name from Azure

Ci-dessous un exemple:

Intégration dans Intune

Dans cet exemple nous allons créer un groupe Azure AD dans lequel nous intégrerons les appareils pour lesquels nous souhaitons récupérer les logs.

Création du contenu de notre appli

  1. Crére un dossier Collect_intune_Device_Logs
  2. Copier le fichier Collect_intune_Device_Logs.ps1
  3. Copier le fichier Azure_infos.xml
  4. Copier le fichier intune_cert.pfx
  5. Copier le fichier cert_import.txt
  6. Ci-dessous le contenu de mon dossier:

Création du package

  1. Exécuter
  2. Sélectionner le dossier Collect_intune_Device_Logs
  3. Sélectionner le fichier Collect_intune_Device_Logs.ps1
  4. Sélectionner un dossier d’export du fichier intunewin

Création de l’appli Win32

  1. Allez dans Intune
  2. Allez dans Clients apps
  3. Cliquez sur Apps
  4. Cliquez sur Add
  5. Sélectionnez Windows app (Win32) puis Select
  6. Cliquez sur Select app package file

Choisir le fichier Collect_Intune_Device_Logs.intunewin

  1. Cliquez sur OK
  2. Saisir un nom et configurer comme vous le souhaitez

Dans Install et Uninstall command saisir:

C:\Windows\Sysnative\WindowsPowerShell\v1.0\powershell.exe -noprofile -executionpolicy Bypass -file .\Collect_Intune_Device_Logs.ps1
  1. Cliquez sur Next
  2. Choisissez vos requirements
  3. Cliquez sur Next
  4. Dans Detection rules, choisir Use a detection script
  1. Choisir le fichier Detection_script.ps1
  2. Cliquez sur Add puis cliquez on OK
  3. Cliquez on Next
  4. Dans la partie Dependencies Cliquez sur Next
  5. Dans la partie Scope tags Cliquez sur Next
  6. Dans Assignments ciquez sur Required puis Add group
  7. Sélectionnez le groupe
  8. Cliquez sur Next
  9. Cliquez sur Create

Collecte des logs en action

Ci-dessous ma zone Azure file avant:

Ci-dessous ma zone Azure file après:

Vérifier le log

Lorsque le script principal est lancé un fichier de log est rempli.
Il est localisé dans C:\Windows\Debug

A propos de l'auteur

Damien VAN ROBAEYS

Ingénieur Systèmes travaillant principalement sur ce qui tourne autour du poste de travail (MDT, SCCM, Intune) et l’automatisation avec PowerShell. MVP Microsoft et auteur pour ENI, il publie régulièrement sur son blog et gère différents groupes Facebook, PowerShell et WPF (~4000 membres), Windows Autopilot (~3000 membres).

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *