Aperçu
Cette procédure décrit les étapes pour importer des utilisateurs invités dans Microsoft Entra ID (anciennement Azure AD) à l’aide d’un script PowerShell qui s’appuie sur l’API Microsoft Graph.
Contrairement au processus standard d’invitation des invités, ce script enrichit les profils utilisateurs en définissant automatiquement des attributs supplémentaires, tels que:
- Téléphone Mobile
- Nom de l'entreprise
- Emplacement d'utilisation (par défaut : Belgique)
Principaux avantages de ce processus automatisé
- Gain de temps – Aucune saisie manuelle des utilisateurs requise.
- Cohérence garantie – Formatage standardisé des noms (ex: DUPONT Jean-Claude).
- Meilleure gestion des utilisateurs invités – Les attributs supplémentaires garantissent des fiches utilisateurs complètes.
- Évite les doublons – Le script vérifie si un utilisateur existe déjà avant de l’ajouter.
Prérequis
1. Installer le SDK PowerShell Microsoft Graph
Si ce n’est pas déjà fait, ouvrez PowerShell en tant qu’administrateur et exécutez :
Install-Module Microsoft.Graph -Scope AllUsers -Force
Cela garantit l’accès aux commandes de l’API Microsoft Graph.
2. Définir la stratégie d’exécution PowerShell
Autorisez l’exécution de scripts pour la session en cours :
Set-ExecutionPolicy RemoteSigned -Scope Process
Cela évite que des restrictions de sécurité ne bloquent l’exécution du script.
3. Autorisations requises dans Entra ID
Assurez-vous que votre compte Entra ID dispose des autorisations suivantes :
- User.Invite.All → Pour inviter des utilisateurs invités.
- User.ReadWrite.All → Pour mettre à jour les propriétés des utilisateurs (par ex: téléphone, entreprise, emplacement).
Vous pouvez vérifier vos autorisations dans le Centre d’administration Microsoft Entra.
Structure du fichier CSV (avec attributs supplémentaires)
Le script lit un fichier CSV contenant les informations des utilisateurs. Assurez-vous qu’il respecte le format suivant :
FirstName | LastName | MobilePhone | Company | |
---|---|---|---|---|
John | Dupont | john.dupont@example.com | +33612345678 | Example Corp |
Jane | Smith | jane.smith@example.com | +447987654321 | Tech Solutions |
Alice | Johnson | alice.johnson@example.com | +491579876543 | Innovate Ltd |
Bob | Brown | bob.brown@example.com | Softworks Inc. | |
Charlie | Davis | charlie.davis@example.com | +11234567890 | FutureTech |
Exemple de fichier CSV:
FirstName,LastName,Email,MobilePhone,Company John,Dupont, john.dupont@example.com,+33612345678,Example Corp Jane,Smith, jane.smith@example.com,+447987654321,Tech Solutions Alice,Johnson, alice.johnson@example.com,+491579876543,Innovate Ltd Bob,Brown, bob.brown@example.com,Softworks Inc. Charlie,Davis, charlie.davis@example.com,+11234567890,FutureTech
A noter:
- LastName → Sera automatiquement converti en MAJUSCULES.
- FirstName → Sera mis en forme correctement, en conservant les tirets (ex: Jean-Claude).
- MobilePhone → Optionnel, mais sera ajouté s’il est renseigné.
- Company → Optionnel, mais sera ajouté si fourni.
Vous pouvez également ajouter d’autres attributs si vous avez des besoins supplémentaires, mais pensez alors à adapter le script en conséquence.
Enregistrez le fichier sous :
C:\Scripts\GuestsImport.csv
Le script
# Import Microsoft Graph module # Import-Module Microsoft.Graph ####################### CONFIGURATION SECTION ####################### # Define the path to the CSV file $csvFilePath = "C:\Scripts\GuestsImport.csv" # Microsoft Graph API permissions required: "User.Invite.All", "User.ReadWrite.All" $scopes = "User.Invite.All", "User.ReadWrite.All" ####################### FUNCTION TO FORMAT FIRST NAME ####################### function Format-FirstName($firstName) { if (-not $firstName) { return $null } # Return null if empty # Process each name part separately while preserving hyphens $formattedParts = $firstName -split " " | ForEach-Object { ($_.Split("-") | ForEach-Object { if ($_.Length -gt 1) { $_.Substring(0,1).ToUpper() + $_.Substring(1).ToLower() } else { $_.ToUpper() } }) -join "-" } return $formattedParts -join " " } ####################### CONNECT TO MICROSOFT GRAPH (INTERACTIVE LOGIN) ####################### Write-Host "Connecting to Microsoft Graph... Please enter your credentials." -ForegroundColor Cyan try { Connect-MgGraph -Scopes $scopes -ErrorAction Stop } catch { Write-Host "Failed to authenticate to Microsoft Graph. Please check your credentials." -ForegroundColor Red return } # Ensure that the connection is valid before proceeding if (-not (Get-MgContext)) { Write-Host "Microsoft Graph connection is not active. Exiting script." -ForegroundColor Red return } ####################### CHECK CSV FILE ####################### if (-Not (Test-Path $csvFilePath)) { Write-Host "CSV file not found at $csvFilePath. Please check the path." -ForegroundColor Red return } # Import the CSV file $guestUsers = Import-Csv -Path $csvFilePath # Ensure the file contains users if ($guestUsers.Count -eq 0) { Write-Host "No users found in the CSV file. Exiting script." -ForegroundColor Yellow return } ####################### PROCESSING USERS ####################### foreach ($user in $guestUsers) { $formattedLastName = $user.LastName.ToUpper() # Convert last name to uppercase $formattedFirstName = Format-FirstName $user.FirstName # Properly format first name $displayName = "$formattedLastName $formattedFirstName" # Format as LASTNAME Firstname $email = $user.Email $mobilePhone = $user.MobilePhone $company = $user.Company # Check if the user already exists in Entra ID (Azure AD) $existingUser = Get-MgUser -Filter "mail eq '$email'" -ErrorAction SilentlyContinue if ($existingUser) { Write-Host "User $email already exists." -ForegroundColor Yellow continue } # Define guest user invitation properties $newGuestUser = @{ invitedUserDisplayName = $displayName invitedUserEmailAddress = $email invitedUserType = "Guest" sendInvitationMessage = $false # No email will be sent inviteRedirectUrl = "https://myapps.microsoft.com" # Default landing page for guests invitedUserMessageInfo = @{ customizedMessageBody = "You have been added as a guest user." } } # Create the guest user in Azure AD (Entra ID) try { $invitation = New-MgInvitation -BodyParameter $newGuestUser -ErrorAction Stop $guestUserId = $invitation.InvitedUser.Id # Get the new user's ID Write-Host "Guest user invited: $displayName ($email)" -ForegroundColor Green # Prepare update properties (only update if fields exist) $updateProperties = @{} $updateProperties["givenName"] = $formattedFirstName $updateProperties["surname"] = $formattedLastName $updateProperties["usageLocation"] = "BE" # Set default location to Belgium if ($mobilePhone) { $updateProperties["mobilePhone"] = $mobilePhone } if ($company) { $updateProperties["companyName"] = $company } # Update the guest user with additional details if ($updateProperties.Count -gt 0) { Update-MgUser -UserId $guestUserId -BodyParameter $updateProperties Write-Host "Updated guest user details for: $displayName ($email)" -ForegroundColor Cyan } } catch { Write-Host "Error inviting/updating $email : $_" -ForegroundColor Red } } Write-Host "Guest import process completed!" -ForegroundColor Cyan ####################### DISCONNECT FROM MICROSOFT GRAPH ####################### Disconnect-MgGraph Write-Host "Disconnected from Microsoft Graph." -ForegroundColor Magenta
Exécuter le script
1. Ouvrez PowerShell et accédez au dossier contenant le script:
cd C:\Scripts\
2. Exécutez le script:
.\GuestsImportScript.ps1
3. Authentifiez-vous à Microsoft Graph lorsque cela est demandé.
- Une fenêtre de connexion apparaîtra.
- Utilisez un compte disposant des autorisations User.Invite.All et User.ReadWrite.All.
Le script exécutera automatiquement les actions suivantes :
- Vérifier si chaque utilisateur invité existe déjà.
- Inviter les nouveaux utilisateurs sans envoyer d’e-mail d’invitation.
- Appliquer le formatage correct des noms (ex: « DUPONT Jean-Claude »).
- Ajouter les attributs supplémentaires (MobilePhone, Company, Emplacement d’utilisation).
Résultat attendu
Pendant l’exécution, PowerShell affichera des messages (en anglais) indiquant la progression:
- Guest user invited: DUPONT Jean-Claude (jean.claude@example.com)
- Updated guest user details (MobilePhone, Company, Usage Location)
- User alice.johnson@example.com already exists. (Skipped)
- Error inviting/updating user: user@example.com (If something fails)
Une fois le script terminé, tous les nouveaux utilisateurs invités seront ajoutés dans Microsoft Entra ID avec des profils enrichis.
Vérification des utilisateurs importés
1. Accédez au Centre d’administration Microsoft Entra
2. Consultez la liste des utilisateurs invités
- Accédez vers Utilisateurs > Identités externes
- Filtrez par Utilisateurs invités
3. Vérifiez les détails des utilisateurs
- Cliquez sur un utilisateur invité pour contrôler :
- Prénom & Nom (format correct)
- Téléphone mobile (si disponible)
- Nom de l’entreprise (si fourni)
- Emplacement d’utilisation (défini sur Belgique dans ce cas-ci)
Dépannage
1. Erreur : « Could not load file or assembly 'Microsoft.Graph.Authentication' »
Solution : Réinstallez le module Microsoft Graph :
Uninstall-Module Microsoft.Graph -AllVersions -Force Install-Module Microsoft.Graph -Scope AllUsers -Force
Redémarrez PowerShell et réessayez.
2. Erreur: « PipelineStoppedException: The pipeline has been stopped. »
Solution : Cela est généralement dû à un échec d’authentification. Vérifiez que votre compte dispose des autorisations requises.
4. Error: "CSV file not found."
Vérifiez que le fichier CSV existe bien à l’emplacement spécifié :
C:\Scripts\GuestsImport.csv
Conclusion
Ce script simplifie l’intégration des utilisateurs invités dans Microsoft Entra ID en garantissant :
- Un formatage cohérent des noms.
- L’attribution automatique d’attributs supplémentaires (téléphone, entreprise, emplacement).
- La prévention des doublons grâce à une vérification des utilisateurs existants.