Gebruikerssynchronisatie met Azure AD/Active Directory

Dit artikel is beschikbaar in videoformaat en in een geschreven artikel met meer details.
Opmerking: door wijzigingen in de PowerShell-module zijn delen van de video verouderd. De video kan nog steeds als referentie worden gebruikt. De code in dit artikel is up-to-date.

De Azure AD / Active Directory synchronisatie kan automatisch gebruikers aanmaken, bijwerken en uitschakelen vanuit Azure AD of Active Directory.

We hebben de 'BrightBookingUserAdminTools' PowerShell module gemaakt, die deze logica afhandelt. Door een (geplande) taak te maken met de juiste PowerShell commando's, kunt u deze informatie regelmatig pushen naar GoBright vanaf uw server.

Opmerking: GoBright ontvangt alleen gegevens via deze BrightBookingUserAdminTools. GoBright heeft geen rechten om gegevens terug te sturen naar uw Azure AD / Active Directory.

GoBright als een bedrijfstoepassing in Azure AD

Alvorens verder te gaan met de sectie hieronder willen we u erop wijzen dat u GoBright kunt instellen als een bedrijfsapplicatie binnen Azure AD. Dit zal u toelaten om automatisch gebruikers aan te maken/bij te werken op het platform en gemakkelijk SSO mogelijk maken. We raden u ten zeerste aan om de stappen in het onderstaande artikel te volgen alvorens verder te gaan: GoBright als een bedrijfsapplicatie (Azure AD)

Inleiding

De integratie-logica is beschikbaar als PowerShell-module, via PowerShellGallery, als 'BrightBookingUserAdminTools'.

De 'BrightBookingUserAdminTools' PowerShell module moet worden geïnstalleerd op een machine (server) in uw domein.

Wanneer het is geconfigureerd, volgt het de volgende stappen, elke keer dat het wordt uitgevoerd:

  1. Haal de gebruikers uit Azure AD of Active Directory, gefilterd volgens uw voorkeuren, bijvoorbeeld gefilterd op groepslidmaatschap
  2. Deze gebruikers worden naar GoBright gestuurd en onmiddellijk aangemaakt of bijgewerkt
  3. Als de gebruiker is gedeactiveerd in Azure AD of Active Directory, wordt hij ook gedeactiveerd in GoBright
  4. Gebruikers die niet worden gelezen uit de Azure AD of Active Directory worden ook niet bijgewerkt in GoBright

Volg de onderstaande stappen om de integratie te installeren en te configureren!

Stap 1

Vereisten installeren

De BrightBookingUserAdminTools module heeft de volgende afhankelijkheden:

  • PowerShell versie 5 of hoger
  • De volgende PowerShell modules:
    • PowerShellGallery
    • ActiveDirectory
    • Azure AD
  • De machine (server) moet gekoppeld zijn in uw Windows-domein

Volg de volgende stappen om de afhankelijkheden te installeren:

  1. Log in op de machine (server) waar u de taak wilt installeren. (deze machine moet gekoppeld zijn in het Windows domein).
  2. Start PowerShell op die machine, als 'administator':
    clip0001-279x300.jpg
  3. Controleer of PowerShell 5 is geïnstalleerd:
    • Voer het volgende commando uit:
      $PSVersionTable.PSVersion
    • In het resultaat dat u krijgt, moet de "Major" "5" of hoger zijn.
    • Als de 'Major' lager is dan '5Volg deze stappen:
      • Installeer Windows Management Framework 5 (dit omvat PowerShell 5):
        Download Windows Management Framework 5
      • Opmerking 1: als u de foutmelding 'De update is niet van toepassing op uw computer' krijgt, hebt u waarschijnlijk de verkeerde download geselecteerd, raadpleeg dan dit artikel.
      • Opmerking 2: Windows Management Framework 5 is afhankelijk van .NET Framework 4.5.
      • Opmerking 3: Opnieuw opstarten is waarschijnlijk nodig.
      • Controleer na de installatie of de 'Major' is '5of hoger:
        $PSVersionTable.PSVersion
  4. PowerShell Uitvoeringsbeleid (optioneel)
    • PowerShell ExecutionPolicy instellen op Unrestricted
      • Set-Uitvoeringsbeleid -Uitvoeringsbeleid onbeperkt
  5. Installeer de PowerShellGallery PowerShell module:
    • Voer de volgende commando's uit in PowerShell (uitgevoerd als beheerder)
    • Installeer de NuGet PackageProvider:
      Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
    • Configureer PowerShellGallery als een vertrouwde bron:
      Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
    • Installeer de module PowerShellGet:
      Import-Module -Name PowerShellGet
  6. Als u wilt synchroniseren met Active Directory: Installeer de ActiveDirectory PowerShell module:
  7. Als u wilt synchroniseren met Azure AD: Installeer de Microsoft.Graph PowerShell module:
    • Voer de volgende commando's uit in PowerShell (uitgevoerd als beheerder)
    • Opmerking: .Net Framework 4.7.2 of hoger is vereist, voor meer documentatie zie: https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation?view=graph-powershell-1.0
    • Installeer de toepasselijke Microsoft.Graph modules:
      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

Stap 2

Installatie/update van de synchronisatie module

Installeer of update de BrightBookingUserAdminTools PowerShell module:

Install-Module -Name BrightBookingUserAdminTools -Force

Het '-Force' commando zorgt ervoor dat de laatste versie van de module wordt geïnstalleerd, zelfs als er een eerdere installatie bestaat. Als de module al geïnstalleerd was, moet de PowerShell-sessie opnieuw worden opgestart.

Stap 3

Configuratie: verkrijg de API URL en API sleutel

Om de gebruikers te kunnen synchroniseren, hebt u de volgende informatie nodig in het GoBright portaal:

  • De API URL en API sleutel
  • De naam van de integratie die aan de gebruikers moet worden gekoppeld

Volg deze stappen om de API URL en API sleutel te vinden:

  • Log in met een managersaccount op het GoBright portaal
  • Ga naar Beheerdercentrum > Integraties > API-toegang
  • Genereer een API sleutel via de 'Toevoegen'-knop. Kies als type 'manager' en voer een beschrijving in voor later gebruik
    • Opmerking: zorg ervoor dat u de API-sleutel opslaat, aangezien er geen manier is om deze te herstellen
  • De 'API URL' is de URL van uw GoBright omgeving die u kunt vinden in de URL balk van uw browser en onder Beheercentrum > Integraties > API toegang: API url https://[huurder-id].gobright.cloud/

Volg deze stappen om de naam van de integratie te vinden:

  • Log in met een managersaccount op het GoBright portaal
  • Ga naar Beheercentrum > Integraties
  • Kopieer de naam van de integratie (Exchange/Office 365) die moet worden gebruikt om de gebruikers te koppelen aan

De naam van de integratie, de API URL en de API sleutel zijn nodig in de volgende stappen.

Stap 4

Configureer het synchronisatie PowerShell script

In de laatste stap bouw je het eigenlijke script om de GoBright PowerShell module te vertellen welke gebruikers je wilt ophalen en pushen naar je GoBright omgeving. Dit kan gedaan worden met Azure AD of Active Directory.

Het GoBright platform dwingt communicatie af met TLS 1.2. Afhankelijk van het systeem dat u gebruikt kan dit nog automatisch gebeuren. Zie de code hieronder en implementeer dit in elk PowerShell script dat communiceert met GoBright.

Voeg ook de $ErrorActionPreference toe om ervoor te zorgen dat het script stopt wanneer er een fout optreedt. Vergeet niet de onderstaande regels toe te voegen in elk van je scripts.

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

Kies hieronder een van de verklaringen voor het script die op uw situatie van toepassing is.

Script voor Azure AD-synchronisatie met de Microsoft.Graph-module

Stap 4.1: Maak verbinding met uw Azure AD

Start PowerShell en maak verbinding met je Azure AD via het commando:

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

Stap 4.2: Test de selectie van gebruikers

Hieronder vind je een aantal voorbeeldcommando's. Je kunt ze aanpassen aan jouw situatie.

Deze commando's zullen nog niet daadwerkelijk gebruikers bijwerken in GoBright, omdat ze de '-WhatIf' parameter bevatten.

Voorbeeldsynchronisatiecommando's:

Verwerk gebruikers en voeg de gebruikersrollen toe binnen GoBright op basis van hun groepslidmaatschap in 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

Beschikbare parameters voor Push-AzureADUsersToBB

U kunt de volgende parameters gebruiken in de opdracht 'Push-AzureADUsersToBB':

-ADUserSpecificUsername UserPrincipalName
(optioneel)

Standaard zal de gebruiker zich authenticeren met het primaire e-mailadres van de gebruiker bij de Microsoft Exchange Server of Office365.

Geef deze waarde op om een andere manier van authenticatie van de gebruiker op de Microsoft Exchange Server of Office365 te gebruiken:
UserPrincipalName om de UPN te gebruiken.

-ADUserPincodePropertyName
(optioneel)

Specificeer een veldnaam van een veld in Active Directory dat u wilt gebruiken als "pincode" (moet numeriek zijn, minimaal 4 cijfers, en moet uniek zijn).

-ADUserMobilePropertyName
(optioneel)

Specificeer een veldnaam van een veld in Active Directory dat u wilt gebruiken om het mobiele telefoonnummer van de gebruikers op te vragen (bv. voor de melding van de digitale ontvangst)
Standaard wordt het standaardveld 'Mobile' gebruikt.

-ADUserNFCIdPropertyName
(optioneel)

Specificeer een veldnaam van een veld in Active Directory dat u wilt gebruiken om de NFC Identifier voor die gebruiker op te halen.
Let op dat het in HEX formaat moet zijn, bijv: XX:XX:XX:XX:XX:XX .

-ADUserDefaultCostCenterId OrNamePropertyName
(optioneel)

Geef een veldnaam op van een veld in Active Directory dat u wilt gebruiken om het standaardkostencentrum voor die gebruiker in te stellen. U kunt de naam of het id ('guid') van het kostencentrum opgeven, waarbij de naam het meest wordt gebruikt.

-GroupUserRoleMapping

Deze parameter geeft je de mogelijkheid om een rol toe te kennen aan een gebruiker in het platform, gebaseerd op een groepslidmaatschap in de Azure AD.
Je moet een hashtable (een key+value lijst) meegeven, waarbij de key de volledige FQN van de groep is en de value de rolename in het platform.

Zie het voorbeeld hieronder.

-UserRoleNameForNewUsers
(optioneel)

Optionele naam van een bestaande rol in het portaal om te gebruiken wanneer nieuwe gebruikers worden aangemaakt via deze synchronisatie.

-DeactivateExistingUsersIn
SameIntegrationThatAreNotLoaded
(optioneel)

Optionele schakelaar om automatisch gebruikers te deactiveren die niet meer in de geselecteerde gebruikers van ActiveDirectory staan, maar nog wel in het portaal bestaan.
Gebruik deze schakelaar om ze automatisch uit te schakelen.
Alleen gebruikers in dezelfde integratie worden in aanmerking genomen (zie parameter: BrightBookingIntegrationName)

-InclusdeUsersWithoutAzureAD
AssignedLicensesOrAssignedPlans

Neem gebruikers op die geen Azure AD-licenties hebben toegewezen (zouden anders als inactief worden opgenomen) of Azure AD-plannen hebben toegewezen (zouden anders volledig worden uitgesloten). Merk op dat het opnemen van deze gebruikers kan leiden tot het hebben van onbedoelde 'gebruikers' zoals serviceacounts, roommailbox gebruikers, enz. Dat kan worden ondervangen door de gebruikers te filteren voordat ze in dit commando worden ingevoerd.

-BrightBookingApiUrl
(verplicht)
De API url, zoals gevonden in stap 3
-BrightBookingApiKey
(verplicht)
De API url, zoals gevonden in stap 3
-BrightBookingIntegrationName
(verplicht)
De API url, zoals gevonden in stap 3
-WhatIf
(optioneel)
Gebruik de '-WhatIf' parameter om alleen te testen en te zien, maar niet om daadwerkelijk data naar uw GoBright omgeving te sturen

Stap 4.2: Voer de eigenlijke synchronisatie uit

Zodra de lijst van gebruikers correct is gefilterd, kunt u de echte synchronisatie uitvoeren door de '-WhatIf' parameter te verwijderen.

Dus voer nu hetzelfde commando uit, maar dan zonder '-WhatIf' en het zal de gebruikers verwerken naar je GoBright omgeving.

Stap 4.3: Plan de integratie om periodiek uit te voeren via Windows taakplanner

Om het script zonder toezicht te kunnen uitvoeren, moet je op de een of andere manier automatisch inloggen.
De aanbevolen manier om onbeheerd inloggen te gebruiken, kan via certificaten, via app-registratie in 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!"

Toestemming van de beheerder in AzureAD

Ga naar het Azure-portaal en open de gemaakte bedrijfsapplicatie voor onbeheerde aanmelding en selecteer API-toestemming > Toestemming verlenen aan beheerder voor "Uw domein".

Nu kun je de volgende manier gebruiken om automatisch in te loggen in je Azure AD met de onbeheerde inlogmethode en je script testen via '-WhatIf' voordat je het eigenlijke gebruikerssynchronisatiescript uitvoert:

[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

Volg vervolgens deze stappen om de gebruikers volgens een schema vanuit Active Directory te synchroniseren:

  • Neem het commando dat je hebt samengesteld (zie vorige stappen), en sla het op in een .ps1 bestand:
    • Maak een .ps1 bestand (bijv. UsersToBrightBooking.ps1) in een map van uw voorkeur
    • Open het bestand met een editor, bijvoorbeeld "notepad
    • Plak het inlogscript om automatisch in te loggen op uw Azure AD
    • Plak het volledige commando in het bestand
    • Sla het bestand op
  • Voer het bestand uit om te zien of het succesvol is
  • Maak een taak in de Windows taakplanner:
    • Open Windows taakplanner
    • Maak een taak
    • Stel een schema op, bijvoorbeeld eenmaal per dag, of elke 4 uur
    • Voeg een actie 'Start een programma' toe:
      • Programma/script:
        Powershell.exe
      • Parameters:
        -windowstyle geminimaliseerd -c "powershell -c .[Naam van het aangemaakte .ps1 bestand] -verbose >> ExportToGoBright_Output.txt 2>&1″
      • Start in:
        Vul de 'start in' in met de locatie van het script, bijv:C:scripts

"Script

"]

Stap 4.1: Maak verbinding met uw Azure AD

Start PowerShell, en maak verbinding met uw Azure AD via het standaard 'Connect-AzureAD' commando.

AzureAD powershell module is verouderd

Houd er rekening mee dat de AzureAD powershell module verouderd is, migreer naar de Microsoft.Graph powershell module (zie hierboven in dit artikel).

Stap 4.2: Test de selectie van gebruikers

De opdracht om de informatie uit Active Directory te halen en te verwerken in BrightBooking is:

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]'

U kunt de volgende parameters gebruiken in de opdracht 'Push-AzureADUsersToBB':

-ADUserSpecificUsername UserPrincipalName
(optioneel)

Standaard zal de gebruiker zich authenticeren met het primaire e-mailadres van de gebruiker bij de Microsoft Exchange Server of Office365.

Geef deze waarde op om een andere manier van authenticatie van de gebruiker op de Microsoft Exchange Server of Office365 te gebruiken:
UserPrincipalName om de UPN te gebruiken.

-ADUserPincodePropertyName
(optioneel)

Specificeer een veldnaam van een veld in Active Directory dat u wilt gebruiken als "pincode" (moet numeriek zijn, minimaal 4 cijfers, en moet uniek zijn).

-ADUserMobilePropertyName
(optioneel)

Specificeer een veldnaam van een veld in Active Directory dat u wilt gebruiken om het mobiele telefoonnummer van de gebruikers op te vragen (bv. voor de melding van de digitale ontvangst)
Standaard wordt het standaardveld 'Mobile' gebruikt.

-ADUserNFCIdPropertyName
(optioneel)

Specificeer een veldnaam van een veld in Active Directory dat u wilt gebruiken om de NFC Identifier voor die gebruiker op te halen.
Let op dat het in HEX formaat moet zijn, bijv: XX:XX:XX:XX:XX:XX .

-ADUserDefaultCostCenterId OrNamePropertyName
(optioneel)

Geef een veldnaam op van een veld in Active Directory dat u wilt gebruiken om het standaardkostencentrum voor die gebruiker in te stellen. U kunt de naam of het id ('guid') van het kostencentrum opgeven, waarbij de naam het meest wordt gebruikt.

-GroupUserRoleMapping

Deze parameter geeft je de mogelijkheid om een rol toe te kennen aan een gebruiker in het platform, gebaseerd op een groepslidmaatschap in de Azure AD.
Je moet een hashtable (een key+value lijst) meegeven, waarbij de key de volledige FQN van de groep is en de value de rolename in het platform.

Zie het voorbeeld hieronder.

-UserRoleNameForNewUsers
(optioneel)

Optionele naam van een bestaande rol in het portaal om te gebruiken wanneer nieuwe gebruikers worden aangemaakt via deze synchronisatie.

-DeactivateExistingUsersIn
SameIntegrationThatAreNotLoaded
(optioneel)

Optionele schakelaar om automatisch gebruikers te deactiveren die niet meer in de geselecteerde gebruikers van ActiveDirectory staan, maar nog wel in het portaal bestaan.
Gebruik deze schakelaar om ze automatisch uit te schakelen.
Alleen gebruikers in dezelfde integratie worden in aanmerking genomen (zie parameter: BrightBookingIntegrationName)

-InclusdeUsersWithoutAzureAD
AssignedLicensesOrAssignedPlans

Neem gebruikers op die geen Azure AD-licenties hebben toegewezen (zouden anders als inactief worden opgenomen) of Azure AD-plannen hebben toegewezen (zouden anders volledig worden uitgesloten). Merk op dat het opnemen van deze gebruikers kan leiden tot het hebben van onbedoelde 'gebruikers' zoals serviceacounts, roommailbox gebruikers, enz. Dat kan worden ondervangen door de gebruikers te filteren voordat ze in dit commando worden ingevoerd.

-BrightBookingApiUrl
(verplicht)
De API url, zoals gevonden in stap 3
-BrightBookingApiKey
(verplicht)
De API url, zoals gevonden in stap 3
-BrightBookingIntegrationName
(verplicht)
De API url, zoals gevonden in stap 3
-WhatIf
(optioneel)
Gebruik de '-WhatIf' parameter om alleen te testen en te zien, maar niet om daadwerkelijk data naar uw GoBright omgeving te sturen

Hieronder vindt u enkele voorbeeldcommando's, u kunt ze aanpassen aan uw situatie.

Deze commando's zullen nog niet daadwerkelijk gebruikers in het systeem updaten, dus dit zijn test commando's, omdat ze de '-WhatIf' parameter bevatten.

Voorbeeld test commando's:

Verwerk alle gebruikers in de Azure AD naar GoBright:

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

Verwerk gebruikers met UPN's eindigend op 'yourdomain.com' naar 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

Verwerk gebruikers met een NFC ID en Pincode in een aangepast attribuut, let op dat de extensie attribuutnaam identiek moet zijn aan die in 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

Verwerk gebruikers en voeg de gebruikersrollen toe binnen GoBright op basis van hun groepslidmaatschap in 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

Verwerk alle gebruikers behalve degenen die lid zijn van een specifieke groep in 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

Stap 4.2: Voer de eigenlijke synchronisatie uit

Zodra de lijst van gebruikers correct is gefilterd, kunt u de echte synchronisatie uitvoeren door de '-WhatIf' parameter te verwijderen.

Dus voer nu hetzelfde commando uit, maar dan zonder '-WhatIf' en het zal de gebruikers verwerken naar je GoBright omgeving.

Stap 4.3: Plan de integratie om periodiek uit te voeren via Windows taakplanner

Om het script onbeheerd te kunnen uitvoeren moet je op de een of andere manier automatisch inloggen.

Aanbevolen onbeheerde login methode:
De aanbevolen manier om onbeheerd in te loggen, is door een geregistreerde app aan te maken in Azure AD, en te verbinden met die app:

#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

Voor meer informatie klikt u op deze link.

Voor testdoeleinden zou u de volgende manier kunnen gebruiken om automatisch in te loggen in uw Azure AD met de onbeheerde inlogmethode en uw script te testen voordat u het eigenlijke gebruikerssynchronisatiescript uitvoert:

$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

Opmerking: wanneer u een foutmelding krijgt binnen PowerShell dat er onvoldoende rechten zijn om het script uit te voeren, dan dient u de rechten te controleren om toe te voegen aan de app. Lees voor meer informatie het volgende Microsoft artikel 'Stap 5: Azure AD rollen toewijzen aan de applicatie ': https://docs.microsoft.com/en-us/powershell/exchange/app-only-auth-powershell-v2?view=exchange-ps

Volg vervolgens deze stappen om de gebruikers volgens een schema vanuit Active Directory te synchroniseren:

  • Neem het commando dat je hebt samengesteld (zie vorige stappen), en sla het op in een .ps1 bestand:
    • Maak een .ps1 bestand (bijv. UsersToBrightBooking.ps1) in een map van uw voorkeur
    • Open het bestand met een editor, bijvoorbeeld "notepad
    • Plak het inlogscript om automatisch in te loggen op uw Azure AD
    • Plak het volledige commando in het bestand
    • Sla het bestand op
  • Voer het bestand uit om te zien of het succesvol is
  • Maak een taak in de Windows taakplanner:
    • Open Windows taakplanner
    • Maak een taak
    • Stel een schema op, bijvoorbeeld eenmaal per dag, of elke 4 uur
    • Voeg een actie 'Start een programma' toe:
      • Programma/script:
        Powershell.exe
      • Parameters:
        -windowstyle geminimaliseerd -c "powershell -c .[Naam van het aangemaakte .ps1 bestand] -verbose >> ExportToGoBright_Output.txt 2>&1″
      • Start in:
        Vul de 'start in' in met de locatie van het script, bijv:C:scripts

Script voor Active Directory synchronisatie

Stap 4.1: Test de selectie van gebruikers

Het commando om de informatie uit Active Directory te halen en te verwerken in GoBright is:

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

U kunt de volgende parameters gebruiken in het "Push-ADUsersToBB"-commando:

-Filter
(verplicht)
De filtervoorwaarde om de gebruikers te filteren die u wilt synchroniseren(meer documentatie beschikbaar)
-SearchBase
(optioneel)
Specificeert het Active Directory-pad waaronder gezocht moet worden(meer documentatie beschikbaar)

-ADSpecificUsername
(optioneel)

Standaard zal de gebruiker zich met het primaire e-mailadres van de gebruiker bij de Microsoft Exchange Server of Office365 verifiëren.

Geef deze waarden op om een andere manier te gebruiken voor de authenticatie van de gebruiker bij de Microsoft Exchange Server of Office365:
DomainPlusUsername om de DOMAINusername te gebruiken
UserPrincipalName om de UPN te gebruiken

-ADUserPincodePropertyName
(optioneel)

Specificeer een veldnaam van een veld in Active Directory dat u wilt gebruiken als "pincode" (moet numeriek zijn, minimaal 4 cijfers, en moet uniek zijn)

-ADUserMobilePropertyName
(optioneel)

Geef een veldnaam op van een veld in Active Directory dat u wilt gebruiken om het mobiele telefoonnummer van de gebruikers op te vragen (bv. voor de melding van de digitale ontvangst)
Standaard wordt het standaardveld 'Mobile' gebruikt.

-ADUserNFCIdPropertyName
(optioneel)

Specificeer een veldnaam van een veld in Active Directory dat u wilt gebruiken om de NFC Identifier voor die gebruiker op te halen.

Let erop dat het in HEX formaat moet zijn, bijv: XX:XX:XX:XX:XX:XX.

-ADUserDefaultCostCenterId OrNamePropertyName
(optioneel)

Geef een veldnaam op van een veld in Active Directory dat u wilt gebruiken om het standaardkostencentrum voor die gebruiker in te stellen. U kunt de naam of het id ('guid') van het kostencentrum opgeven, waarbij de naam het meest wordt gebruikt.

-UserRoleNameForNewUsers
(optioneel)

Optionele naam van een bestaande rol in het platform om te gebruiken wanneer nieuwe gebruikers worden aangemaakt via deze synchronisatie.

-UserDefaultRoleName
(optioneel)

Stel de standaard rolenaam in voor alle gebruikers die geen overeenkomst hebben in de 'GroupUserRoleMapping' (zie hieronder)

-GroupUserRoleMapping
(optioneel)

Deze parameter geeft je de mogelijkheid om een rol toe te kennen aan een gebruiker in het platform, gebaseerd op een groepslidmaatschap in de ActiveDirectory.
Je moet een hashtable (een key+value lijst) meegeven, waarbij de key de volledige FQN van de groep is en de value de rolenaam in het platform.

Zie het voorbeeld hieronder.

-DeactivateExistingUsersIn
SameIntegrationThatAreNotLoaded
(optioneel)

Optionele schakelaar om automatisch gebruikers te deactiveren die niet meer in de geselecteerde gebruikers van ActiveDirectory staan, maar nog wel in het portaal bestaan.
Gebruik deze schakelaar om ze automatisch uit te schakelen.
Alleen gebruikers in dezelfde integratie worden in aanmerking genomen (zie parameter: BrightBookingIntegrationName)

-BrightBookingApiUrl
(verplicht)
De API url, zoals gevonden in stap 3
-BrightBookingApiKey
(verplicht)
De API url, zoals gevonden in stap 3
-BrightBookingIntegrationName
(verplicht)
De API url, zoals gevonden in stap 3
-WhatIf
(optioneel)
Gebruik de '-WhatIf' parameter om alleen te testen en te zien, maar niet om daadwerkelijk data naar uw GoBright omgeving te sturen

Hieronder vindt u enkele voorbeeldcommando's, u kunt ze aanpassen aan uw situatie.

Deze commando's zullen nog niet echt gebruikers updaten in het systeem, dus dit zijn test commando's, omdat ze de '-WhatIf' parameter bevatten.

Voorbeeld test commando's:

Verwerk gebruikers met UPN's die eindigen op '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

Verwerk gebruikers met UPN's die eindigen op "yourdomain.com", en gebruik het veld "PersonnelNumber" in ActiveDirectory als pincode voor de gebruikers:

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

Verwerk gebruikers die lid zijn van een specifieke groep in een 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

Verwerk gebruikers die lid zijn van een specifieke groep in een OU (Organizational Unit) en stel een specifieke rol in op basis van hun groepslidmaatschap:

$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

Verwerk gebruikers die lid zijn van een specifieke groep in een OU (Organizational Unit), met [domein][gebruikersnaam] als authenticatie gebruikersnaam:

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

Stap 4.2: Voer de eigenlijke synchronisatie uit

Zodra de lijst van gebruikers correct is gefilterd, kunt u de echte synchronisatie uitvoeren door de '-WhatIf' parameter te verwijderen.

Dus voer nu hetzelfde commando uit, maar dan zonder '-WhatIf' en het zal de gebruikers verwerken naar je GoBright omgeving.

Stap 4.3: Plan de integratie om periodiek uit te voeren via Windows taakplanner

Volg deze stappen om de gebruikers volgens een schema vanuit Active Directory te synchroniseren:

  • Neem het commando dat je hebt samengesteld (zie vorige stappen), en sla het op in een .ps1 bestand:
    • Maak een .ps1 bestand (bijv. UsersToBrightBooking.ps1) in een map van uw voorkeur
    • Open het bestand met een editor, bijvoorbeeld "notepad
    • Plak het volledige commando in het bestand
    • Sla het bestand op
  • Voer het bestand uit om te zien of het succesvol is
  • Maak een taak in de Windows taakplanner:
    • Open Windows taakplanner
    • Maak een taak
    • Stel een schema op, bijvoorbeeld eenmaal per dag, of elke 4 uur
    • Voeg een actie 'Start een programma' toe:
      • Programma/script:
        Powershell.exe
      • Parameters:
        -windowstyle geminimaliseerd -c "powershell -c .[Naam van het aangemaakte .ps1 bestand] -verbose >> ExportToGoBright_Output.txt 2>&1″
      • Start in:
        Vul de 'start in' in met de locatie van het script, bijv:C:scripts

Synchronisatie-interval voor testen

Het advies voor het synchronisatie-interval is een reikwijdte van de volgende bedragen hieronder:

  • 0 tot 2000 gebruikers: de synchronisatie kan 4 keer per dag worden uitgevoerd
  • Meer dan 2000 gebruikers: de synchronisatie kan 2 keer per dag worden uitgevoerd

Om ongeveer 3-4 keer in een uur te testen, raden we sterk aan om het script te draaien met kleine batches van 10 gebruikers per run.

Dit artikel komt uit het Helpcentrum van GoBright.

Bekijk origineel artikel

Vragen? Ga naar onze FAQ

Heb je een vraag? Hier vind je de antwoorden op de meest gestelde vragen.

Blader door de FAQ's

Help Center

Een goudmijn voor alle IT en Facility Managers. Verdiep je in de technische details van onze producten en oplossingen.

Bezoek het Helpcentrum

Nieuwsbrief

Wil je op de hoogte blijven van alle Smart Office ontwikkelingen en onze oplossingen? Schrijf je dan nu in.

Nu abonneren