logo rss

Microsoft 365 : Forcer les utilisateurs à changer leur mot de passe

Microsoft 365 Logo

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 :
Menu contextuel montrant l'option d'exécuter PowerShell en tant qu'administrateur sous Windows.
  • 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 :
Écran de connexion Microsoft montrant un champ d'email pré-rempli avec un compte d'administrateur.
  • Entrer le mot de passe :
Écran de connexion Microsoft invitant l'utilisateur à saisir le mot de passe du compte administrateur.

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"' Commande PowerShell Get-MgUser affichant les résultats de la recherche pour un utilisateur spécifique

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 :
Bloc-notes affichant une liste d'adresses électroniques d'utilisateurs du domaine shebangthedolphins.net
  • 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 } }
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :

adresse mail de contact