Microsoft 365 : Forcer les utilisateurs à changer leur mot de passe
- Mise à jour le 24 nov. 2024
Nous allons voir comment forcer les utilisateurs à changer leurs mots de passe Microsoft 365 avec PowerShell.
Tout d'abord, je décrirai comment le faire étape par étape à partir de la ligne de commande PowerShell pour un seul compte. Puis, je montrerai un petit script pour le faire pour plusieurs comptes stockés dans un fichier texte.
Les prérequis
Pour pouvoir se connecter à Microsoft 365 avec PowerShell nous aurons besoin du module Microsoft.Graph.
- Ouvrir un prompt PowerShell avec les droits administrateur :

- Définir la version de Tls en 1.2 pour le contexte actuel de la session :
PS C:\> [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
- Installation du module Microsoft.Graph :
PS C:\> Install-Module -name Microsoft.Graph
Se connecter à Microsoft 365
- Utiliser la commande Connect-MgGraph pour ouvrir la fenêtre d'authentification Microsoft Microsoft 365 :
PS C:\> Connect-MgGraph
- Renseigner des identifiants administrateur :

- Entrer le mot de passe :

Réinitialiser le mot de passe utilisateur
Forcer un nouveau mot de passe
- Avec la commande suivante nous pouvons manuellement définir un mot de passe pour un utilisateur :
- ForceChangePasswordNextSignIn : Paramétrer le fait que l'utilisateur ait à changer le mot de passe à la prochaine connexion (ici, $False pour désactiver)
PS C:\> Update-MgUser -UserId user@shebangthedolphins.net -PasswordProfile @{ Password = "NewPassw0rd"; ForceChangePasswordNextSignIn=$false; ForceChangePasswordNextSignInWithMfa=$false }
Forcer un utilisateur à changer son mot de passe
- Avec cette commande, la procédure invitant l'utilisateur à changer de mot de passe apparaitra à la prochaine connexion de ce dernier (cela sera plus long avec un client Outlook car, si d'après ce que j'ai compris, il utilise un système de cache) :
- ForceChangePasswordNextSignIn=$true : l'utilisateur doit modifier son mot de passe lors de la prochaine connexion
- forceChangePasswordNextSignInWithMfa=$false : l'utilisateur n'a pas besoin de procéder à une authentification multifactorielle (MFA) avant d'être contraint de changer son mot de passe.
PS C:\> Update-MgUser -UserId user@shebangthedolphins.net -PasswordProfile @{ ForceChangePasswordNextSignIn=$true; ForceChangePasswordNextSignInWithMfa=$false }
Divers
- Pour chercher un utilisateur :
PS C:\> Get-MgUser -ConsistencyLevel eventual -Count userCount -Search '"DisplayName:cartman"'

Script PowerShell pour forcer des utilisateurs à changer de mot de passe
Si l'on veut forcer un grand nombre d'utilisateur à changer leur mot de passe il sera plus simple de l'automatiser avec un script PowerShell.
- La première chose à faire est de créer un fichier C:\users.txt qui contiendra la liste des comptes utilisateurs pour lesquels les mots de passe devront être changés :

- Exécuter ce script PowerShell pour forcer les utilisateurs présents dans le fichier texte à changer leur mot de passe :
###########################
# author : shebangthedolphins.net
# version : 1.1
# date : 2024.11
# role : force a list of users stored in a text file to change their Microsoft 365 password
# other : create a C:\users.txt file in which to place users
# updates :
# - 1.0 (2021/03) : First Version
# - 1.1 (2024/11) : Replace obsolete MsolService with Microsoft.Graph
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Connect-MgGraph
$file = "C:\users.txt"
ForEach ($line in (Get-Content -Path $file)) {
Write-Host "Working on $line.Replace(' ','')"
#Set-MsolUserPassword -UserPrincipalName $line.Replace(' ','') -ForceChangePasswordOnly $true -ForceChangePassword $true
Update-MgUser -UserId $line.Replace(' ','') -PasswordProfile @{ ForceChangePasswordNextSignIn=$true; ForceChangePasswordNextSignInWithMfa=$false }
}