Synchronisation des utilisateurs avec Azure AD/Active Directory

Cet article est disponible sous forme de vidéo ainsi que sous forme d'article écrit contenant plus de détails.
Note : en raison de changements dans le module PowerShell, certaines parties de la vidéo sont obsolètes. La vidéo peut toujours être utilisée comme référence. Le code de cet article est à jour.

La synchronisation Azure AD / Active Directory est capable de créer, de mettre à jour et de désactiver automatiquement des utilisateurs à partir d'Azure AD ou d'Active Directory.

Nous avons créé le module PowerShell 'BrightBookingUserAdminTools', qui gère cette logique. En créant une tâche (planifiée) avec les bonnes commandes PowerShell, vous pouvez envoyer régulièrement ces informations à GoBright depuis votre serveur.

Remarque : GoBright ne reçoit des données que par l'intermédiaire de BrightBookingUserAdminTools. GoBright n'est pas autorisé à renvoyer des données à Azure AD / Active Directory.

GoBright en tant qu'application d'entreprise dans Azure AD

Avant de poursuivre la section ci-dessous, nous aimerions préciser que vous pouvez configurer GoBright comme une application d'entreprise dans Azure AD. Cela vous permettra de créer/mettre à jour les utilisateurs de la plateforme automatiquement et d'activer le SSO facilement. Nous vous recommandons vivement de suivre les étapes de l'article ci-dessous avant de poursuivre : GoBright en tant qu'application d'entreprise (Azure AD)

Introduction

La logique d'intégration est disponible en tant que module PowerShell, via PowerShellGallery, sous le nom de 'BrightBookingUserAdminTools'.

Le module PowerShell 'BrightBookingUserAdminTools' doit être installé sur une machine (serveur) de votre domaine.

Une fois configuré, il suit les étapes suivantes, à chaque fois qu'il s'exécute :

  1. Obtenez les utilisateurs d'Azure AD ou d'Active Directory, filtrés selon vos préférences, par exemple, filtrés par appartenance à un groupe.
  2. Ces utilisateurs sont envoyés à GoBright et sont immédiatement créés ou mis à jour.
  3. Si l'utilisateur est désactivé dans Azure AD ou Active Directory, il sera également désactivé dans GoBright
  4. Les utilisateurs qui ne sont pas lus dans Azure AD ou Active Directory ne sont pas non plus mis à jour dans le fichier GoBright

Suivez les étapes ci-dessous pour installer et configurer l'intégration !

Étape 1

Installer les prérequis

Le module BrightBookingUserAdminTools a les dépendances suivantes :

  • PowerShell version 5 ou supérieure
  • Les modules PowerShell suivants :
    • Galerie PowerShell
    • ActiveDirectory
    • Azure AD
  • La machine (serveur) doit être liée à votre domaine Windows.

Veuillez suivre les étapes suivantes pour installer les dépendances :

  1. Connectez-vous à la machine (serveur) sur laquelle vous voulez installer la tâche. (cette machine doit être liée au domaine Windows).
  2. Lancez PowerShell sur cette machine, en tant qu'"administrateur" :
    clip0001-279x300.jpg
  3. Vérifiez si PowerShell 5 est installé :
    • Exécutez la commande suivante :
      $PSVersionTable.PSVersion
    • Dans le résultat que vous obtenez, le "Major" doit être égal ou supérieur à "5".
    • Si le 'Majorest inférieur à5', suivez les étapes suivantes :
      • Installer Windows Management Framework 5 (cela inclut PowerShell 5) :
        Télécharger Windows Management Framework 5
      • Note 1 : si vous obtenez l'erreur "La mise à jour n'est pas applicable à votre ordinateur", vous avez probablement sélectionné le mauvais téléchargement, veuillez vous référer à cet article.
      • Note 2 : Windows Management Framework 5 dépend de .NET Framework 4.5.
      • Note 3 : Un redémarrage est probablement nécessaire.
      • Après l'installation, veuillez vérifier si le 'Majorest5ou plus :
        $PSVersionTable.PSVersion
  4. Politique d'exécution PowerShell (facultatif)
    • Définir la politique d'exécution PowerShell comme étant non restreinte
      • Set-ExecutionPolicy -ExecutionPolicy Unrestricted
  5. Installez le module PowerShellGallery PowerShell :
    • Exécutez les commandes suivantes dans PowerShell (en tant qu'administrateur)
    • Installez le NuGet PackageProvider :
      Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
    • Configurez PowerShellGallery comme une source de confiance :
      Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
    • Installez le module PowerShellGet :
      Import-Module -Name PowerShellGet
  6. Si vous voulez vous synchroniser avec Active Directory: Installer le module ActiveDirectory PowerShell :
  7. Si vous voulez vous synchroniser avec Azure AD: Installer le module Microsoft.Graph PowerShell :
    • Exécutez les commandes suivantes dans PowerShell (en tant qu'administrateur)
    • Note : .Net Framework 4.7.2 ou supérieur est requis, pour plus de documentation voir : https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation?view=graph-powershell-1.0
    • Installez les modules Microsoft.Graph applicables :
      Install-Module Microsoft.Graph.Applications -Force Install-Module Microsoft.Graph.Users -Force Install-Module Microsoft.Graph.Groups -Force Install-Module Microsoft.Graph.Identity.DirectoryManagement -Force

Étape 2

Installation/mise à jour du module de synchronisation

Installez ou mettez à jour le module PowerShell BrightBookingUserAdminTools :

Install-Module -Name BrightBookingUserAdminTools -Force

La commande '-Force' permet de s'assurer que la dernière version du module est installée même si une installation antérieure existe. Si le module était déjà installé, la session PowerShell devra être redémarrée.

Étape 3

Configuration : obtenir l'URL et la clé de l'API

Pour pouvoir synchroniser les utilisateurs, vous devez obtenir les informations suivantes dans le portail GoBright :

  • L'URL de l'API et la clé de l'API
  • Le nom de l'intégration qui doit être liée aux utilisateurs.

Suivez ces étapes pour trouver l'URL de l'API et la clé de l'API :

  • Connectez-vous avec un compte de gestionnaire sur le portail GoBright .
  • Allez dans le centre d'administration > Intégrations > Accès API
  • Générez une clé API en cliquant sur le bouton "Ajouter". Choisissez le type "manager" et entrez une description pour une référence ultérieure.
    • Remarque : veillez à sauvegarder la clé API, car il n'y a aucun moyen de la récupérer.
  • L'URL de l'API est l'URL de votre environnement GoBright qui se trouve dans la barre d'URL de votre navigateur et sous Centre d'administration > Intégrations > Accès API: API url https://[tenant-id].gobright.cloud/

Suivez ces étapes pour trouver le nom de l'intégration :

  • Connectez-vous avec un compte de gestionnaire sur le portail GoBright .
  • Allez dans le centre d'administration > Intégrations
  • Copiez le nom de l'intégration (Exchange/Office 365) qui doit être utilisée pour relier les utilisateurs à la base de données.

Le nom de l'intégration, l'URL de l'API et la clé de l'API sont nécessaires dans les étapes suivantes.

Étape 4

Configurer le script PowerShell de synchronisation

Dans la dernière étape, vous construirez le script réel pour indiquer au module PowerShell GoBright les utilisateurs que vous souhaitez obtenir et pousser vers votre environnement GoBright . Ceci peut être fait avec Azure AD ou Active Directory.

La plateforme GoBright impose une communication utilisant TLS 1.2. Selon le système que vous utilisez, cela peut ne pas se faire automatiquement. Consultez le code ci-dessous et implémentez-le dans chaque script PowerShell qui communique avec GoBright.

Ajoutez également la préférence $ErrorActionPreference pour vous assurer que le script s'arrête dès qu'une erreur se produit. N'oubliez pas d'ajouter les lignes ci-dessous dans chacun de vos scripts.

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 
$ErrorActionPreference = "Stop"

Choisissez ci-dessous l'une des explications du scénario qui s'applique à votre situation.

Script pour la synchronisation d'Azure AD à l'aide du module Microsoft.Graph

Étape 4.1 : Se connecter à Azure AD

Lancez PowerShell et connectez-vous à Azure AD via la commande :

Connect-MgGraph -Scopes 'User.Read.All','Group.Read.All','GroupMember.Read.All'

Étape 4.2 : tester la sélection des utilisateurs

Vous trouverez ci-dessous plusieurs exemples de commandes, que vous pouvez adapter à votre situation.

Ces commandes ne mettront pas encore à jour les utilisateurs dans GoBright, car elles incluent le paramètre '-WhatIf'.

Exemple de commandes de synchronisation :

Traitez les utilisateurs et ajoutez les rôles d'utilisateur dans GoBright en fonction de leur appartenance à un groupe dans Azure AD :

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $ErrorActionPreference = "Stop" Connect-MgGraph -Scopes 'User.Read.All','Group.Read.All','GroupMember.Read.All' $includedGroups = @()
$includedGroups += '[your AzureAD groupname_1 here]' $includedGroups += '[your AzureAD groupname_2 here]'

# get the list of userid's in the group $groups = Get-MgGroup -All | Where-Object { $includedGroups -contains $_.DisplayName } $users_in_groups_userids = @(); Foreach ($group in $groups) { $groupMembers = Get-MgGroupMember -All -GroupID $group.id Foreach ($groupMember in $groupMembers) { $users_in_groups_userids += $groupMember.Id } } # get the required details of those users $users_full_list = Get-MgUser -All -Select Id,DisplayName,Mail,UserPrincipalName,AccountEnabled,MobilePhone,AssignedLicenses $users = $users_full_list | Where-Object { $users_in_groups_userids -contains $_.Id } Write-Output "Loaded from AzureAD: $(($users | Measure-Object).Count) users" # define the mapping of groups to roles $groupToRoleMapping = @()
$groupToRoleMapping += @ # match specific users that belong to a group for Meet-Work-Visit
$groupToRoleMapping += @ # match specific users that belong to a group for Meet-Work-Visit
$groupToRoleMapping += @ # match specific users that belong to a group for Meet-Work-Visit
$groupToRoleMapping += @ # match specific users that belong to a group for View

$groupToRoleMapping += @ # **special case** this line matches for every user, because of the 'MatchType', and is needed when you want to have a generic role for every user

$roleNameDefaultIfNoGroupMatched = "Regular user"


$users | Push-AzureADUsersToBB -DeactivateExistingUsersInSameIntegrationThatAreNotLoaded -UserDefaultRoleName $roleNameDefaultIfNoGroupMatched -GroupUserRoleMapping $groupToRoleMapping -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]' -WhatIf

Paramètres disponibles pour Push-AzureADUsersToBB

Vous pouvez utiliser les paramètres suivants dans la commande 'Push-AzureADUsersToBB' :

-ADUserSpecificUsername UserPrincipalName
(optionnel)

Par défaut, l'utilisateur s'authentifie avec l'adresse électronique principale de l'utilisateur sur le serveur Microsoft Exchange ou Office365.

Indiquez cette valeur pour utiliser une méthode différente d'authentification de l'utilisateur auprès du serveur Microsoft Exchange ou Office365 :
UserPrincipalName pour utiliser l'UPN

-ADUserPincodePropertyName
(facultatif)

Indiquez le nom d'un champ d'Active Directory que vous souhaitez utiliser comme "code postal" (il doit être numérique, comporter au moins 4 chiffres et être unique).

-ADUserMobilePropertyName
(facultatif)

Spécifiez le nom d'un champ dans Active Directory que vous voulez utiliser pour obtenir le numéro de téléphone mobile des utilisateurs (par exemple pour la notification de la réception numérique)
Utilisera le champ standard 'Mobile' par défaut.

-ADUserNFCIdPropertyName
(facultatif)

Indiquez le nom d'un champ dans Active Directory que vous voulez utiliser pour obtenir l'identifiant NFC pour cet utilisateur.
Veuillez noter qu'il doit être au format HEX, par exemple XX:XX:XX:XX:XX:XX:XX .

-ADUserDefaultCostCenterId OrNamePropertyName
(facultatif)

Spécifiez le nom d'un champ dans Active Directory que vous voulez utiliser pour définir le centre de coûts par défaut pour cet utilisateur. Vous pouvez spécifier le nom ou l'id ('guid') du centre de coûts, le nom étant le plus couramment utilisé.

-GroupUserRoleMapping

Ce paramètre vous donne la possibilité d'attribuer un rôle à un utilisateur dans la plate-forme, en fonction de l'appartenance à un groupe dans Azure AD.
Vous devez fournir une table de hachage (une liste clé+valeur), où la clé est le FQN complet du groupe et la valeur est le nom du rôle dans la plate-forme.

Voir l'exemple ci-dessous.

-UserRoleNameForNewUsers
(facultatif)

Nom facultatif d'un rôle existant dans le portail à utiliser lorsque de nouveaux utilisateurs sont créés par cette synchronisation.

-DeactivateExistingUsersIn
SameIntegrationThatAreNotLoaded
(facultatif)

Commutateur facultatif permettant de désactiver automatiquement les utilisateurs qui ne font plus partie des utilisateurs sélectionnés dans ActiveDirectory, mais qui existent toujours dans le portail.
Utilisez ce commutateur pour les désactiver automatiquement.
Seuls les utilisateurs de la même intégration sont pris en compte (voir paramètre : BrightBookingIntegrationName).

-IncludeUsersWithoutAzureAD
AssignedLicensesOrAssignedPlans

Inclure les utilisateurs qui n'ont pas de licences Azure AD attribuées (qui seraient autrement incluses comme inactives) ou de plans Azure AD attribués (qui seraient autrement totalement exclus). Notez que l'inclusion de ces utilisateurs peut entraîner l'apparition d'"utilisateurs" involontaires tels que des comptes de service, des utilisateurs de boîtes aux lettres, etc. Cela peut être atténué en filtrant les utilisateurs avant de les introduire dans cette commande.

-BrightBookingApiUrl
(obligatoire)
L'url de l'API, comme indiqué à l'étape 3.
-BrightBookingApiKey
(obligatoire)
L'url de l'API, comme indiqué à l'étape 3.
-BrightBookingIntegrationName
(obligatoire)
L'url de l'API, comme indiqué à l'étape 3.
-WhatIf
(facultatif)
Utilisez le paramètre '-WhatIf' pour tester et voir, mais pas pour envoyer des données à votre environnement GoBright .

Étape 4.2 : Exécuter la synchronisation réelle

Une fois que la liste des utilisateurs est correctement filtrée, vous pouvez exécuter la synchronisation réelle en supprimant le paramètre '-WhatIf'.

Exécutez maintenant la même commande, mais sans '-WhatIf' et elle traitera les utilisateurs dans votre environnement GoBright .

Étape 4.3 : Planifiez l'intégration pour qu'elle s'exécute périodiquement via le planificateur de tâches de Windows.

Pour pouvoir exécuter le script sans surveillance, vous devez vous connecter automatiquement d'une manière ou d'une autre.
La manière conseillée d'utiliser la connexion sans surveillance est d'utiliser des certificats, via l'enregistrement de l'application dans Azure AD :

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $ErrorActionPreference = "Stop"



#This script will create een enterprise app with a local certificate for unattended authorisation.
#Set the enterprise app name $AppName = "GoBright_UserSync_UnattendedLogin" $ErrorActionPreference = "Stop" #Connect with the graph to be able to create or update the application Connect-MgGraph -Scopes "Application.Read.All","Application.ReadWrite.All" #Get the tenantid $organization = Get-MgOrganization $APPTenantID = $organization.Id #Create or update the enterprise app $foundApps = Get-MgApplication | Where-Object {$_.DisplayName -eq $AppName} $foundAppsCount = $foundApps | Measure-Object if ($foundAppsCount.Count -eq 0) { # create the app $App = New-MgApplication -DisplayName $AppName $APPObjectID = $App.Id $APPClientID = $App.AppId } Else { $APPObjectID = $foundApps.Id $APPClientID = $foundApps.AppId } #Create a local self-signed certificate to use it as credential for the enterprise app $foundCerts = Get-ChildItem -Path cert:CurrentUsermy | Where-Object { $_.Subject -eq "CN=$($AppName)" } $foundCertsCount = $foundCerts | Measure-Object If ($foundCertsCount.Count -eq 0) { # create self-signed cert $thumb = (New-SelfSignedCertificate -CertStoreLocation Cert:CurrentUserMy -subject $AppName -KeyExportPolicy Exportable -NotAfter (Get-Date).AddYears(20) -Type CodeSigningCert -KeySpec Signature).Thumbprint $foundCerts = Get-ChildItem -Path cert:CurrentUsermy$thumb $cert = $foundCerts[0] } Else { $cert = $foundCerts[0] } #Create a keyCredential from the certificate for the enterprise app $keyCreds = @{ Type = "AsymmetricX509Cert"; Usage = "Verify"; key = $cert.RawData } try { #Set credentials Update-MgApplication -ApplicationId $APPObjectID -KeyCredentials $keyCreds #Set permission scopes, needs to go via id, see: https://learn.microsoft.com/en-us/graph/permissions-reference #'User.Read.All' = df021288-bdef-4463-88db-98f22de89214 #'Group.Read.All' = 5b567255-7703-4780-807c-7be8301ae99b #'GroupMember.Read.All' = 98830695-27a2-44f7-8c18-0c3ebc9698f6 $params = @{ RequiredResourceAccess = @( @{ ResourceAppId = "00000003-0000-0000-c000-000000000000" ResourceAccess = @( @{ Id = "df021288-bdef-4463-88db-98f22de89214" Type = "Role" }, @{ Id = "5b567255-7703-4780-807c-7be8301ae99b" Type = "Role" }, @{ Id = "98830695-27a2-44f7-8c18-0c3ebc9698f6" Type = "Role" } ) } )} Update-MgApplication -ApplicationId $APPObjectID -BodyParameter $params } catch { Write-Error $Error[0] } #Output details and request the admin to check the consent
Write-Output "App registration '$($AppName)' is now available, please use following details in the user sync script:"
Write-Output " - ClientId: $($APPClientID)"
Write-Output " - TenantId: $($APPTenantID)"
Write-Output " - CertificateThumbprint: $($cert.Thumbprint)"
Write-Output "NOTE: Please give admin consent in the AzureAD portal to this app!"

Consentement de l'administrateur dans AzureAD

Allez sur le portail Azure et ouvrez l'application d'entreprise créée pour la connexion sans surveillance et sélectionnez API permission > Grant admin consent for "Your Domain" (Permission API > Accorder le consentement de l'administrateur pour votre domaine)

Vous pouvez maintenant utiliser la méthode suivante pour vous connecter automatiquement à votre Azure AD avec la méthode de connexion sans surveillance et tester votre script via '-WhatIf' avant d'exécuter le script de synchronisation des utilisateurs proprement dit :

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$ErrorActionPreference = "Stop"

$clientid = "[fill in your client from the output of the first script]" $tenantid = "[fill in your tenant id from the output of the first script]" $thumb = "[fill in your thumb id from the output of the first script]" Connect-MgGraph -ClientId $clientid -TenantId $tenantid -CertificateThumbprint $thumb
$includedGroups = @()
$includedGroups += '[your AzureAD groupname_1 here]' $includedGroups += '[your AzureAD groupname_2 here]'

# get the list of userid's in the group $groups = Get-MgGroup -All | Where-Object { $includedGroups -contains $_.DisplayName } $users_in_groups_userids = @(); Foreach ($group in $groups) { $groupMembers = Get-MgGroupMember -All -GroupID $group.id Foreach ($groupMember in $groupMembers) { $users_in_groups_userids += $groupMember.Id } } # get the required details of those users $users_full_list = Get-MgUser -All -Select Id,DisplayName,Mail,UserPrincipalName,AccountEnabled,MobilePhone,AssignedLicenses $users = $users_full_list | Where-Object { $users_in_groups_userids -contains $_.Id } Write-Output "Loaded from AzureAD: $(($users | Measure-Object).Count) users" # define the mapping of groups to roles $groupToRoleMapping = @()
$groupToRoleMapping += @ # match specific users that belong to a group for Meet-Work-Visit
$groupToRoleMapping += @ # match specific users that belong to a group for Meet-Work-Visit
$groupToRoleMapping += @ # match specific users that belong to a group for Meet-Work-Visit
$groupToRoleMapping += @ # match specific users that belong to a group for View

$groupToRoleMapping += @ # **special case** this line matches for every user, because of the 'MatchType', and is needed when you want to have a generic role for every user

$roleNameDefaultIfNoGroupMatched = "Regular user"


$users | Push-AzureADUsersToBB -DeactivateExistingUsersInSameIntegrationThatAreNotLoaded -UserDefaultRoleName $roleNameDefaultIfNoGroupMatched -GroupUserRoleMapping $groupToRoleMapping -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]' -WhatIf

Ensuite, suivez ces étapes pour synchroniser les utilisateurs depuis Active Directory selon un calendrier :

  • Prenez la commande que vous avez composée (voir les étapes précédentes), et enregistrez-la dans un fichier .ps1 :
    • Créez un fichier .ps1 (par exemple UsersToBrightBooking.ps1) dans un dossier de votre choix.
    • Ouvrez le fichier avec un éditeur, par exemple 'notepad'.
    • Collez le script de connexion pour vous connecter automatiquement à votre Azure AD
    • Collez la commande complète dans le fichier
    • Sauvegarder le fichier
  • Exécuter le fichier pour voir s'il est réussi
  • Créez une tâche dans le planificateur de tâches de Windows :
    • Ouvrir le planificateur de tâches de Windows
    • Créer une tâche
    • Définissez un calendrier, par exemple une fois par jour ou toutes les 4 heures.
    • Ajouter une action "Démarrer un programme" :
      • Programme/script :
        Powershell.exe
      • Paramètres :
        -windowstyle minimized -c "powershell -c .[Nom du fichier .ps1 créé] -verbose >> ExportToGoBright_Output.txt 2>&1″.
      • Start in :
        Remplissez le champ 'start in' avec l'emplacement du script, par exemple :C:scripts

"Script

"]

Étape 4.1 : Se connecter à Azure AD

Lancez PowerShell et connectez-vous à Azure AD via la commande standard "Connect-AzureAD".

Le module powershell AzureAD est obsolète

Veuillez noter que le module powershell AzureAD est obsolète, veuillez migrer vers le module powershell Microsoft.Graph (voir plus haut dans cet article).

Étape 4.2 : tester la sélection des utilisateurs

La commande pour obtenir les informations d'Active Directory et les traiter dans BrightBooking est la suivante :

Get-AzureADUser -All $true [optional: filter] | Push-AzureADUsersToBB [optional: specific username/pincode field] -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]'

Vous pouvez utiliser les paramètres suivants dans la commande 'Push-AzureADUsersToBB' :

-ADUserSpecificUsername UserPrincipalName
(optionnel)

Par défaut, l'utilisateur s'authentifie avec l'adresse électronique principale de l'utilisateur sur le serveur Microsoft Exchange ou Office365.

Indiquez cette valeur pour utiliser une méthode différente d'authentification de l'utilisateur auprès du serveur Microsoft Exchange ou Office365 :
UserPrincipalName pour utiliser l'UPN

-ADUserPincodePropertyName
(facultatif)

Indiquez le nom d'un champ d'Active Directory que vous souhaitez utiliser comme "code postal" (il doit être numérique, comporter au moins 4 chiffres et être unique).

-ADUserMobilePropertyName
(facultatif)

Spécifiez le nom d'un champ dans Active Directory que vous voulez utiliser pour obtenir le numéro de téléphone mobile des utilisateurs (par exemple pour la notification de la réception numérique)
Utilisera le champ standard 'Mobile' par défaut.

-ADUserNFCIdPropertyName
(facultatif)

Indiquez le nom d'un champ dans Active Directory que vous voulez utiliser pour obtenir l'identifiant NFC pour cet utilisateur.
Veuillez noter qu'il doit être au format HEX, par exemple XX:XX:XX:XX:XX:XX:XX .

-ADUserDefaultCostCenterId OrNamePropertyName
(facultatif)

Spécifiez le nom d'un champ dans Active Directory que vous voulez utiliser pour définir le centre de coûts par défaut pour cet utilisateur. Vous pouvez spécifier le nom ou l'id ('guid') du centre de coûts, le nom étant le plus couramment utilisé.

-GroupUserRoleMapping

Ce paramètre vous donne la possibilité d'attribuer un rôle à un utilisateur dans la plate-forme, en fonction de l'appartenance à un groupe dans Azure AD.
Vous devez fournir une table de hachage (une liste clé+valeur), où la clé est le FQN complet du groupe et la valeur est le nom du rôle dans la plate-forme.

Voir l'exemple ci-dessous.

-UserRoleNameForNewUsers
(facultatif)

Nom facultatif d'un rôle existant dans le portail à utiliser lorsque de nouveaux utilisateurs sont créés par cette synchronisation.

-DeactivateExistingUsersIn
SameIntegrationThatAreNotLoaded
(facultatif)

Commutateur facultatif permettant de désactiver automatiquement les utilisateurs qui ne font plus partie des utilisateurs sélectionnés dans ActiveDirectory, mais qui existent toujours dans le portail.
Utilisez ce commutateur pour les désactiver automatiquement.
Seuls les utilisateurs de la même intégration sont pris en compte (voir paramètre : BrightBookingIntegrationName).

-IncludeUsersWithoutAzureAD
AssignedLicensesOrAssignedPlans

Inclure les utilisateurs qui n'ont pas de licences Azure AD attribuées (qui seraient autrement incluses comme inactives) ou de plans Azure AD attribués (qui seraient autrement totalement exclus). Notez que l'inclusion de ces utilisateurs peut entraîner l'apparition d'"utilisateurs" involontaires tels que des comptes de service, des utilisateurs de boîtes aux lettres, etc. Cela peut être atténué en filtrant les utilisateurs avant de les introduire dans cette commande.

-BrightBookingApiUrl
(obligatoire)
L'url de l'API, comme indiqué à l'étape 3.
-BrightBookingApiKey
(obligatoire)
L'url de l'API, comme indiqué à l'étape 3.
-BrightBookingIntegrationName
(obligatoire)
L'url de l'API, comme indiqué à l'étape 3.
-WhatIf
(facultatif)
Utilisez le paramètre '-WhatIf' pour tester et voir, mais pas pour envoyer des données à votre environnement GoBright .

Vous trouverez ci-dessous plusieurs exemples de commandes. Vous pouvez les adapter à votre situation.

Ces commandes ne mettront pas encore à jour les utilisateurs dans le système. Il s'agit donc de commandes de test, car elles incluent le paramètre '-WhatIf'.

Exemples de commandes de test :

Traiter tous les utilisateurs dans Azure AD à GoBright:

Get-AzureADUser -All $true | Push-AzureADUsersToBB -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]' -WhatIf

Traiter les utilisateurs dont le NUP se termine par 'yourdomain.com' vers GoBright:

Get-AzureADUser -All $true | where {$_.userprincipalname -like "*yourdomain.com"} | Push-AzureADUsersToBB -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]' -WhatIf

Traitez les utilisateurs avec un identifiant NFC et un code pin dans un attribut personnalisé, notez que le nom de l' attribut d'extension doit être identique à celui dans Azure AD :

$users_all_import = Get-AzureADUser -All $true [optional: filter]
$users_all = @()


$pincodeField = '[Extension attribute here]'


$NFCField = '[Extension attribute here]'


Foreach ($user in $users_all_import) {

$getExtensionProperty = $user | Select-Object -ExpandProperty ExtensionProperty

If ($getExtensionProperty.$pincodeField) {

$pin = (Get-AzureADUserExtension -ObjectId $user.ObjectId).get_item($pincodeField)

} Else {

$pin = ''

}


If ($getExtensionProperty.$NFCField) {

$nfc = (Get-AzureADUserExtension -ObjectId $user.ObjectId).get_item($NFCField)

} Else {

$nfc = ''

}


$user | Add-Member UserPincode $pin -Force

$user | Add-Member UserNFC $nfc -Force

$users_all += $user

}


$users_all | Push-AzureADUsersToBB -ADUserPincodePropertyName UserPincode -ADUserNFCIdPropertyName UserNFC -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]' -WhatIf

Traitez les utilisateurs et ajoutez les rôles d'utilisateur dans GoBright en fonction de leur appartenance à un groupe dans Azure AD :

$groupToRoleMapping = @()
$groupToRoleMapping += @ # match specific users that belong to a group for Meet-Work-Visit
$groupToRoleMapping += @ # match specific users that belong to a group for Meet-Work-Visit
$groupToRoleMapping += @ # match specific users that belong to a group for Meet-Work-Visit
$groupToRoleMapping += @ # match specific users that belong to a group for View

$groupToRoleMapping += @ # **special case** this line matches for every user, because of the 'MatchType', and is needed when you want to have a generic role for every user

$roleNameDefaultIfNoGroupMatched = "Regular user"


$users_all = Get-AzureADUser -All $true
$users_all | Push-AzureADUsersToBB -UserDefaultRoleName $roleNameDefaultIfNoGroupMatched -GroupUserRoleMapping $groupToRoleMapping -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]' -WhatIf

Traiter tous les utilisateurs sauf ceux qui sont membres d'un groupe spécifique dans Azure AD :

$excludedGroups = @()
$excludedGroups += '[GroupName1]'
$excludedGroups += '[GroupName2]'
$excludedGroups += '[GroupName3]'
$ADGroups = Get-AzureADGroup -All $true | Where-Object { $excludedGroups -notcontains $_.DisplayName }
$users_all = $ADGroups | Get-AzureADGroupMember -All $true
$users_all | Push-AzureADUsersToBB -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]' -WhatIf

Étape 4.2 : Exécuter la synchronisation réelle

Une fois que la liste des utilisateurs est correctement filtrée, vous pouvez exécuter la synchronisation réelle en supprimant le paramètre '-WhatIf'.

Exécutez maintenant la même commande, mais sans '-WhatIf' et elle traitera les utilisateurs dans votre environnement GoBright .

Étape 4.3 : Planifiez l'intégration pour qu'elle s'exécute périodiquement via le planificateur de tâches de Windows.

Pour pouvoir exécuter le script sans surveillance, vous devez vous connecter automatiquement.

Méthode conseillée de connexion sans surveillance :
La méthode conseillée pour effectuer une connexion sans surveillance consiste à créer une application enregistrée dans Azure AD et à se connecter à cette application :

#script for creating user, cert, and get tenantid #getting data for daily script
Connect-AzureAD $pwd = "Password to encrypt the cert" $subject = "GoBright_unattendedlogin" # may not be longer than 15 characters = the name certificate and app $tmppath = "C:tmp" $certname= "unattendedlogin_azuread.pfx" $fullcertpath = "C:tmpunattendedlogin.pfx" $IdentifierUris = "https://www.fillInYourOwnDomain.com" # Here you need to fill in your own domain name
$thumb = (New-SelfSignedCertificate -CertStoreLocation Cert:CurrentUserMy -subject $subject -KeyExportPolicy Exportable -NotAfter (Get-Date).AddYears(10) -Type CodeSigningCert -KeySpec Signature).Thumbprint $pwd = ConvertTo-SecureString -String $pwd -Force -AsPlainText if ($tmppath -eq $false) Export-PfxCertificate -cert "cert:CurrentUsermy$thumb" -FilePath $fullcertpath -Password $pwd
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate($fullcertpath, $pwd) $keyValue = [System.Convert]::ToBase64String($cert.GetRawCertData())
$application = New-AzureADApplication -DisplayName $subject -IdentifierUris $IdentifierUris New-AzureADApplicationKeyCredential -ObjectId $application.ObjectId -CustomKeyIdentifier $subject -Type AsymmetricX509Cert -Usage Verify -Value $keyValue $sp=New-AzureADServicePrincipal -AppId $application.AppId Add-AzureADDirectoryRoleMember -ObjectId (Get-AzureADDirectoryRole | where-object {$_.DisplayName -eq "Directory Readers"}).Objectid -RefObjectId $sp.ObjectId
$tenantid = Get-AzureADTenantDetail | Select ObjectId -ExpandProperty ObjectId $appid = $application.AppId $thumb $tenantid $appid
#copy data from thumb, tenantid, appid to daily user sync script

Pour plus d'informations, veuillez cliquer sur ce lien.

À des fins de test, vous pouvez utiliser la méthode suivante pour vous connecter automatiquement à Azure AD avec la méthode de connexion sans surveillance et tester votre script avant d'exécuter le script de synchronisation des utilisateurs proprement dit :

$tenantid = "[fill in your tenant id from the output of the first script]" $thumb = "[fill in your thumb id from the output of the first script]" $appid = "[fill in your appid from the output of the first script]"
Connect-AzureAD -TenantId $tenantid -ApplicationId $appid -CertificateThumbprint $thumb
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $ErrorActionPreference = "Stop"
$users_all = Get-AzureADUser -All $true | Where-Object {$_.userprincipalname -like "*someDomainname.com"} $users_all | Push-AzureADUsersToBB -UserDefaultRoleName $roleNameDefaultIfNoGroupMatched -GroupUserRoleMapping $groupToRoleMapping -DeactivateExistingUsersInSameIntegrationThatAreNotLoaded -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]' -WhatIf

Remarque : si vous obtenez une erreur dans PowerShell indiquant que les droits sont insuffisants pour exécuter le script, vous devez vérifier les droits à ajouter à l'application. Pour plus d'informations, veuillez lire l'article suivant de Microsoft "Step 5 : Assign Azure AD roles to the application " : https://docs.microsoft.com/en-us/powershell/exchange/app-only-auth-powershell-v2?view=exchange-ps

Ensuite, suivez ces étapes pour synchroniser les utilisateurs depuis Active Directory selon un calendrier :

  • Prenez la commande que vous avez composée (voir les étapes précédentes), et enregistrez-la dans un fichier .ps1 :
    • Créez un fichier .ps1 (par exemple UsersToBrightBooking.ps1) dans un dossier de votre choix.
    • Ouvrez le fichier avec un éditeur, par exemple 'notepad'.
    • Collez le script de connexion pour vous connecter automatiquement à votre Azure AD
    • Collez la commande complète dans le fichier
    • Sauvegarder le fichier
  • Exécuter le fichier pour voir s'il est réussi
  • Créez une tâche dans le planificateur de tâches de Windows :
    • Ouvrir le planificateur de tâches de Windows
    • Créer une tâche
    • Définissez un calendrier, par exemple une fois par jour ou toutes les 4 heures.
    • Ajouter une action "Démarrer un programme" :
      • Programme/script :
        Powershell.exe
      • Paramètres :
        -windowstyle minimized -c "powershell -c .[Nom du fichier .ps1 créé] -verbose >> ExportToGoBright_Output.txt 2>&1″.
      • Start in :
        Remplissez le champ 'start in' avec l'emplacement du script, par exemple :C:scripts

Script pour la synchronisation d'Active Directory

Étape 4.1 : Tester la sélection des utilisateurs

La commande pour obtenir l'information d'Active Directory et la traiter dans GoBright est :

Push-ADUsersToBB [filter] [optional: specific username/pincode field] -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]'

Vous pouvez utiliser les paramètres suivants dans la commande 'Push-ADUsersToBB' :

-Filtre
(obligatoire)
La condition de filtrage pour filtrer les utilisateurs que vous voulez synchroniser(plus de documentation disponible).
-SearchBase
(facultatif)
Spécifie le chemin d'accès à Active Directory sous lequel la recherche doit être effectuée(plus de documentation disponible).

-ADSpecificUsername
(facultatif)

Par défaut, l'utilisateur s'authentifie avec l'adresse e-mail principale de l'utilisateur auprès du serveur Microsoft Exchange ou Office365.

Fournissez ces valeurs pour utiliser une méthode différente d'authentification de l'utilisateur au serveur Microsoft Exchange ou Office365 :
DomainPlusUsername pour utiliser DOMAINusername
UserPrincipalName pour utiliser l'UPN

-ADUserPincodePropertyName
(facultatif)

Indiquez le nom d'un champ dans Active Directory que vous souhaitez utiliser comme "code postal" (il doit être numérique, comporter au moins 4 chiffres et être unique).

-ADUserMobilePropertyName
(facultatif)

Indiquez le nom d'un champ dans Active Directory que vous souhaitez utiliser pour obtenir le numéro de téléphone mobile des utilisateurs (par exemple, pour la notification de la réception numérique)
Utilisera le champ standard "Mobile" par défaut.

-ADUserNFCIdPropertyName
(facultatif)

Indiquez le nom d'un champ dans Active Directory que vous voulez utiliser pour obtenir l'identifiant NFC pour cet utilisateur.

Veuillez noter qu'il doit être au format HEX, par ex : XX:XX:XX:XX:XX:XX:XX.

-ADUserDefaultCostCenterId OrNamePropertyName
(facultatif)

Spécifiez le nom d'un champ dans Active Directory que vous voulez utiliser pour définir le centre de coûts par défaut pour cet utilisateur. Vous pouvez spécifier le nom ou l'id ('guid') du centre de coûts, le nom étant le plus couramment utilisé.

-UserRoleNameForNewUsers
(facultatif)

Nom facultatif d'un rôle existant dans la plate-forme à utiliser lorsque de nouveaux utilisateurs sont créés par cette synchronisation.

-UserDefaultRoleName
(facultatif)

Définir le nom de rôle par défaut pour tous les utilisateurs qui n'ont pas de correspondance dans le 'GroupUserRoleMapping' (voir ci-dessous).

-GroupUserRoleMapping
(facultatif)

Ce paramètre vous donne la possibilité d'attribuer un rôle à un utilisateur dans la plate-forme, sur la base de l'appartenance à un groupe dans l'ActiveDirectory.
Vous devez fournir une table de hachage (une liste clé+valeur), où la clé est le FQN complet du groupe et la valeur est le nom du rôle dans la plate-forme.

Voir l'exemple ci-dessous.

-DeactivateExistingUsersIn
SameIntegrationThatAreNotLoaded
(facultatif)

Commutateur facultatif permettant de désactiver automatiquement les utilisateurs qui ne font plus partie des utilisateurs sélectionnés dans ActiveDirectory, mais qui existent toujours dans le portail.
Utilisez ce commutateur pour les désactiver automatiquement.
Seuls les utilisateurs de la même intégration sont pris en compte (voir paramètre : BrightBookingIntegrationName).

-BrightBookingApiUrl
(obligatoire)
L'url de l'API, comme indiqué à l'étape 3.
-BrightBookingApiKey
(obligatoire)
L'url de l'API, comme indiqué à l'étape 3.
-BrightBookingIntegrationName
(obligatoire)
L'url de l'API, comme indiqué à l'étape 3.
-WhatIf
(facultatif)
Utilisez le paramètre '-WhatIf' pour tester et voir, mais pas pour envoyer des données à votre environnement GoBright .

Vous trouverez ci-dessous plusieurs exemples de commandes. Vous pouvez les adapter à votre situation.

Ces commandes ne mettront pas encore à jour les utilisateurs dans le système. Il s'agit donc de commandes de test, car elles incluent le paramètre '-WhatIf'.

Exemples de commandes de test :

Traiter les utilisateurs dont le NUP se termine par 'yourdomain.com' :

Push-ADUsersToBB -Filter 'UserPrincipalName -like "*yourdomain.com"' -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]' -WhatIf

Traiter les utilisateurs dont le NUP se termine par 'yourdomain.com' et utiliser le champ 'PersonnelNumber' dans ActiveDirectory comme code postal pour les utilisateurs :

Push-ADUsersToBB -Filter 'UserPrincipalName -like "*yourdomain.com"' -ADUserPincodePropertyName PersonnelNumber -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]' -WhatIf

Traiter les utilisateurs qui sont membres d'un groupe spécifique dans une OU (Organizational Unit) :

Push-ADUsersToBB -Filter { memberOf -RecursiveMatch "CN=Administrators,DC=Company,DC=com" } -SearchBase "OU=Office,DC=Company,DC=com" -ADUserPincodePropertyName PersonnelNumber -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]' -WhatIf

Traiter les utilisateurs qui sont membres d'un groupe spécifique dans une OU (Organizational Unit) et définir un rôle spécifique en fonction de leur appartenance à un groupe :

$groupToRoleMapping = @()

$groupToRoleMapping += @ # match specific users that belong to a group
$groupToRoleMapping += @ # match specific users that belong to a group
$groupToRoleMapping += @ # match specific users that belong to a group to a role of View
$groupToRoleMapping += @ # **special case** this line matches for every user, because of the 'MatchType', and is needed when you want to have a generic role for every user
$roleNameDefaultIfNoGroupMatched = "Regular user"
Push-ADUsersToBB -Filter { memberOf -RecursiveMatch "CN=OfficeUsers,DC=Company,DC=com" } -SearchBase "OU=Office,DC=Company,DC=com" -ADUserPincodePropertyName PersonnelNumber -UserDefaultRoleName $roleNameDefaultIfNoGroupMatched -GroupUserRoleMapping $groupToRoleMapping -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]' -WhatIf

Traiter les utilisateurs qui sont membres d'un groupe spécifique dans une OU (Organizational Unit), avec [domain][username] comme nom d'utilisateur d'authentification :

Push-ADUsersToBB -Filter { memberOf -RecursiveMatch "CN=Administrators,DC=Company,DC=com" } -SearchBase "OU=Office,DC=Company,DC=com" -ADSpecificUsername DomainPlusUsername -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]' -WhatIf

Étape 4.2 : Exécuter la synchronisation réelle

Une fois que la liste des utilisateurs est correctement filtrée, vous pouvez exécuter la synchronisation réelle en supprimant le paramètre '-WhatIf'.

Exécutez maintenant la même commande, mais sans '-WhatIf' et elle traitera les utilisateurs dans votre environnement GoBright .

Étape 4.3 : Planifiez l'intégration pour qu'elle s'exécute périodiquement via le planificateur de tâches de Windows.

Suivez ces étapes pour synchroniser les utilisateurs depuis Active Directory selon un calendrier :

  • Prenez la commande que vous avez composée (voir les étapes précédentes), et enregistrez-la dans un fichier .ps1 :
    • Créez un fichier .ps1 (par exemple UsersToBrightBooking.ps1) dans un dossier de votre choix.
    • Ouvrez le fichier avec un éditeur, par exemple 'notepad'.
    • Collez la commande complète dans le fichier
    • Sauvegarder le fichier
  • Exécutez le fichier pour voir s'il est réussi.
  • Créez une tâche dans le planificateur de tâches de Windows :
    • Ouvrir le planificateur de tâches de Windows
    • Créer une tâche
    • Définissez un calendrier, par exemple une fois par jour ou toutes les 4 heures.
    • Ajouter une action "Démarrer un programme" :
      • Programme/script :
        Powershell.exe
      • Paramètres :
        -windowstyle minimized -c "powershell -c .[Nom du fichier .ps1 créé] -verbose >> ExportToGoBright_Output.txt 2>&1″.
      • Start in :
        Remplissez le champ 'start in' avec l'emplacement du script, par exemple :C:scripts

Intervalle de synchronisation pour les tests

Le conseil pour l'intervalle de synchronisation est une portée des montants ci-dessous :

  • 0 à 2000 utilisateurs : la synchronisation peut être exécutée 4 fois par jour
  • Plus de 2000 utilisateurs : la synchronisation peut être exécutée 2 fois par jour

Pour effectuer des tests environ 3-4 fois par heure, nous vous conseillons vivement d'exécuter le script avec de petits lots de 10 utilisateurs par exécution.

Cet article provient du Centre d'aide de GoBright.

Voir l'article original

Questions fréquentes

Demandez-nous n'importe quoi ! Vous trouverez ici les réponses aux questions les plus fréquemment posées.

Consulter les FAQ

Centre d'aide

Une mine d'or pour tous les responsables informatiques et les gestionnaires d'installations. Plongez dans les aspects techniques de nos produits et solutions.

Visiter le centre d'aide

Bulletin d'information

Vous voulez rester informé de tous les développements dans le domaine du bureau intelligent et de nos nouvelles fonctionnalités ? Abonnez-vous maintenant.

S'abonner