Partager via


Approvisionnement entrant piloté par l’API avec un script PowerShell

Ce tutoriel explique comment utiliser un script PowerShell pour implémenter l’approvisionnement entrant piloté par API avec Microsoft Entra ID. Les étapes de ce tutoriel vous permettent de convertir un fichier CSV contenant des données RH dans la charge utile d’une requête en bloc et de l’envoyer au point de terminaison de l’API d’approvisionnement /bulkUpload de Microsoft Entra. L’article fournit également des conseils sur la façon dont le même modèle d’intégration peut être utilisé avec n’importe quel système d’enregistrement.

Scénario d’intégration

Exigence professionnelle

Votre système d’enregistrement génère régulièrement des exportations de fichiers CSV contenant des données worker. Vous souhaitez implémenter une intégration qui lit les données du fichier CSV et approvisionne automatiquement les comptes d’utilisateur dans votre répertoire cible (Active Directory local pour les utilisateurs hybrides et Microsoft Entra ID pour les utilisateurs cloud uniquement).

Conditions requises pour l’implémentation

Du point de vue de l’implémentation :

  • Vous souhaitez utiliser un script PowerShell sans assistance pour lire les données des exportations de fichiers CSV et les envoyer au point de terminaison de l’API d’approvisionnement entrant.
  • Dans votre script PowerShell, vous ne souhaitez pas implémenter la logique complexe de comparaison des données d’identité entre votre système d’enregistrement et le répertoire cible.
  • Vous souhaitez utiliser le service d’approvisionnement Microsoft Entra pour appliquer vos règles d’approvisionnement gérées par le service informatique afin de créer/mettre à jour/activer/désactiver automatiquement des comptes dans le répertoire cible (Active Directory local ou Microsoft Entra ID).

Graphic of PowerShell-based integration.

Variantes de scénario d’intégration

Bien que ce didacticiel utilise un fichier CSV comme système d’enregistrement, vous pouvez personnaliser l’exemple de script PowerShell pour lire les données de n’importe quel système d’enregistrement. Voici une liste de variantes de scénario d’intégration d’entreprise, où le provisionnement entrant piloté par les API peut être implémenté avec un script PowerShell.

# Système d’enregistrement Conseils d’intégration sur l’utilisation de PowerShell pour lire les données sources
1 Table de base de données Si vous utilisez une base de données Azure SQL ou SQL Server en local, vous pouvez utiliser le cmdlet Read-SqlTableData pour lire les données stockées dans une table d’une base de données SQL. Vous pouvez utiliser le cmdlet Invoke-SqlCmd pour exécuter des scripts Transact-SQL ou XQuery.
Si vous utilisez une base de données Oracle/MySQL/Postgres, vous trouverez un module PowerShell publié par le fournisseur ou disponible dans le PowerShell Gallery. Utilisez le module pour lire les données de votre table de base de données.
2 Serveur LDAP Utilisez l’API .NET System.DirectoryServices.Protocols ou l’un des modules LDAP disponibles dans le PowerShell Gallery pour interroger votre serveur LDAP. Comprendre le schéma et la hiérarchie LDAP pour récupérer des données utilisateur à partir du serveur LDAP.
3 Tout système qui expose des API REST Pour lire des données à partir d’un point de terminaison d’API REST à l’aide de PowerShell, vous pouvez utiliser le cmdlet Invoke-RestMethod à partir du module Microsoft.PowerShell.Utility. Consultez la documentation de votre API REST et découvrez quels paramètres et en-têtes elle attend, quel format elle retourne et quelle méthode d’authentification elle utilise. Vous pouvez ensuite ajuster votre commande Invoke-RestMethod en conséquence.
4 Tout système qui expose des API SOAP Pour lire des données à partir d’un point de terminaison d’API SOAP à l’aide de PowerShell, vous pouvez utiliser le cmdlet New-WebServiceProxy à partir du module Microsoft.PowerShell.Management. Consultez la documentation de votre API SOAP et découvrez quels paramètres et en-têtes elle attend, quel format elle retourne et quelle méthode d’authentification elle utilise. Vous pouvez ensuite ajuster votre commande New-WebServiceProxy en conséquence.

Après avoir lu les données sources, appliquez vos règles de prétraitement et convertissez la sortie de votre système d’enregistrement en une requête en bloc qui peut être envoyée au point de terminaison de l’API d’approvisionnement /bulkUpload de Microsoft Entra.

Important

Si vous souhaitez partager votre script d’intégration PowerShell avec la communauté, publiez-le sur le PowerShell Gallery et informez-nous sur le référentiel GitHub entra-id-inbound-provisioning, afin que nous puissions ajouter une référence.

Utilisation de ce didacticiel

L’exemple de script PowerShell publié dans le référentiel GitHub de l’approvisionnement entrant de Microsoft Entra inbound automatise plusieurs tâches. Il propose une logique de gestion des fichiers CSV volumineux et de segmentation de la requête en bloc en vue d’envoyer 50 enregistrements dans chaque requête. Voici comment le tester et le personnaliser en fonction de vos besoins d’intégration.

Notes

L’exemple de script PowerShell est fourni « en l’état » à des fins de référence d’implémentation. Si vous avez des questions ou des propositions d’amélioration concernant ce script, utilisez le référentiel de projets GitHub.

# Tâche d’automatisation Conseils d’implémentation Personnalisation avancée
1 Lire les données Worker depuis le fichier CSV. Téléchargez le script PowerShell. Il propose une logique prête à l’emploi permettant de lire les données de tous les fichiers CSV. Reportez-vous aux détails de l’utilisation du CSV2SCIM PowerShell pour vous familiariser avec les différents modes d’exécution du script. Si votre système d’enregistrement est différent, consultez les conseils fournis dans la section Variantes de scénario d’intégration sur la façon dont vous pouvez personnaliser le script PowerShell.
2 Prétraiter et convertir des données au format SCIM. Par défaut, le script PowerShell convertit chaque enregistrement du fichier CSV en une représentation des attributs SCIM Core User et Enterprise User. Suivez les étapes de la section Générer une charge utile de requête en bloc avec le schéma standard pour vous familiariser avec ce processus. Si votre fichier CSV comporte des champs différents, ajustez le fichier AttributeMapping.psd pour générer un utilisateur SCIM valide. Vous pouvez également générer une requête en bloc avec un schéma SCIM personnalisé. Mettez à jour le script PowerShell pour y inclure toute logique de validation de données CSV personnalisée.
3 Utiliser un certificat pour l’authentification auprès de Microsoft Entra ID. Créez un principal de service capable d’accéder à l’API d’approvisionnement entrant. Reportez-vous aux étapes de la section Configurer le certificat client pour l’authentification du principal de service pour savoir comment utiliser le certificat client à des fins d’authentification. Pour utiliser une identité managée à la place du principal de service à des fins d’authentification, examinez l’utilisation de Connect-MgGraph dans l’exemple de script et mettez-le à jour pour utiliser des identités managées.
4 Provisionner des comptes dans Active Directory local ou Microsoft Entra ID. Configurez l’application d’approvisionnement entrant pilotée par API. Cela génère un point de terminaison d'API /bulkUpload unique. Reportez-vous aux étapes de la section Générer et charger une charge utile de requête en bloc en tant qu’utilisateur administrateur pour savoir comment charger des données sur ce point de terminaison. Validez le flux d’attributs et personnalisez les mappages d’attributs en fonction des besoins d’intégration. Pour exécuter le script à l’aide d’un principal de service avec authentification par certificat, reportez-vous aux étapes de la section Charger une charge utile de requête en bloc avec l’authentification par certificat client. Si vous envisagez d’utiliser une requête en bloc avec un schéma SCIM personnalisé, étendez le schéma d’application d’approvisionnement pour y inclure vos éléments de schéma SCIM personnalisés.
5 Analysez les journaux d’approvisionnement et réessayez l’approvisionnement des enregistrements ayant échoué. Reportez-vous aux étapes de la section Obtenir les journaux d’approvisionnement des derniers cycles de synchronisation pour savoir comment extraire et analyser les données des journaux d’approvisionnement. Identifiez les enregistrements utilisateur ayant échoué et incluez-les dans le prochain cycle de chargement. -
6 Déployez votre automatisation basée sur PowerShell en production. Une fois que vous avez vérifié le flux d’approvisionnement piloté par les API et personnalisé le script PowerShell pour répondre à vos besoins, vous pouvez déployer l’automatisation en tant que runbook de workflow PowerShell dans Azure Automation ou en tant que processus serveur planifié pour s’exécuter sur un serveur Windows. -

Télécharger le script PowerShell

  1. Accédez au dépôt GitHub entra-id-inbound-provisioning.
  2. Utilisez l’option Code >Cloner ou Code >Télécharger le ZIP pour copier le contenu de ce dépôt dans votre dossier local.
  3. Accédez au dossier PowerShell/CSV2SCIM. Celui-ci comporte la structure de répertoire suivante :
    • src
      • CSV2SCIM.ps1 (script principal)
      • ScimSchemaRepresentations (dossier contenant les définitions de schéma SCIM standard permettant de valider les fichiers AttributeMapping.psd1)
        • EnterpriseUser.json, Group.json, Schema.json, User.json
    • Exemples
      • AttributeMapping.psd1 (exemple de mappage des colonnes d’un fichier CSV vers les attributs SCIM standard)
      • csv-with-2-records.csv (exemple de fichier CSV avec deux enregistrements)
      • csv-with-1000-records.csv (exemple de fichier CSV avec 1 000 enregistrements)
      • Test-ScriptCommands.ps1 (exemples de commandes d’utilisation)
      • UseClientCertificate.ps1 (script permettant de générer un certificat auto-signé et de le charger en tant qu’informations d’identification de principal de service à utiliser dans un flux OAuth)
      • Sample1 (dossier contenant d’autres exemples de mappage de colonnes de fichiers CSV vers des attributs SCIM standard. Si vous obtenez différents fichiers CSV pour les employés, les sous-traitants et les stagiaires, vous pouvez créer un fichier AttributeMapping.psd1 distinct pour chaque entité.)
  4. Téléchargez et installez la dernière version de PowerShell.
  5. Exécutez la commande suivante pour activer l’exécution de scripts signés à distance :
    set-executionpolicy remotesigned
    
  6. Installez les modules prérequis suivants :
    Install-Module -Name Microsoft.Graph.Applications,Microsoft.Graph.Reports
    

Générer une charge utile de requête en bloc avec un schéma standard

Cette section explique comment générer une charge utile de requête en bloc avec les attributs SCIM standard Core User et Enterprise User à partir d’un fichier CSV. Pour illustrer la procédure, nous allons utiliser le fichier CSV Samples/csv-with-2-records.csv.

  1. Ouvrez le fichier CSV Samples/csv-with-2-records.csv dans Notepad++ ou Excel pour vérifier les colonnes présentes dans le fichier. Screenshot of columns in Excel.

  2. Dans Notepad++ ou un éditeur de code source (comme Visual Studio Code), ouvrez le fichier de données PowerShell Samples/AttributeMapping.psd1 qui permet de mapper des colonnes de fichiers CSV vers des attributs de schéma SCIM standard. Le fichier prêt à l’emploi fourni comporte déjà un mappage préconfiguré des colonnes de fichiers CSV vers les attributs de schéma SCIM correspondants.

        @{
        externalId   = 'WorkerID'
        name         = @{
            familyName = 'LastName'
            givenName  = 'FirstName'
        }
        active       = { $_.'WorkerStatus' -eq 'Active' }
        userName     = 'UserID'
        displayName  = 'FullName'
        nickName     = 'UserID'
        userType     = 'WorkerType'
        title        = 'JobTitle'
        addresses    = @(
            @{
                type          = { 'work' }
                streetAddress = 'StreetAddress'
                locality      = 'City'
                postalCode    = 'ZipCode'
                country       = 'CountryCode'
            }
        )
        phoneNumbers = @(
            @{
                type  = { 'work' }
                value = 'OfficePhone'
            }
        )
        "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User" = @{
            employeeNumber = 'WorkerID'
            costCenter     = 'CostCenter'
            organization   = 'Company'
            division       = 'Division'
            department     = 'Department'
            manager        = @{
                value = 'ManagerID'
            }
        }
    }
    
  3. Ouvrez PowerShell et accédez au répertoire CSV2SCIM\src.

  4. Exécutez la commande ci-dessous pour initialiser la variable AttributeMapping.

    $AttributeMapping = Import-PowerShellDataFile '..\Samples\AttributeMapping.psd1'
    
  5. Exécutez la commande suivante pour vérifier si le fichier AttributeMapping a des attributs de schéma SCIM valides. Cette commande retourne la valeur True (Vrai) si la validation réussit.

    .\CSV2SCIM.ps1 -Path '..\Samples\csv-with-2-records.csv' -AttributeMapping $AttributeMapping -ValidateAttributeMapping
    
  6. Supposons que le fichier AttributeMapping a un attribut SCIM non valide appelé userId, et que le mode ValidateAttributeMapping affiche l’erreur ci-dessous.

    Screenshot of a mapping error.

  7. Une fois que vous avez vérifié que le fichier AttributeMapping est valide, exécutez la commande suivante pour générer une requête en bloc dans le fichier BulkRequestPayload.json qui inclut les deux enregistrements qui se trouvent dans le fichier CSV.

    .\CSV2SCIM.ps1 -Path '..\Samples\csv-with-2-records.csv' -AttributeMapping $AttributeMapping > BulkRequestPayload.json
    
  8. Vous pouvez ouvrir le contenu du fichier BulkRequestPayload.json pour vérifier si les attributs SCIM sont configurés conformément au mappage défini dans le fichier AttributeMapping.psd1.

  9. Vous pouvez publier le fichier généré ci-dessus « en l’état » sur le point de terminaison de l’API /bulkUpload associé à votre application d’approvisionnement avec Graph Explorer, Postman ou cURL. Référence :

  10. Pour charger directement la charge utile générée sur le point de terminaison d’API avec le même script PowerShell, consultez la section suivante.

Générer et charger une charge utile de requête en bloc en tant qu’utilisateur administrateur

Cette section explique comment envoyer une charge utile de requête en bloc générée vers le point de terminaison de l’API d’approvisionnement entrant.

  1. Connectez-vous au Centre d’administration Microsoft Entra au minimum en tant qu’Administrateur d’application.

  2. Accédez à Application d’approvisionnement>Propriétés>ID d’objet et copiez le ServicePrincipalId associé à votre application d’approvisionnement.

    Screenshot of the Object ID.

  3. En tant qu’utilisateur avec un rôle d’Administrateur général, exécutez la commande suivante en indiquant les bonnes valeurs pour ServicePrincipalId et TenantId. Si une session authentifiée n’existe pas déjà pour ce locataire, vous êtes invité à vous authentifier. Donnez votre consentement aux autorisations qui s’affichent lors de l’authentification.

    .\CSV2SCIM.ps1 -Path '..\Samples\csv-with-2-records.csv' -AttributeMapping $AttributeMapping -ServicePrincipalId <servicePrincipalId> -TenantId "contoso.onmicrosoft.com"
    
  4. Accédez au panneau Journaux d’approvisionnement de l’application d’approvisionnement pour vérifier le traitement de la requête ci-dessus.

Pour utiliser un certificat client à des fins d’authentification de principal de service :

Notes

Les instructions fournies ici décrivent comment générer un certificat auto-signé. Les certificats auto-signés ne sont pas approuvés par défaut et peuvent être difficiles à gérer. En outre, ils peuvent utiliser des suites de hachage et de chiffrement obsolètes qui peuvent ne pas être fortes. Pour une meilleure sécurité, achetez un certificat signé par une autorité de certification connue.

  1. Exécutez le script PowerShell suivant pour générer un certificat auto-signé. Vous pouvez ignorer cette étape si vous avez acheté un certificat signé par une autorité de certification reconnue.
    $ClientCertificate = New-SelfSignedCertificate -Subject 'CN=CSV2SCIM' -KeyExportPolicy 'NonExportable' -CertStoreLocation Cert:\CurrentUser\My
    $ThumbPrint = $ClientCertificate.ThumbPrint
    
    Le certificat généré est stocké dans Current User\Personal\Certificates. Vous pouvez l’afficher avec l’option Panneau de configuration >Gérer les certificats utilisateur.
  2. Pour associer ce certificat à un principal de service valide, connectez-vous à votre centre d’administration Microsoft Entra en tant qu’Administrateur d’application.
  3. Ouvrez le principal de service que vous avez configuré sous Inscriptions d’applications.
  4. Copiez l’ID d’objet du panneau Vue d’ensemble. Utilisez cette valeur pour remplacer la chaîne <AppObjectId>. Copiez l’ID d’application (client). Nous allons l’utiliser ultérieurement ; il est référencé comme <AppClientId>.
  5. Exécutez la commande suivante pour charger votre certificat sur le principal de service inscrit.
    Connect-MgGraph -Scopes "Application.ReadWrite.All"
    Update-MgApplication -ApplicationId '<AppObjectId>' -KeyCredentials @{
       Type = "AsymmetricX509Cert"
       Usage = "Verify"
       Key = $ClientCertificate.RawData
    }
    
    Le certificat doit apparaître sous le panneau Certificats et secrets de l’application inscrite. Screenshot of client certificate.
  6. Ajoutez les deux étendues d’autorisation Application suivantes à l’application du principal de service : Application.Read.All et Synchronization.Read.All. Ces éléments sont requis pour que le script PowerShell recherche l’application d’approvisionnement par ServicePrincipalId et récupère le provisionnement JobId.

Charger une charge utile de requête en bloc avec l’authentification par certificat client

Cette section explique comment envoyer une charge utile de requête en bloc générée vers le point de terminaison de l’API d’approvisionnement entrant.

  1. Ouvrez l’application d’approvisionnement piloté par API que vous avez configurée. Copiez le ServicePrincipalId associé à votre application d’approvisionnement depuis Application d’approvisionnement >Propriétés >ID d’objet.

    Screenshot of the Object ID.

  2. Exécutez la commande suivante en indiquant les bonnes valeurs pour ServicePrincipalId, ClientId et TenantId.

    $ClientCertificate = Get-ChildItem -Path cert:\CurrentUser\my\ | Where-Object {$_.Subject -eq "CN=CSV2SCIM"}  
    $ThumbPrint = $ClientCertificate.ThumbPrint
    
    .\CSV2SCIM.ps1 -Path '..\Samples\csv-with-2-records.csv' -AttributeMapping $AttributeMapping -TenantId "contoso.onmicrosoft.com" -ServicePrincipalId "<ProvisioningAppObjectId>" -ClientId "<AppClientId>" -ClientCertificate (Get-ChildItem Cert:\CurrentUser\My\$ThumbPrint)
    
  3. Accédez au panneau Journaux d’approvisionnement de l’application d’approvisionnement pour vérifier le traitement de la requête ci-dessus.

Générer une requête en bloc avec un schéma SCIM personnalisé

Cette section explique comment générer une requête en bloc avec un espace de noms de schéma SCIM personnalisé composé de champs dans le fichier CSV.

  1. Dans Notepad++ ou un éditeur de code source (comme Visual Studio Code), ouvrez le fichier de données PowerShell Samples/AttributeMapping.psd1 qui permet de mapper des colonnes de fichiers CSV vers des attributs de schéma SCIM standard. Le fichier prêt à l’emploi fourni comporte déjà un mappage préconfiguré des colonnes de fichiers CSV vers les attributs de schéma SCIM correspondants.

  2. Ouvrez PowerShell et accédez au répertoire CSV2SCIM\src.

  3. Exécutez la commande ci-dessous pour initialiser la variable AttributeMapping.

    $AttributeMapping = Import-PowerShellDataFile '..\Samples\AttributeMapping.psd1'
    
  4. Exécutez la commande suivante pour vérifier si le fichier AttributeMapping a des attributs de schéma SCIM valides. Cette commande retourne la valeur True (Vrai) si la validation réussit.

    .\CSV2SCIM.ps1 -Path '..\Samples\csv-with-2-records.csv' -AttributeMapping $AttributeMapping -ValidateAttributeMapping
    
  5. En plus des attributs SCIM Core User et Enterprise User, exécutez la commande suivante pour obtenir une liste plate de tous les champs CSV sous un espace de noms de schéma SCIM personnalisé urn:ietf:params:scim:schemas:extension:contoso:1.0:User.

     .\CSV2SCIM.ps1 -Path '..\Samples\csv-with-2-records.csv' -AttributeMapping $AttributeMapping -ScimSchemaNamespace "urn:ietf:params:scim:schemas:extension:contoso:1.0:User"  > BulkRequestPayloadWithCustomNamespace.json
    

    Les champs CSV s’affichent sous l’espace de noms de schéma SCIM personnalisé. Screenshot of user details under custom schema.

Étendre le schéma de la tâche d’approvisionnement

En général, le fichier de données envoyé par les équipes RH contient davantage d’attributs qui n’ont pas de représentation directe dans le schéma SCIM standard. Pour représenter ces attributs, nous recommandons de créer un schéma d’extension SCIM et d’ajouter les attributs sous cet espace de noms.

Le script CSV2SCIM fournit un mode d’exécution appelé UpdateSchema qui lit toutes les colonnes du fichier CSV, les ajoute sous un espace de noms de schéma d’extension et met à jour le schéma de l’application d’approvisionnement.

Notes

Si le schéma de l’application d’approvisionnement comporte déjà des extensions d’attribut, ce mode émet uniquement un avertissement indiquant que l’extension d’attribut existe déjà. Par conséquent, l’exécution du script CSV2SCIM en mode UpdateSchema ne rencontre aucun problème si de nouveaux champs sont ajoutés au fichier CSV et que vous souhaitez les ajouter en tant qu’extension.

Pour illustrer la procédure, nous allons utiliser le fichier CSV Samples/csv-with-2-records.csv présent dans le dossier CSV2SCIM.

  1. Ouvrez le fichier CSV Samples/csv-with-2-records.csv dans Notepad, Excel ou TextPad pour vérifier les colonnes présentes dans le fichier.

    Screenshot of how to check CSV columns.

  2. Exécutez la commande suivante :

    .\CSV2SCIM.ps1 -Path '..\Samples\csv-with-2-records.csv' -UpdateSchema -ServicePrincipalId <servicePrincipalId> -TenantId "contoso.onmicrosoft.com" -ScimSchemaNamespace "urn:ietf:params:scim:schemas:extension:contoso:1.0:User"
    
  3. Pour vérifier la mise à jour du schéma de l’application d’approvisionnement, ouvrez la page Mappage d’attributs et accédez à l’option Modifier la liste d’attributs pour l’API sous Options avancées.

  4. La Liste d’attributs affiche les attributs sous le nouvel espace de noms.

Obtenir les journaux d’approvisionnement des derniers cycles de synchronisation

Après avoir envoyé la requête en bloc, vous pouvez interroger les journaux des derniers cycles de synchronisation traités par Microsoft Entra ID. Vous pouvez utiliser le script PowerShell pour récupérer les statistiques de synchronisation et les informations de traitement, puis les enregistrer à des fins d’analyse.

  1. Pour afficher les informations des journaux et synchroniser les statistiques sur la console, exécutez la commande suivante :

    .\CSV2SCIM.ps1 -ServicePrincipalId <servicePrincipalId> -TenantId "contoso.onmicrosoft.com" -GetPreviousCycleLogs -NumberOfCycles 1
    

    Screenshot of sync statistics.

    Remarque

    Par défaut, NumberOfCycles est de 1. Indiquez un autre nombre pour récupérer plus de cycles de synchronisation.

  2. Pour afficher les statistiques de synchronisation sur la console et enregistrer les informations des journaux dans une variable, exécutez la commande suivante :

    $logs=.\CSV2SCIM.ps1 -ServicePrincipalId <servicePrincipalId> -TenantId "contoso.onmicrosoft.com" -GetPreviousCycleLogs
    

    Pour exécuter la commande avec l’authentification par certificat client, exécutez la commande en indiquant les bonnes valeurs pour ServicePrincipalId, ClientId et TenantId :

    $ClientCertificate = Get-ChildItem -Path cert:\CurrentUser\my\ | Where-Object {$_.Subject -eq "CN=CSV2SCIM"}  
    $ThumbPrint = $ClientCertificate.ThumbPrint
    
    $logs=.\CSV2SCIM.ps1 -ServicePrincipalId "<ProvisioningAppObjectId>" -TenantId "contoso.onmicrosoft.com" -ClientId "<AppClientId>" -ClientCertificate (Get-ChildItem Cert:\CurrentUser\My\$ThumbPrint) -GetPreviousCycleLogs -NumberOfCycles 1
    
    • Pour afficher les informations d’un enregistrement donné, vous pouvez effectuer une boucle dans la collection ou sélectionner un index propre à celui-ci, comme : $logs[0]

      Screenshot of a selected index.

    • Nous pouvons également utiliser l’instruction where-object pour rechercher un enregistrement spécifique avec sourceID ou DisplayName. Dans la propriété ProvisioningLogs, nous pouvons trouver tous les détails de l’opération effectuée pour cet enregistrement.

      $user = $logs | where sourceId -eq '1222'
      $user.ProvisioningLogs | fl
      

      Screenshot of provisioning logs.

    • Vous pouvez connaître les propriétés affectées par un utilisateur donné sur l’attribut ModifiedProperties. $user.ProvisioningLogs.ModifiedProperties

      Screenshot of properties.

Annexe

Informations sur l’utilisation de CSV2SCIM PowerShell

Voici une liste des paramètres de ligne de commande acceptés par le script CSV2SCIM PowerShell.

PS > CSV2SCIM.ps1 -Path <path-to-csv-file> 
[-ScimSchemaNamespace <customSCIMSchemaNamespace>] 
[-AttributeMapping $AttributeMapping] 
[-ServicePrincipalId <spn-guid>] 
[-ValidateAttributeMapping]
[-UpdateSchema]
[-ClientId <client-id>]
[-ClientCertificate <certificate-object>]
[-RestartService]

Notes

Les paramètres de ligne de commande AttributeMapping et ValidateAttributeMapping font référence au mappage d’attributs des colonnes CSV vers les éléments de schéma SCIM standard. Ils ne renvoient pas aux mappages d’attributs réalisés dans l’application d’approvisionnement du centre d’administration Entra entre les éléments de schéma SCIM sources et les attributs cibles Microsoft Entra / Active Directory local.

Paramètre Description Traitement des remarques
Chemin d’accès Chemin d’accès complet ou relatif du fichier CSV. Par exemple : .\Samples\csv-with-1000-records.csv Obligatoire : oui
ScimSchemaNamespace Espace de noms de schéma SCIM personnalisé à utiliser pour envoyer toutes les colonnes du fichier CSV en tant qu’attributs SCIM personnalisés appartenant à un espace de noms spécifique. Par exemple : urn:ietf:params:scim:schemas:extension:csv:1.0:User Obligatoire : uniquement lorsque vous souhaitez :
- Mettre à jour le schéma de l’application d’approvisionnement ou
- Inclure des attributs SCIM personnalisés dans une charge utile.
AttributeMapping Pointe vers un fichier de données PowerShell (extension .psd1) qui mappe les colonnes du fichier CSV vers les attributs SCIM Core User et Enterprise User.
Consultez l’exemple : fichier AttributeMapping.psd pour le script CSV2SCIM.
Par exemple : powershell $AttributeMapping = Import-PowerShellDataFile '.\Samples\AttributeMapping.psd1'`-AttributeMapping $AttributeMapping
Obligatoire : oui
Le seul scénario pour lequel vous n’avez pas besoin de le spécifier est celui d’utilisation du commutateur UpdateSchema.
ValidateAttributeMapping Utilisez cet indicateur de commutateur pour vérifier que le fichier AttributeMapping contient des attributs conformes au schéma SCIM Core User et Enterprise User. Obligatoire : non
Il est recommandé de l’utiliser pour garantir la conformité.
ServicePrincipalId Valeur GUID de l’ID de principal de service de l’application d’approvisionnement que vous pouvez récupérer depuis Application d’approvisionnement >Propriétés >ID d’objet. Obligatoire : uniquement lorsque vous souhaitez :
- Mettre à jour le schéma de l’application d’approvisionnement ou
- Envoyer la requête en bloc générée au point de terminaison d’API.
UpdateSchema Utilisez ce commutateur pour indiquer au script de lire les colonnes CSV et de les ajouter en tant qu’attributs SCIM personnalisés dans le schéma de l’application d’approvisionnement.
ClientId ID client d’une application Microsoft Entra inscrite à utiliser avec un flux d’authentification OAuth. Cette application doit comporter des informations d’identification de certificat valides. Obligatoire : uniquement lors de l’authentification par certificats.
ClientCertificate Certificat d’authentification client à utiliser avec un flux OAuth. Obligatoire : uniquement lors de l’authentification par certificats.
GetPreviousCycleLogs Permet d’obtenir les journaux d’approvisionnement des derniers cycles de synchronisation.
NumberOfCycles Permet de définir le nombre de cycles de synchronisation à récupérer. Par défaut, cette valeur est définie sur 1.
RestartService Avec cette option, le script suspend temporairement la tâche d’approvisionnement en amont du chargement de données, charge les données, puis redémarre la tâche pour garantir le traitement immédiat de la charge utile. N’utilisez cette option que pendant les tests.

Fichier AttributeMapping.psd

Ce fichier est utilisé pour mapper les colonnes du fichier CSV vers les éléments de schéma d’attributs standard Core User et Enterprise User. Le fichier génère également une représentation appropriée du contenu du fichier CSV en tant que charge utile de requête en bloc.

Dans l’exemple suivant, nous avons mappé les colonnes de fichier CSV suivantes vers les attributs SCIM Core User et Enterprise User équivalents.

Screenshot of CSV columns for mapped attributes.

    @{
    externalId   = 'WorkerID'
    name         = @{
        familyName = 'LastName'
        givenName  = 'FirstName'
    }
    active       = { $_.'WorkerStatus' -eq 'Active' }
    userName     = 'UserID'
    displayName  = 'FullName'
    nickName     = 'UserID'
    userType     = 'WorkerType'
    title        = 'JobTitle'
    addresses    = @(
        @{
            type          = { 'work' }
            streetAddress = 'StreetAddress'
            locality      = 'City'
            postalCode    = 'ZipCode'
            country       = 'CountryCode'
        }
    )
    phoneNumbers = @(
        @{
            type  = { 'work' }
            value = 'OfficePhone'
        }
    )
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User" = @{
        employeeNumber = 'WorkerID'
        costCenter     = 'CostCenter'
        organization   = 'Company'
        division       = 'Division'
        department     = 'Department'
        manager        = @{
            value = 'ManagerID'
        }
    }
}

Étapes suivantes