Se rendre au contenu

Importer des utilisateurs invités dans Microsoft Entra ID (Azure AD)

4 juillet 2025 par
Importer des utilisateurs invités dans Microsoft Entra ID (Azure AD)
HOFF Steven
| Aucun commentaire pour l'instant

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​LastNameEmailMobilePhoneCompany
JohnDupontjohn.dupont@example.com+33612345678Example Corp
Jane​Smithjane.smith@example.com+447987654321Tech Solutions
AliceJohnsonalice.johnson@example.com+491579876543Innovate Ltd
BobBrownbob.brown@example.com Softworks Inc.
CharlieDavischarlie.davis@example.com+11234567890FutureTech

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:

  1. Guest user invited: DUPONT Jean-Claude (jean.claude@example.com)
  2. Updated guest user details (MobilePhone, Company, Usage Location)
  3. User alice.johnson@example.com already exists. (Skipped)
  4. 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.

Importer des utilisateurs invités dans Microsoft Entra ID (Azure AD)
HOFF Steven 4 juillet 2025
Partager cet article
ARCHIVE
Se connecter pour laisser un commentaire.