Brugersynkronisering med Azure AD/Active Directory

Denne artikel er tilgængelig i videoformat samt en skriftlig artikel med flere detaljer.
Bemærk: På grund af ændringer i PowerShell-modulet er dele af videoen forældet. Videoen kan stadig bruges som reference. Koden i denne artikel er opdateret.

Azure AD/Active Directory-synkroniseringen er i stand til automatisk at oprette, opdatere og deaktivere brugere fra Azure AD eller Active Directory.

Vi har skabt PowerShell-modulet 'BrightBookingUserAdminTools', som håndterer denne logik. Ved at oprette en (planlagt) opgave med de rigtige PowerShell-kommandoer kan du skubbe disse oplysninger regelmæssigt til GoBright fra din server.

Bemærk: GoBright modtager kun data gennem denne BrightBookingUserAdminTools. GoBright har ikke tilladelse til at sende data tilbage til din Azure AD / Active Directory.

GoBright som en virksomhedsapplikation i Azure AD

Før vi fortsætter med afsnittet nedenfor, vil vi gerne gøre opmærksom på, at du kan opsætte GoBright som en virksomhedsapplikation i Azure AD. Det giver dig mulighed for at oprette/opdatere brugere til platformen automatisk og nemt aktivere SSO. Vi anbefaler, at du følger trinene i nedenstående artikel, før du fortsætter: GoBright som en virksomhedsapplikation (Azure AD)

Introduktion

Integrationslogikken er tilgængelig som et PowerShell-modul, via PowerShellGallery, som 'BrightBookingUserAdminTools'.

PowerShell-modulet 'BrightBookingUserAdminTools' skal installeres på en maskine (server) i dit domæne.

Når den er konfigureret, følger den følgende trin, hver gang den kører:

  1. Hent brugerne fra Azure AD eller Active Directory, filtreret efter dine præferencer, f.eks. filtreret efter gruppemedlemskab
  2. Disse brugere sendes til GoBright og oprettes eller opdateres med det samme.
  3. Hvis brugeren er deaktiveret i Azure AD eller Active Directory, vil den også blive deaktiveret i GoBright.
  4. Brugere, der ikke læses fra Azure AD eller Active Directory, bliver heller ikke opdateret i GoBright.

Følg nedenstående trin for at installere og konfigurere synkroniseringen Planlagt i Opgavestyring på en lokal server!

PowerShell-scriptet kan også planlægges til at køre på Azure Automation Runbook. Dokumentationen til Azure Runbook kan findes her.

Trin 1

Installer forudsætninger

BrightBookingUserAdminTools-modulet har følgende afhængigheder:

  • PowerShell version 5 eller højere
  • De følgende PowerShell-moduler:
    • PowerShellGalleri
    • ActiveDirectory
    • Azure AD
  • Maskinen (serveren) skal være knyttet til dit Windows-domæne

Følg de næste trin for at installere afhængighederne:

  1. Log ind på den maskine (server), hvor du vil installere opgaven. (Denne maskine skal være knyttet til Windows-domænet).
  2. Start PowerShell på den pågældende maskine som 'administrator':
    clip0001-279x300.jpg
  3. Tjek, om PowerShell 5 er installeret:
    • Udfør følgende kommando:
      $PSVersionTable.PSVersion
    • I det resultat, du får, skal 'Major' være '5' eller højere.
    • Hvis 'Major' er lavere end '5', skal du følge disse trin:
      • Installer Windows Management Framework 5 (dette inkluderer PowerShell 5):
        Download Windows Management Framework 5
      • Bemærk 1: Hvis du får fejlen "Opdateringen gælder ikke for din computer", har du sandsynligvis valgt den forkerte download, se venligst denne artikel.
      • Bemærk 2: Windows Management Framework 5 afhænger af .NET Framework 4.5.
      • Bemærk 3: Genstart er sandsynligvis nødvendig.
      • Efter installationen skal du kontrollere, om 'Major' er '5' eller højere:
        $PSVersionTable.PSVersion
  4. PowerShell ExecutionPolicy (valgfri)
    • Sæt PowerShell ExecutionPolicy til Unrestricted
      • Set-ExecutionPolicy -ExecutionPolicy Unrestricted
  5. Fremtving TLS 1.2-forbindelse:
    • [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 

      $ErrorActionPreference = "Stop"
  6. Installer PowerShellGallery PowerShell-modulet:
    • Udfør følgende kommandoer i PowerShell (kør som administrator)
    • Installer NuGet PackageProvider:
      Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
    • Konfigurer PowerShellGallery som en pålidelig kilde:
      Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
    • Installer PowerShellGet-modulet:
      Import-Module -Name PowerShellGet
  7. Hvis du vil synkronisere med Active Directory: Installer ActiveDirectory PowerShell-modulet:
  8. Hvis du vil synkronisere med Azure AD: Installer Microsoft.Graph PowerShell-modulet:
    • Udfør følgende kommandoer i PowerShell (kør som administrator)
    • Bemærk: .Net Framework 4.7.2 eller højere er påkrævet, for mere dokumentation se: https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation?view=graph-powershell-1.0
    • Installer de relevante Microsoft.Graph-moduler:
      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

Trin 2

Installation/opdatering af synkroniseringsmodulet

Installer eller opdater BrightBookingUserAdminTools PowerShell-modulet:

Install-Module -Name BrightBookingUserAdminTools -Force

Kommandoen '-Force' sørger for, at den nyeste version af modulet installeres, selv om der findes en tidligere installation. Hvis modulet allerede er installeret, skal PowerShell-sessionen genstartes.

Trin 3

Konfiguration: hent API-URL og API-nøgle

For at kunne synkronisere brugerne skal du have følgende oplysninger i GoBright Portal:

  • API-URL og API-nøgle
  • Navnet på den integration, der skal knyttes til brugerne

Følg disse trin for at finde API-URL'en og API-nøglen:

  • Log ind med en managerkonto i GoBright
  • Gå til Administrationscenter > Integrationer > API-adgang
  • Generer en API-nøgle via 'Tilføj'-knappen. Vælg som type 'manager', og indtast en beskrivelse til senere brug.
    • Bemærk: Sørg for at gemme API-nøglen, da der ikke er nogen måde at gendanne den på.
  • API-URL'en er din GoBright , som kan findes i URL-linjen i din browser og under Admin center > Integrationer > API-adgang: API-URL https://[tenant-id].gobright.cloud/

Følg disse trin for at finde navnet på integrationen:

  • Log ind med en managerkonto i GoBright
  • Gå til Administrationscenter > Integrationer
  • Kopier navnet på den integration (Exchange/Office 365), som skal bruges til at linke brugerne til

Navnet på integrationen, API-URL'en og API-nøglen er nødvendige i de næste trin.

Trin 4

Konfigurer PowerShell-scriptet til synkronisering

I det sidste trin bygger du det egentlige script, som fortæller GoBright PowerShell-modulet, hvilke brugere du vil hente og pushe til dit GoBright . Dette kan gøres med Azure AD eller Active Directory.

GoBright gennemtvinger kommunikation ved hjælp af TLS 1.2. Afhængigt af det system, du bruger, sker det måske ikke automatisk. Se koden nedenfor, og implementer den i alle PowerShell-scripts, der kommunikerer med GoBright.

Tilføj også $ErrorActionPreference for at sikre, at det stopper scriptet, når der opstår en fejl. Glem ikke at tilføje nedenstående linjer i hvert af dine scripts.

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

Vælg en af de forklaringer på manuskriptet, som passer på din situation nedenfor.

Script til Azure AD-synkronisering ved hjælp af Microsoft.Graph-modulet

Trin 4.1: Connect til dit Azure AD

Start PowerShell, og opret forbindelse til dit Azure AD via kommandoen:

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

Trin 4.2: Test udvælgelsen af brugere

Nedenfor finder du flere eksempler på kommandoer, som du kan tilpasse, så de passer til din situation.

Disse kommandoer vil endnu ikke opdatere brugerne i GoBright, fordi de indeholder parameteren '-WhatIf'.

Eksempel på synkroniseringskommandoer:

Behandl brugere og tilføj brugerroller i GoBright baseret på deres gruppemedlemskab i 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

Tilgængelige parametre for Push-AzureADUsersToBB

Du kan bruge følgende parametre i kommandoen 'Push-AzureADUsersToBB':

-ADUserSpecificUsername BrugerPrincipalName
(valgfrit)

Som standard godkendes brugeren med brugerens primære e-mailadresse til Microsoft Exchange Server eller Office365.

Angiv denne værdi for at bruge en anden måde at godkende brugeren på til Microsoft Exchange Server eller Office365:
UserPrincipalName for at bruge UPN.

-ADUserPincodePropertyName
(valgfrit)

Angiv et feltnavn på et felt i Active Directory, som du vil bruge som "pinkode" (skal være numerisk, mindst 4 cifre, og skal være unik).

-ADUserMobilePropertyName
(valgfrit)

Angiv et feltnavn på et felt i Active Directory, som du vil bruge til at få brugernes mobilnummer (f.eks. til meddelelse om digital modtagelse)
Vil som standard bruge standardfeltet 'Mobil'.

-ADUserNFCIdPropertyName
(valgfrit)

Angiv et feltnavn for et felt i Active Directory, som du vil bruge til at få NFC-identifikatoren for den pågældende bruger.
Bemærk, at det skal være i HEX-format, f.eks: XX:XX:XX:XX:XX:XX .

-ADUserDefaultCostCenterId OrNamePropertyName
(valgfrit)

Angiv et feltnavn på et felt i Active Directory, som du vil bruge til at indstille standardomkostningscenteret for den pågældende bruger. Du kan angive navnet eller id'et ('guid') på omkostningscentret, hvor navnet er mest almindeligt brugt.

-GroupUserRoleMapping

Denne parameter giver dig mulighed for at tildele en rolle til en bruger i platformen baseret på et gruppemedlemskab i Azure AD.
Du skal levere en hashtable (en nøgle+værdiliste), hvor nøglen er gruppens fulde FQN, og værdien er rolenavnet i platformen.

Se eksemplet nedenfor.

-UserRoleNameForNewUsers
(valgfrit)

Valgfrit navn på en eksisterende rolle i portalen, der skal bruges, når nye brugere oprettes via denne synkronisering.

-DeactivateExistingUsersIn
SameIntegrationThatAreNotLoaded
(valgfrit)

Valgfri kontakt til automatisk deaktivering af brugere, der ikke længere er i de valgte brugere fra ActiveDirectory, men som stadig findes i portalen.
Brug denne kontakt til automatisk at deaktivere dem.
Kun brugere i samme integration tages i betragtning (se parameter: BrightBookingIntegrationName).

-IncludeUsersWithoutAzureAD
AssignedLicensesOrAssignedPlans

Inkluder brugere, der ikke har Azure AD-licenser tildelt (ville ellers være inkluderet som inaktive) eller Azure AD-planer tildelt (ville ellers være helt udelukket). Bemærk, at inkludering af disse brugere kan resultere i utilsigtede 'brugere' som serviceacounts, roommailbox-brugere osv. Det kan afhjælpes ved at filtrere brugerne, før de indtastes i denne kommando.

-BrightBookingApiUrl
(påkrævet)
API-url'en, som du fandt i trin 3
-BrightBookingApiKey
(påkrævet)
API-url'en, som du fandt i trin 3
-BrightBookingIntegrationName
(påkrævet)
API-url'en, som du fandt i trin 3
-WhatIf
(valgfrit)
Brug parameteren '-WhatIf' til kun at teste og se, men ikke faktisk sende data til dit GoBright .

Trin 4.2: Kør den faktiske synkronisering

Når listen over brugere er filtreret korrekt, kan du udføre den rigtige synkronisering ved at fjerne parameteren '-WhatIf'.

Så udfør nu den samme kommando, men uden '-WhatIf', og den vil behandle brugerne i dit GoBright .

Trin 4.3: Planlæg integrationen til at køre med jævne mellemrum via Windows task scheduler

For at kunne køre scriptet uden opsyn skal du på en eller anden måde logge ind automatisk.
Den anbefalede måde at bruge uovervåget login på, kan gøres via certifikater, via app-registrering i 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!"

Admin-samtykke i AzureAD

Gå til Azure-portalen, og åbn den oprettede virksomhedsapplikation for uovervåget login, og vælg API-tilladelse > Giv administratortilladelse til "Dit domæne".

Nu kan du bruge følgende måde til automatisk at logge ind på dit Azure AD med den uovervågede login-metode og teste dit script via '-WhatIf', før du kører det faktiske brugersynkroniseringsscript:

[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

Følg derefter disse trin for at synkronisere brugerne fra Active Directory efter en tidsplan:

  • Tag den kommando, du har komponeret (se tidligere trin), og gem den i en .ps1-fil:
    • Opret en .ps1-fil (f.eks. UsersToBrightBooking.ps1) i en mappe, du foretrækker
    • Åbn filen med en editor, for eksempel 'notepad'
    • Indsæt login-scriptet for automatisk at logge ind på dit Azure AD
    • Indsæt den fulde kommando i filen
    • Gem filen
  • Udfør filen for at se, om den er vellykket
  • Opret en opgave i Windows' opgaveplanlægning:
    • Åbn Windows' opgaveplanlægning
    • Opret en opgave
    • Indstil en tidsplan, f.eks. en gang om dagen eller hver 4. time
    • Tilføj en handling 'Start et program':
      • Program/script:
        Powershell.exe
      • Parametre:
        -windowstyle minimized -c "powershell -c .[Navnet på den oprettede .ps1-fil] -verbose >> ExportToGoBright_Output.txt 2>&1″
      • Start in:
        Udfyld 'start in' med placeringen af scriptet, f.eks: C:scripts

"Script

"]

Trin 4.1: Connect til dit Azure AD

Start PowerShell, og opret forbindelse til dit Azure AD via standardkommandoen 'Connect'.

AzureAD powershell-modul er forældet

Bemærk, at AzureAD powershell-modulet er forældet, og at du skal migrere til Microsoft.Graph powershell-modulet (se ovenfor i denne artikel).

Trin 4.2: Test udvælgelsen af brugere

Kommandoen til at hente oplysningerne fra Active Directory og behandle dem i BrightBooking er:

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

Du kan bruge følgende parametre i kommandoen 'Push-AzureADUsersToBB':

-ADUserSpecificUsername BrugerPrincipalName
(valgfrit)

Som standard godkendes brugeren med brugerens primære e-mailadresse til Microsoft Exchange Server eller Office365.

Angiv denne værdi for at bruge en anden måde at godkende brugeren på til Microsoft Exchange Server eller Office365:
UserPrincipalName for at bruge UPN.

-ADUserPincodePropertyName
(valgfrit)

Angiv et feltnavn på et felt i Active Directory, som du vil bruge som "pinkode" (skal være numerisk, mindst 4 cifre, og skal være unik).

-ADUserMobilePropertyName
(valgfrit)

Angiv et feltnavn på et felt i Active Directory, som du vil bruge til at få brugernes mobilnummer (f.eks. til meddelelse om digital modtagelse)
Vil som standard bruge standardfeltet 'Mobil'.

-ADUserNFCIdPropertyName
(valgfrit)

Angiv et feltnavn for et felt i Active Directory, som du vil bruge til at få NFC-identifikatoren for den pågældende bruger.
Bemærk, at det skal være i HEX-format, f.eks: XX:XX:XX:XX:XX:XX .

-ADUserDefaultCostCenterId OrNamePropertyName
(valgfrit)

Angiv et feltnavn på et felt i Active Directory, som du vil bruge til at indstille standardomkostningscenteret for den pågældende bruger. Du kan angive navnet eller id'et ('guid') på omkostningscentret, hvor navnet er mest almindeligt brugt.

-GroupUserRoleMapping

Denne parameter giver dig mulighed for at tildele en rolle til en bruger i platformen baseret på et gruppemedlemskab i Azure AD.
Du skal levere en hashtable (en nøgle+værdiliste), hvor nøglen er gruppens fulde FQN, og værdien er rolenavnet i platformen.

Se eksemplet nedenfor.

-UserRoleNameForNewUsers
(valgfrit)

Valgfrit navn på en eksisterende rolle i portalen, der skal bruges, når nye brugere oprettes via denne synkronisering.

-DeactivateExistingUsersIn
SameIntegrationThatAreNotLoaded
(valgfrit)

Valgfri kontakt til automatisk deaktivering af brugere, der ikke længere er i de valgte brugere fra ActiveDirectory, men som stadig findes i portalen.
Brug denne kontakt til automatisk at deaktivere dem.
Kun brugere i samme integration tages i betragtning (se parameter: BrightBookingIntegrationName).

-IncludeUsersWithoutAzureAD
AssignedLicensesOrAssignedPlans

Inkluder brugere, der ikke har Azure AD-licenser tildelt (ville ellers være inkluderet som inaktive) eller Azure AD-planer tildelt (ville ellers være helt udelukket). Bemærk, at inkludering af disse brugere kan resultere i utilsigtede 'brugere' som serviceacounts, roommailbox-brugere osv. Det kan afhjælpes ved at filtrere brugerne, før de indtastes i denne kommando.

-BrightBookingApiUrl
(påkrævet)
API-url'en, som du fandt i trin 3
-BrightBookingApiKey
(påkrævet)
API-url'en, som du fandt i trin 3
-BrightBookingIntegrationName
(påkrævet)
API-url'en, som du fandt i trin 3
-WhatIf
(valgfrit)
Brug parameteren '-WhatIf' til kun at teste og se, men ikke faktisk sende data til dit GoBright .

Nedenfor kan du finde flere eksempler på kommandoer, som du kan tilpasse, så de passer til din situation.

Disse kommandoer vil endnu ikke opdatere brugere i systemet, så det er testkommandoer, fordi de indeholder parameteren '-WhatIf'.

Eksempel på testkommandoer:

Behandl alle brugere i Azure AD til GoBright:

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

Behandl brugere med UPN'er, der slutter med 'ditdomæne.com', til 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

Behandl brugere med et NFC-id og en pinkode i en brugerdefineret attribut, og bemærk, at navnet udvidelsesattributten skal være identisk med navnet i 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

Behandl brugere og tilføj brugerroller i GoBright baseret på deres gruppemedlemskab i 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

Behandl alle brugere undtagen dem, der er medlem af en bestemt gruppe i 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

Trin 4.2: Kør den faktiske synkronisering

Når listen over brugere er filtreret korrekt, kan du udføre den rigtige synkronisering ved at fjerne parameteren '-WhatIf'.

Så udfør nu den samme kommando, men uden '-WhatIf', og den vil behandle brugerne i dit GoBright .

Trin 4.3: Planlæg integrationen til at køre med jævne mellemrum via Windows task scheduler

For at kunne køre scriptet uden opsyn skal du på en eller anden måde logge ind automatisk.

Anbefalet metode til uovervåget login:
Den anbefalede måde at foretage uovervåget login på er ved at oprette en registreret app i Azure AD og oprette forbindelse til denne 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

Klik på dette link for at få flere oplysninger.

Til testformål kan du bruge følgende måde til automatisk at logge ind på dit Azure AD med den uovervågede login-metode og teste dit script, før du kører det egentlige brugersynkroniseringsscript:

$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

Bemærk: Når du får en fejl i PowerShell om, at der ikke er tilstrækkelige rettigheder til at køre scriptet, skal du kontrollere de rettigheder, der skal tilføjes til appen. Læs følgende Microsoft-artikel for at få flere oplysninger: 'Trin 5: Tildel Azure AD-roller til applikationen ': https://docs.microsoft.com/en-us/powershell/exchange/app-only-auth-powershell-v2?view=exchange-ps

Følg derefter disse trin for at synkronisere brugerne fra Active Directory efter en tidsplan:

  • Tag den kommando, du har komponeret (se tidligere trin), og gem den i en .ps1-fil:
    • Opret en .ps1-fil (f.eks. UsersToBrightBooking.ps1) i en mappe, du foretrækker
    • Åbn filen med en editor, for eksempel 'notepad'
    • Indsæt login-scriptet for automatisk at logge ind på dit Azure AD
    • Indsæt den fulde kommando i filen
    • Gem filen
  • Udfør filen for at se, om den er vellykket
  • Opret en opgave i Windows' opgaveplanlægning:
    • Åbn Windows' opgaveplanlægning
    • Opret en opgave
    • Indstil en tidsplan, f.eks. en gang om dagen eller hver 4. time
    • Tilføj en handling 'Start et program':
      • Program/script:
        Powershell.exe
      • Parametre:
        -windowstyle minimized -c "powershell -c .[Navnet på den oprettede .ps1-fil] -verbose >> ExportToGoBright_Output.txt 2>&1″
      • Start in:
        Udfyld 'start in' med placeringen af scriptet, f.eks: C:scripts

Script til synkronisering af Active Directory

Trin 4.1: Test udvælgelsen af brugere

Kommandoen til at hente oplysningerne fra Active Directory og behandle dem i GoBright er:

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

Du kan bruge følgende parametre i kommandoen 'Push-ADUsersToBB':

-Filter
(påkrævet)
Filterbetingelsen for at filtrere de brugere, du vil synkronisere(mere dokumentation tilgængelig)
-SearchBase
(valgfrit)
Angiver den Active Directory-sti, der skal søges under(mere dokumentation tilgængelig)

-ADSpecificUsername
(valgfrit)

Som standard godkendes brugeren med brugerens primære e-mailadresse til Microsoft Exchange Server eller Office365.

Angiv disse værdier for at bruge en anden måde at godkende brugeren på til Microsoft Exchange Server eller Office365:
DomainPlusUsername for at bruge DOMAINusername
UserPrincipalName for at bruge UPN.

-ADUserPincodePropertyName
(valgfrit)

Angiv et feltnavn på et felt i Active Directory, som du vil bruge som "pinkode" (skal være numerisk, minimum 4 cifre, og skal være unik).

-ADUserMobilePropertyName
(valgfrit)

Angiv et feltnavn på et felt i Active Directory, som du vil bruge til at få brugernes mobiltelefonnummer (f.eks. til meddelelse om digital modtagelse)
Vil som standard bruge standardfeltet 'Mobile'.

-ADUserNFCIdPropertyName
(valgfrit)

Angiv et feltnavn på et felt i Active Directory, som du vil bruge til at få NFC-identifikatoren for den pågældende bruger.

Bemærk, at det skal være i HEX-format, f.eks: XX:XX:XX:XX:XX:XX.

-ADUserDefaultCostCenterId OrNamePropertyName
(valgfrit)

Angiv et feltnavn på et felt i Active Directory, som du vil bruge til at indstille standardomkostningscenteret for den pågældende bruger. Du kan angive navnet eller id'et ('guid') på omkostningscentret, hvor navnet er mest almindeligt brugt.

-UserRoleNameForNewUsers
(valgfrit)

Valgfrit navn på en eksisterende rolle i platformen, der skal bruges, når nye brugere oprettes via denne synkronisering.

-UserDefaultRoleName
(valgfrit)

Indstil standardrollenavnet for alle brugere, der ikke har et match i 'GroupUserRoleMapping' (se nedenfor).

-GroupUserRoleMapping
(valgfri)

Denne parameter giver dig mulighed for at tildele en rolle til en bruger på platformen baseret på et gruppemedlemskab i ActiveDirectory.
Du skal levere en hashtable (en nøgle+værdiliste), hvor nøglen er gruppens fulde FQN, og værdien er rolenavnet på platformen.

Se eksemplet nedenfor.

-DeactivateExistingUsersIn
SameIntegrationThatAreNotLoaded
(valgfrit)

Valgfri kontakt til automatisk deaktivering af brugere, der ikke længere er i de valgte brugere fra ActiveDirectory, men som stadig findes i portalen.
Brug denne kontakt til automatisk at deaktivere dem.
Kun brugere i samme integration tages i betragtning (se parameter: BrightBookingIntegrationName).

-BrightBookingApiUrl
(påkrævet)
API-url'en, som du fandt i trin 3
-BrightBookingApiKey
(påkrævet)
API-url'en, som du fandt i trin 3
-BrightBookingIntegrationName
(påkrævet)
API-url'en, som du fandt i trin 3
-WhatIf
(valgfrit)
Brug parameteren '-WhatIf' til kun at teste og se, men ikke faktisk sende data til dit GoBright .

Nedenfor kan du finde flere eksempler på kommandoer, som du kan tilpasse, så de passer til din situation.

Disse kommandoer vil endnu ikke opdatere brugere i systemet, så det er testkommandoer, fordi de indeholder parameteren '-WhatIf'.

Eksempel på testkommandoer:

Behandl brugere med UPN'er, der slutter med 'ditdomæne.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

Behandl brugere med UPN'er, der slutter med 'yourdomain.com', og brug feltet 'PersonnelNumber' i ActiveDirectory som pinkode for brugerne:

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

Behandl brugere, som er medlemmer af en bestemt gruppe i en 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

Behandl brugere, som er medlemmer af en bestemt gruppe i en OU (Organizational Unit), og indstil en bestemt rolle baseret på deres gruppemedlemskab:

$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

Behandl brugere, som er medlemmer af en bestemt gruppe i en OU (Organizational Unit), med [domain][username] som autentificeringsbrugernavn:

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

Trin 4.2: Kør den faktiske synkronisering

Når listen over brugere er filtreret korrekt, kan du udføre den rigtige synkronisering ved at fjerne parameteren '-WhatIf'.

Så udfør nu den samme kommando, men uden '-WhatIf', og den vil behandle brugerne i dit GoBright .

Trin 4.3: Planlæg integrationen til at køre med jævne mellemrum via Windows task scheduler

Følg disse trin for at synkronisere brugerne fra Active Directory efter en tidsplan:

  • Tag den kommando, du har komponeret (se tidligere trin), og gem den i en .ps1-fil:
    • Opret en .ps1-fil (f.eks. UsersToBrightBooking.ps1) i en mappe, du foretrækker
    • Åbn filen med en editor, for eksempel 'notepad'
    • Indsæt den fulde kommando i filen
    • Gem filen
  • Udfør filen for at se, om den er vellykket
  • Opret en opgave i Windows' opgaveplanlægning:
    • Åbn Windows' opgaveplanlægning
    • Opret en opgave
    • Indstil en tidsplan, f.eks. en gang om dagen eller hver 4. time
    • Tilføj en handling 'Start et program':
      • Program/script:
        Powershell.exe
      • Parametre:
        -windowstyle minimized -c "powershell -c .[Navnet på den oprettede .ps1-fil] -verbose >> ExportToGoBright_Output.txt 2>&1″
      • Start in:
        Udfyld 'start in' med placeringen af scriptet, f.eks: C:scripts

Synkroniseringsinterval til test

Rådet for synkroniseringsintervallet er et omfang af følgende beløb nedenfor:

  • 0 til 2000 brugere: synkroniseringen kan køre 4 gange om dagen
  • Over 2000 brugere: synkroniseringen kan køre 2 gange om dagen

For at teste ca. 3-4 gange i løbet af en time anbefaler vi kraftigt at køre scriptet med små grupper på 10 brugere pr. kørsel.

Denne artikel kommer fra GoBright hjælpecenter.

Se den oprindelige artikel

Ofte Stillede Spørgsmål

Spørg os om hvad som helst! Find svarene på de oftest stillede spørgsmål her.

Gennemse de ofte stillede spørgsmål

Hjælpecenter

En guldgrube for alle IT- og Facility Managers. Dyk ned i det tekniske omkring vores produkter og løsninger.

Besøg hjælpecentret

Nyhedsbrev

Vil du holde dig orienteret om al udvikling inden for smart office og vores nye funktioner? Tilmeld dig nu.

Tilmeld dig nu