15/11/2024

Microsoft Intune

Intune – Comment exécuter un script PowerShell sur Windows ?

I. Présentation

Dans ce tutoriel, nous allons apprendre à exécuter un script PowerShell sur des appareils Windows à l'aide de Microsoft Intune. Ainsi, un script PowerShell chargé sur Intune pourra être exécuté sur un ensemble de machines sous Windows 10 ou Windows 11.

Nous allons commencer par évoquer les prérequis et le fonctionnement de cette fonctionnalité, avant la mise en pratique qui consistera à exécuter un script PowerShell qui va configurer une image de fond d'écran et de verrouillage sur Windows 10 Pro et Windows 11 Pro (pour les éditions Enterprise et Education, il y a des paramètres natifs dans Intune).

II. Prérequis

Pour exécuter un script PowerShell sur des appareils Windows, sachez que Microsoft Intune Management Extension doit être installé sur l'appareil. Ce composant s'installe automatiquement à partir du moment où un script ou une application Win32 est attribué à un appareil.

Pour Microsoft Intune Management Extension, et donc exécuter un script PowerShell, il y a plusieurs prérequis à respecter :

  • Appareils joints dans Entra ID : Microsoft Entra Joined (Azure AD Joined) et Microsoft Entra Hybrid Joined (Azure AD Hybrid Joined)
  • Appareils inscrits dans Intune
  • Windows 10 à partir de la version 1709 ou Windows 11 (sauf les éditions Famille / Home)
  • L'horloge de l'appareil doit être correctement configurée (date et heure correctes)

En ce qui concerne les scripts PowerShell en eux-mêmes, voici ce qu'il faut savoir :

  • Le poids du script ne doit pas dépasser 200 Ko
  • L'utilisateur n'a pas besoin de se connecter à l'appareil pour que le script PowerShell soit exécuté
  • Lorsque le script est configuré dans Intune pour s'exécuter dans le contexte de l'utilisateur et que cet utilisateur dispose de droits d'administrateur, alors le script PowerShell s'exécute par défaut avec les privilèges de l'administrateur.
  • Il y a un timeout de 30 minutes sur l'exécution des scripts PowerShell
  • Au niveau de l'ordre d'exécution des tâches, sachez que les scripts PowerShell sont exécutés avant les applications Win32.
  • Sur les appareils partagés, le script PowerShell s'exécute pour chaque nouvel utilisateur qui se connecte.

Nous pouvons aussi rappeler l'importance d'éviter (autant que possible) de stocker des informations sensibles dans ces scripts, à commencer par des mots de passe.

À ce sujet, vous pouvez vous référer à la documentation officielle de Microsoft :

III. Déployer un script PowerShell avec Intune

A. Le script PowerShell

Le script PowerShell que l'on va déployer via Intune va effectuer les actions suivantes :

  • Télécharger en local deux fichiers : une image de fond d'écran et une image d'écran de verrouillage. L'objectif étant de télécharger les fichiers à partir d'une URL Internet vers un répertoire local (C:\Windows\Web\Wallpaper\).

Voici le script PowerShell complet :

Bouton - Accéder à la ressource sur GitHub
<#
.SYNOPSIS
        Définir une image de fond d'écran et une image d'écran de verrouillage via les clés de Registre Windows

.DESCRIPTION
        Sur Windows 10 Pro et Windows 11 Pro, il n'est pas possible de configurer une image de fond d'écran et/ou de verrouillage avec les paramètres natifs Intune.
        La solution de contournement consiste à utiliser des valeurs dans le Registre Windows, comme par GPO Active Directory.
        Les images sont téléchargées en local sur la machine dans "C:\Windows\Web\Wallpaper\"
        Indiquez les URL vers vos images en modifiant ces deux variables : $DesktopImageURL et $LockscreenImageURL.

.PARAMETER
.EXAMPLE  
.INPUTS
.OUTPUTS
	
.NOTES
	NAME:	Windows-Pro-Background-Lockscreen-Images.ps1
	AUTHOR:	Florian Burnel
	EMAIL:	[email protected]
	WWW:	www.it-connect.fr

	VERSION HISTORY:

	1.0 	2024.03.06
		    Initial Version

#>
# Fond ecran - URL en ligne et en local
$DesktopImageURL = "https://itconnectintunedemo.blob.core.windows.net/images/IT-Connect_Wallpaper_052020-V2.png"
$DesktopLocalImage = "C:\Windows\Web\Wallpaper\ITC_Wallpaper.png"

# Ecran verrouillage - URL en ligne et en local
$LockscreenImageURL = "https://itconnectintunedemo.blob.core.windows.net/images/IT-Connect_Wallpaper_052020-V2.png"
$LockscreenLocalImage = "C:\Windows\Web\Wallpaper\ITC_Lockscreen.png"

# Registre - Chemin vers la cle (qui doit accueillir les valeurs)
$RegKeyPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\PersonalizationCSP"

# Telecharger les images en local
if(!(Test-Path $DesktopLocalImage)){
    Start-BitsTransfer -Source $DesktopImageURL -Destination $DesktopLocalImage
}

if(!(Test-Path $LockscreenLocalImage)){
    Start-BitsTransfer -Source $LockscreenImageURL -Destination $LockscreenLocalImage
}

# Modifier les cles de Registre (seulement si l'on parvient a acceder aux images en local)
if((Test-Path $DesktopLocalImage) -and (Test-Path $LockscreenLocalImage)){

    # Creer la cle PersonalizationCSP si elle n'existe pas
    if (!(Test-Path $RegKeyPath))
    {
        New-Item -Path $RegKeyPath -Force | Out-Null
    }

    # Registre Windows - Configurer l'image de fond d'ecran (wallpaper)
    New-ItemProperty -Path $RegKeyPath -Name DesktopImageStatus -Value 0 -PropertyType DWORD -Force | Out-Null
    New-ItemProperty -Path $RegKeyPath -Name DesktopImagePath -Value $DesktopLocalImage -PropertyType String -Force | Out-Null
    New-ItemProperty -Path $RegKeyPath -Name DesktopImageUrl -Value $DesktopLocalImage -PropertyType String -Force | Out-Null

    # Registre Windows - Configurer l'image de l'ecran de verrouillage (lockscreen)
    New-ItemProperty -Path $RegKeyPath -Name LockScreenImageStatus -Value 0 -PropertyType DWORD -Force | Out-Null
    New-ItemProperty -Path $RegKeyPath -Name LockScreenImagePath -Value $LockscreenLocalImage -PropertyType String -Force | Out-Null
    New-ItemProperty -Path $RegKeyPath -Name LockScreenImageUrl -Value $LockscreenLocalImage -PropertyType String -Force | Out-Null

}

Adaptez les deux variables suivantes : $DesktopImageURL (URL vers l'image de fond d'écran) et $LockscreenImageURL (URL vers l'image de l'écran de verrouillage)

Vous pouvez réutiliser ce script et à l'adapter à vos besoins. Sachez que la procédure est identique, peu importe ce que fait votre script PowerShell.

Note : ce script reprend le principe de création de valeurs dans le Registre, comme nous pouvons le faire par GPO et comme je l'avais expliqué dans un précédent article.

B. Ajouter un script dans Intune

Connectez-vous au Centre d'administration Microsoft Intune, cliquez sur "Appareils" (1), puis sur "Scripts et corrections" (2). Ensuite, cliquez sur l'onglet "Scripts de plateforme" (3) afin de pouvoir cliquer sur le bouton "Ajouter" (4) et choisissez "Windows 10 et ultérieur" (5) puisque nous voulons exécuter un script PowerShell sur des machines Windows.

Intune - Ajouter un script PowerShell - Scripts de plateforme Windows

Donnez un nom à ce script, ou plutôt à cette tâche qui apparaîtra dans Intune. Je vous encourage également à indiquer une description. Poursuivez.

Windows Pro - Script - Configurer fond d'écran et écran verrouillage

A l'étape "Paramètres du script", vous devez commencer par charger votre script sur Intune. En fait, vous devez charger un fichier présent sur votre ordinateur pour l'envoyer sur Microsoft Intune. Ensuite, nous avons plusieurs options à notre disposition :

  • Exécuter ce script en utilisant les informations d'identification de l'utilisateur connecté : cette option doit être sur "Oui" pour que le script soit exécuté en héritant des droits de l'utilisateur qui se connecte. Choisissez "Non" pour exécuter une action qui nécessite des droits plus élevés : c'est le cas ici compte tenu de l'emplacement cible où l'image doit être téléchargée.
  • Appliquer la vérification de la signature du script : cette option doit être sur "Non" sauf si vous avez un certificat de signature de code sur vos appareils et qu'il est utilisé pour signer vos scripts (ce qui est l'idéal !).
  • Exécuter le script dans un hôte PowerShell 64 bits : cette option doit être sur "Oui" pour utiliser PowerShell 64 bits sur les machines 64 bits
Intune - Exécuter un script PowerShell sur Windows

À l'étape suivante, nommée "Affectations", vous devez affecter ce script PowerShell à des utilisateurs ou des appareils. Ici, mes machines Windows sont ciblées donc je sélectionne un groupe nommé "PC_Win_Pro" présent dans Microsoft Entra ID.

Intune - Affecter un script PowerShell à des appareils

Poursuivez... A la fin, vérifiez l'ensemble des paramètres et si tout est OK, cliquez sur "Ajouter".

Intune - Ajouter d'un script PowerShell pour Windows 11

Voilà, votre script PowerShell va être exécuté sur les appareils / les utilisateurs ciblés.

IV. Tester le déploiement

Pour tester le déploiement, il convient de synchroniser un appareil pour qu'il actualise ses paramètres et "comprenne" qu'il doit exécuter un script PowerShell.

A. Microsoft Intune Management Extension

Pour que le script soit exécuté, nous avons besoin que Microsoft Intune Management Extension soit présent sur les appareils. Par défaut, ce n'est pas le cas : ce n'est pas un composant natif à Windows. Cependant, il va être installé automatiquement sur les appareils où le script PowerShell doit être exécuté.

Sur la machine "PC-ITC-01", présente dans le groupe "PC_Win_Pro", le composant s'est installé tout seul et dans la foulée, le script PowerShell a été exécuté. Le tout sans avoir besoin de redémarrer l'ordinateur.

B. Vérifier le bon fonctionnement du script

Pour vérifier le bon fonctionnement du script, nous pouvons investiguer sur la machine Windows. Ici, c'est facile : il suffit de vérifier si le fichier est bien présent à l'emplacement souhaité. Nous pouvons aussi regarder si les valeurs de Registre sont bien créées.

Intune - Wallpaper Windows Pro - Registre

Du côté de la console Intune, si vous cliquez sur le script et que vous accédez à "État de l'appareil", vous pouvez obtenir un statut pour chaque machine impactée par la politique. C'est une façon de voir à distance s'il y a eu des soucis sur une ou plusieurs machines.

C. Les logs

S'il y a un souci avec l'exécution de votre script PowerShell, vous devez investiguer en local sur une machine. Sachez que les logs d'Intune Management Extension sont stockés dans ce répertoire :

C:\ProgramData\Microsoft\IntuneManagementExtension\Logs

Dans ce répertoire, il y a un fichier de log très intéressant au sujet de l'activité d'Intune Management Extension : IntuneManagementExtension.log.

Il s'agit d'un fichier texte que l'on peut ouvrir avec un éditeur de texte classique (Bloc-notes, etc.). Toutefois, il est préférable d'utiliser l'outil gratuit CMTrace que les administrateurs de SCCM ont l'habitude d'utiliser.

Si besoin, vous pouvez l'obtenir en téléchargeant l'exécutable ci-dessous (un peu plus de 1 Go). Ensuite, l'exécutable va décompresser son contenu sur votre PC, ce qui vous permettra d'obtenir l'exécutable "CMTrace.exe". Il est présent ici :

Intune Management Extension - CMTrace

À partir de cet utilitaire, vous pouvez charger un fichier de log. C'est l'occasion d'ouvrir le fichier "IntuneManagementExtension.log" pour analyser son contenu. Ce fichier est très verbeux. Vous pouvez effectuer une recherche pour gagner du temps, avec le mot clé "PowerShell", par exemple.

Intune - Logs - Exécution Script PowerShell

Dans l'exemple ci-dessous (correspondants à d'autres tests effectués), nous pouvons voir qu'il y a eu un problème lors de l'exécution du script : un argument a une valeur invalide. Effectivement, il y a une erreur sur le nom d'une variable, ce qui renvoie une valeur nulle et perturbe l'exécution de la commande. Grâce à ce fichier de log et CMTrace, vous pouvez identifier plus facilement (et plus rapidement) l'origine du problème.

CMTrace - Analyser log Intune - Script PowerShell

V. Conclusion

Après avoir suivi ce tutoriel, vous êtes en mesure d'exécuter des scripts PowerShell sur vos machines Windows à l'aide de Microsoft Intune ! Ce tutoriel sera également utile à toutes les personnes qui souhaitent configurer une image de fond d'écran et/ou de verrouillage sur les machines Windows 10 Pro et Windows 11 Pro.

Au sein de Microsoft Intune, PowerShell est également utile pour le déploiement d'applications et les fonctionnalités de remédiation. Nous aborderons ces points dans de futurs articles.

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

2 commentaires sur “Intune – Comment exécuter un script PowerShell sur Windows ?

  • Salut
    C’est très pratique mais en réalité le système montre très vite ses limites pour une raison simple. Il faut que l’utilisateur soit admin de son poste pour faire des choses sympa. Or on le sais tous, c’est de moins en moins vrai en entreprise
    Le contournement est en réalité le déploiement de script en mode app avec intunewin en mode système > affectation « resuired »

    Répondre

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.