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 !
Bonjour Florian,
Quel pourrait être l’utilité de rendre l’immatbleID à nul s’il te plait ?
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
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
}
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é.
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
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
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é »
}