15/11/2024

Office 365

Office 365 : Définir le ImmutableID d’un compte sur $null

I. Présentation

Dans ce tutoriel, je vais vous expliquer comment supprimer la valeur de l'attribut ImmutableId d'un compte Office 365, en PowerShell. Cette opération s'effectue seulement en PowerShell.

Par définition, le terme "immutable" signifie "ne peut pas être changé" ou "inaltérable" : l'ImmutableId est une protection pour associer un utilisateur de l'AD local synchronisé avec Azure AD Connect avec l'utilisateur Cloud au sein du tenant Office 365.

Grâce à cet identifiant, l'utilisateur Active Directory local et l'utilisateur Office 365 sont liés. Cela évite qu'un utilisateur avec le même UPN puisse récupérer la boîte e-mail du premier utilisateur (si celui-ci venait être à supprimer, par exemple) car l'ImmutableId ne correspondrait pas.

Il est à noter que l'ImmutableId correspond à l'objectGUID de l'objet synchronisé (exemple : un utilisateur) transformé en base-64. Le script suivant permet de faire la conversion dans les deux sens : Convertir GUID - ImmutableId

II. Purger l'ImmutableId

Pour purger l'ImmutableId d'un compte Office 365, nous devons utiliser le cmdlet Set-MsolUser qui sert à modifier les propriétés d'un compte utilisateur. Le paramètre -ImmutableId est justement là pour ça : modifier l'ImmutableId du compte. Nous allons lui attribuer la valeur $null et dans la commande, il est indispensable d'encadrer $null par des guillemets sinon ça ne fonctionne pas (bien que la commande ne retournera pas d'erreur).

Avant d'exécuter la commande ci-dessous, il faudra penser à se connecter à votre tenant Office 365 via PowerShell et la commande Connect-MsolService.

Voici comment supprimer l'ImmutableId de l'utilisateur [email protected] (identifié par son adresse e-mail / UPN) :

Set-MsolUser -UserPrincipalName [email protected] -ImmutableID "$null"

Dans la foulée, nous pouvons vérifier que l'attribut est bien vide pour cet utilisateur grâce à la commande suivante :

Get-MsolUser -UserPrincipalName [email protected] | Select-Object UserprincipalName,ImmutableID

A vous de jouer !

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

7 commentaires sur “Office 365 : Définir le ImmutableID d’un compte sur $null

  • Bonjour Florian,

    Quel pourrait être l’utilité de rendre l’immatbleID à nul s’il te plait ?

    Répondre
    • Bonjour Benoit,

      Par exemple si tu veux détacher le compte Office 365 associé à un utilisateur A (Active Directory) pour le rattacher sur un utilisateur B, cela est indispensable car sinon cet attribut empêche cette opération par mesure de sécurité.

      Bonne soirée
      Florian

      Répondre
    • je te prends l’exemple d’une migration local AD vers Azure AD.

      tu fais tes synchro, tu t’assure que tes utilisateurs aient bien leurs boite email dans le cloud, avant de faire la suppression de ton serveur local, tu passe l’étape suivante :

      Sur ton local AD, tu supprime tes utilisateurs, ils vont se retrouver dans la corbeille 365.

      Le jeu consiste à remonter les utilisateurs mais depuis 365 :

      $adminUPN= »[email protected] »
      $cred = get-credential -UserName $adminUPN -Message « Type the password. »
      Connect-MsolService -credential:$cred

      #restauration des utilisateurs de la corbeille azureAD
      $UserSup = Get-MsolUser -ReturnDeletedUsers

      #Pour chaque utilisateur supprimé
      foreach ($retuser in $UserSup)
      {
      Write-Host « user : $n = $retuser.UserPrincipalName »
      $n = $n + 1
      #On restaure l’utilisateur via MSonline
      Restore-MsolUser -UserPrincipalName $retuser.UserPrincipalName
      #On met son ImmutableID sur null afin que la synchro ne se fasse plus entre la version 365 et le local.
      # Afin d’éviter que ton user AAD soit copié dans le AD.
      # Tu verra d’ailleurs que dans ta console 365, ton utilisateur est passé d’une instance local (serveur) à cloud (nuage)
      Set-MSOLUser -UserPrincipalName $retuser.UserPrincipalName -ImmutableID « $null »
      }

      # On vérifie la suppression de l’ImmutableID
      foreach ($retuser in $UserSup)
      {
      Get-MsolUser -UserPrincipalName $retuser.UserPrincipalName | select ImmutableID
      }

      Répondre
      • Lors d’une migration azure ad local vers office 365, pas besoin de faire ce procédé
        uniquement désactivé la synchro dirsync, les utilisateurs passe d’une gestion locale à full cloud et le tour et joué.

        Répondre
  • Bonjour,

    J’ai tenté mais la commande me retourne une erreur.
    Ce n’est peut être plus possible?

    Set-MsolUser : Unable to update parameter. Parameter name: IMMUTABLEID.
    Au caractère Ligne:1 : 1
    + Set-MsolUser -UserPrincipalName [email protected] -Immuta …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : OperationStopped: (:) [Set-MsolUser], MicrosoftOnlineException
    + FullyQualifiedErrorId : Microsoft.Online.Administration.Automation.PropertyNotSettableException,Microsoft.Online.Administration.Automation.SetUser

    Répondre
    • Hello,
      Ca fait un moment que je n’ai pas utilisé ce paramètre, mais il est toujours mentionné dans le documentation de Microsoft.
      Tu vises bien un compte synchronisé ?
      Cordialement,
      Florian

      Répondre
  • Bonjour,

    Comme j’ai galéré et passé beaucoup de temps avec Microsoft voici la solution pour ceux qui auraient la même situation.

    Il a 2 possibilités pour refaire la synchro. Le soft ou le hard matching.

    Le soft consiste à mettre les champs UPN + ProxyAddresses à l’identique. Dans mon cas, il me disait que le champ proxyAddresses était déjà présent sur mon tenant, normal puisque je voulais faire la synchro!

    J’ai dû faire un hard matching, quand on a fait une synchronisation une 1er fois entre son AD OnPromise et O365, un champ ImmutableID est mis sur le compte Azure. Comme j’ai refait mon AD les champs entre mon AD et Azure étaient différents.

    Pour ca j’ai fait un script qui récupère l’ImmutableID de mon AD afin de l’injecté dans le compte Azure.

    Il ensuite possible de refaire la synchronisation du compte.

    Attention, ca ne marche pas pour le groupe, car le champ ImmutableID n’existe pas! Il faut mettre les mêmes champs identiques des deux côtés et supprimer le groupe sur O365, puis refaire la synchro.

    voici les commandes, a mettre dans un script avec boucle + la connexion O365 + modules

    $Users = Get-ADUser -SearchBase $OU -Filter *

    Foreach ($Utilisateur in $Users) {
    $name = $Utilisateur.name
    $UPN = $Utilisateur.userPrincipalName
    $immutableid = [System.Convert]::ToBase64String($Utilisateur.ObjectGUID.tobytearray())
    Set-MsolUser -UserPrincipalName $UPN -ImmutableID $immutableid
    write-host “ Champ immutableID modifié »
    }

    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.