Skip to main content

Microsoft 365: Gérer les utilisateurs et groupes via Powershell

Utiliser le module Microsoft Graph (recommandé)

Installation du module

Install-Module Microsoft.Graph -Scope CurrentUser

Connexion

Ensuite, il faut se connecter avec les bons scopes. Par exemple :

Connect-MgGraph -Scopes "User.ReadWrite.All"

Lors de la connexion, il te sera demandé de t’authentifier (avec un compte ayant les permissions suffisantes dans Azure AD).

Création de l’utilisateur

Une fois connecté, tu peux créer l’utilisateur. Par exemple, en utilisant la cmdlet New-MgUser :

New-MgUser `
  -AccountEnabled:$true `
  -DisplayName "Adele Blanc-sec" `
  -MailNickname "Adele" `
  -UserPrincipalName "adele@coubiac.ovh" `
  -PasswordPolicies "DisablePasswordExpiration" `
  -PasswordProfile @{
      ForceChangePasswordNextSignIn = $true
      Password = "MotDePasse!123"
  } `
  -JobTitle "Aventurière" `
  -Department "Paranormal" `
  -UsageLocation "FR" `
  -City "Paris"

image.png

Modification d'un utilisateur

  • Fais une recherche à l'aide du Cmdlet Get-MgUser pour récupérer l'id de l'utilisateur:
Get-MgUser -ConsistencyLevel eventual -Count userCount -Filter "startsWith(DisplayName, 'a')" -Top 1
  • Utilises le Cmdlet Update-MgUser ou Set-MgUser (qui est un alias) pour modifier une ou plusieurs propriétés d'un utilisateur:
Update-MgUser -UserId '1ec98b35-c6d6-48bf-b164-9d17cf98fbc7' -JobTitle 'Journaliste'

image.png

Suppression d'un utilisateur

Remove-MgUser -UserId '1ec98b35-c6d6-48bf-b164-9d17cf98fbc7'

image.png

Restaurer un utilisateur

Quand un utilisateur est supprimé dans Azure AD (Microsoft Entra ID), il n’est pas immédiatement supprimé définitivement. Il est déplacé dans une sorte de "corbeille" appelée "recycle bin" ou plus précisément "Deleted Items".

🗑️ Durée de rétention des utilisateurs supprimés

Les objets (utilisateurs, groupes...) supprimés restent dans cette corbeille pendant 30 jours.

👉 Après 30 jours, l’objet est purgé définitivement (hard delete) et irréversible. Tu ne pourras plus le restaurer.

🔄 Pendant ces 30 jours, tu peux :

✅ Voir les utilisateurs supprimés :

Get-MgDirectoryDeletedUser

✅ Restaurer un utilisateur supprimé :

Restore-MgDirectoryDeletedItem -DirectoryObjectId <ID de l'utilisateur>

Tu peux récupérer l’ID avec Get-MgDirectoryDeletedUser
Le UserPrincipalName ne suffit pas toujours pour le restaurer, il faut l’Id.


💡 Bon à savoir
  • Quand tu restaures un utilisateur, il retrouve :
    • son ID
    • son UPN (login) s’il est encore libre
    • ses attributs (titre, département, etc.)
    • ses groupes d’appartenance si tu utilises la fonctionnalité de sauvegarde avancée (mais pas par défaut)
  • Si un autre objet a été créé avec le même nom ou UPN, la restauration peut échouer.

Attribution d'un rôle à l'utilisateur.

Il faut en premier vérifier que tu es connecté avec les bonnes permissions:

Connect-MgGraph -Scopes RoleManagement.ReadWrite.Directory, Directory.ReadWrite.All, User.ReadWrite.All

1. Vérifier si le rôle est activé

Par défaut, la commande suivante te liste uniquement les rôles activés dans ton tenant :

Get-MgDirectoryRole | Select DisplayName,Id,RoleTemplateId

Si le rôle que tu souhaites attribuer n'apparaît pas dans cette liste, c'est qu'il n'est pas encore activé dans ton environnement. Pour voir tous les rôles disponibles (activés ou non), tu peux utiliser :

Get-MgDirectoryRoleTemplate | Select DisplayName,Id

Chaque template de rôle possède un identifiant fixe, appelé id (défini par Microsoft), qui permet de l'identifier de manière universelle. Note que, lorsque le rôle est activé, il reçoit un ID unique propre à ton tenant, mais conserve l'id du template sous la propriété roleTemplateId pour faire le lien avec le modèle de rôle d'origine.

2. Activer le rôle si nécessaire

Si le rôle que tu souhaites attribuer n'est pas encore activé, il faut l'activer à l'aide de la commande suivante. Pour cela, récupère d'abord le id du template de rôle désiré via Get-MgDirectoryRoleTemplate, puis active-le :

Enable-MgDirectoryRole -Id <Id>

Remplace <Id> par l'identifiant fixe du template de rôle que tu veux activer. Une fois activé, le rôle apparaîtra dans le résultat de Get-MgDirectoryRole.

3. Assigner le rôle à l'utilisateur

Une fois le rôle activé, tu peux procéder à son attribution à un utilisateur. La démarche se décompose en trois étapes :

a. Récupérer l'ID du rôle activé

Utilise la commande suivante pour filtrer le rôle activé en fonction de son roleTemplateId :

$role = Get-MgDirectoryRole | Where-Object { $_.RoleTemplateId -eq "<roleTemplateId>" }

Remplace <roleTemplateId> par l'identifiant fixe du rôle concerné.

b. Récupérer l'ID de l'utilisateur

Pour assigner le rôle, récupère l'utilisateur cible. Par exemple, en utilisant son User Principal Name (UPN) :

$user = Get-MgUser -Filter "userPrincipalName eq 'utilisateur@example.com'"
c. Attribuer le rôle à l'utilisateur

Finalement, crée l'assignation du rôle en exécutant :

New-MgRoleAssignment -RoleId $role.Id -PrincipalId $user.Id -DirectoryScopeId "/"

Cette commande assigne le rôle activé à l'utilisateur spécifié dans l'ensemble de l'annuaire.

Vérifier l'assignation

Pour confirmer que le rôle a bien été attribué à l'utilisateur, tu peux vérifier avec :

Get-MgRoleAssignment -PrincipalId $user.Id

Cette commande te renvoie la liste des rôles attribués à l'utilisateur, te permettant ainsi de vérifier que l'assignation a été correctement effectuée.

Création d'un groupe

Pour pouvoir travailler avec les groupes, il faut des permissions supplémentaires. Il faut donc se reconnecter.

Connect-MgGraph -Scopes "User.ReadWrite.All" , "Group.ReadWrite.All"

On peut ensuite créer le groupe.

$params = @{                                                        
   description     = "Les aventuriers";
   displayName     = "aventurier";
   groupTypes      = @("Unified");
   mailEnabled     = $true;
   mailNickname    = "Aventuriers";
   securityEnabled = $false
 }

 New-MgGroup -BodyParameter $params
🔍 securityEnabled

Ce paramètre détermine si le groupe est un groupe de sécurité utilisé pour gérer les autorisations d'accès (ACL, fichiers, applications, etc.).

  • securityEnabled = $trueGroupe de sécurité
    • Peut être utilisé pour attribuer des autorisations (sur des fichiers, des applications, etc.)
    • Peut contenir des utilisateurs, groupes, etc.
  • securityEnabled = $false ➜ ce n’est pas un groupe de sécurité
🔍 groupTypes

Ce champ indique le type fonctionnel du groupe. Il peut contenir :

Valeur

Signification

@("Unified")

Groupe Microsoft 365 (anciennement Office 365) : boîte mail, calendrier, Teams, etc.

@()

Groupe de sécurité classique sans fonctionnalités M365

@("DynamicMembership")

Groupe dynamique (ajout automatique de membres selon des règles) – seulement valable avec M365 ou sécurité.

🧠 Résumé des combinaisons classiques :

groupTypes

securityEnabled

mailEnabled

Type de groupe

@("Unified")

$false

$true

Groupe Microsoft 365

@()

$true

$false

Groupe de sécurité (pas de boîte mail)

@()

$false

$true

Groupe de distribution

@()

$false

$false

Non valide

@()

$true

$true

Non valide

@("Unified")

$true

$true

Non valide (Unified ne peut pas être securityEnabled)