Brukersynkronisering med Azure AD/Active Directory
Denne artikkelen er tilgjengelig i videoformat, så vel som en skriftlig artikkel som inneholder flere detaljer.
Merk: På grunn av endringer i PowerShell-modulen er deler av videoen utdatert. Videoen kan fortsatt brukes som referanse. Koden i denne artikkelen er oppdatert.
Azure AD / Active Directory-synkroniseringen er i stand til automatisk å opprette, oppdatere og deaktivere brukere fra Azure AD eller Active Directory.
Vi har laget 'BrightBookingUserAdminTools' PowerShell-modulen, som håndterer denne logikken. Ved å lage en (planlagt) oppgave med de riktige PowerShell-kommandoene, kan du sende denne informasjonen regelmessig til GoBright fra serveren din.
Note: GoBright mottar kun data gjennom dette BrightBookingUserAdminTools. GoBright har ikke tillatelser til å sende data tilbake til Azure AD / Active Directory.
GoBright som en Enterprise Application i Azure AD
Før du fortsetter avsnittet nedenfor, vil vi gjerne ta opp at du kan konfigurere GoBright som en bedriftsapplikasjon i Azure AD. Dette lar deg opprette/oppdatere brukere til plattformen automatisk og aktivere SSO enkelt. Vi anbefaler på det sterkeste å følge trinnene i artikkelen nedenfor før du fortsetter: GoBright as an Enterprise Application (Azure AD)
Introduksjon
Integrasjonslogikken er tilgjengelig som en PowerShell-modul, via PowerShellGallery, som ' BrightBookingUserAdminTools '.
'BrightBookingUserAdminTools' PowerShell-modulen bør installeres på en maskin (server) i domenet ditt.
Når den er konfigurert, følger den følgende trinn, hver gang den kjører:
- Få brukerne fra Azure AD eller Active Directory, filtrert etter dine preferanser, for eksempel filtrert etter gruppemedlemskap
- Disse brukerne sendes til GoBright og umiddelbart opprettet eller oppdatert
- Hvis brukeren er deaktivert i Azure AD eller Active Directory, vil den også bli deaktivert i GoBright
- Brukere som ikke leses fra Azure AD eller Active Directory er heller ikke oppdatert i GoBright
Følg trinnene nedenfor for å installere og konfigurere synkroniseringen Planlagt i Task Scheduler på en lokal server!
PowerShell-skriptet kan også planlegges til å kjøre på Azure Automation Runbook. Dokumentasjonen for Azure Runbook finner du her .
Trinn 1
Installer forutsetninger
BrightBookingUserAdminTools-modulen har følgende avhengigheter:
- PowerShell versjon 5 eller høyere
- Følgende PowerShell-moduler:
- PowerShellGallery
- ActiveDirectory
- Azure AD
- Maskinen (serveren) skal være koblet til ditt Windows-domene
Følg de neste trinnene for å installere avhengighetene:
- Logg inn på maskinen (serveren) der du vil installere oppgaven. (denne maskinen skal være koblet i Windows-domenet).
- Start PowerShell på den maskinen, som 'administrator':
- Sjekk om PowerShell 5 er installert:
- Utfør følgende kommando:
$PSVersionTable.PSVersion - I resultatet du får, bør ' Major ' være ' 5 ' eller høyere.
- Hvis 'Major' er lavere enn '5', følg disse trinnene:
- Installer Windows Management Framework 5 (dette inkluderer PowerShell 5):
Last ned Windows Management Framework 5 - Merknad 1: Hvis du får feilmeldingen "Oppdateringen gjelder ikke for datamaskinen din", har du sannsynligvis valgt feil nedlasting, vennligst se denne artikkelen .
- Merknad 2: Windows Management Framework 5 avhenger av .NET Framework 4.5.
- Merknad 3: Omstart er sannsynligvis nødvendig.
- Etter installasjonen vennligst sjekk om 'Major'er'5' eller høyere:
$PSVersionTable.PSVersion
- Installer Windows Management Framework 5 (dette inkluderer PowerShell 5):
- Utfør følgende kommando:
- PowerShell ExecutionPolicy (valgfritt)
- Sett PowerShell ExecutionPolicy til Ubegrenset
-
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
-
- Sett PowerShell ExecutionPolicy til Ubegrenset
- Tving TLS 1.2-tilkobling:
-
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$ErrorActionPreference = "Stop"
-
- Installer PowerShellGallery PowerShell-modulen:
- Utfør følgende kommandoer i PowerShell (kjører som administrator)
- Installer NuGet PackageProvider:
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force - Konfigurer PowerShellGallery som en pålitelig kilde:
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted - Installer PowerShellGet-modulen:
Import-Module -Name PowerShellGet
- Hvis du ønsker å synkronisere med Active Directory: Installer ActiveDirectory PowerShell-modulen:
- ActiveDirectory PowerShell-modulen er en del av Remote Server Administration Tools (RSAT).
- ActiveDirectory PowerShell-modulen er en del av Remote Server Administration Tools (RSAT).
- Hvis du ønsker å synkronisere med Azure AD: Installer Microsoft.Graph PowerShell-modulen:
- Utfør følgende kommandoer i PowerShell (kjører som administrator)
- Merk: .Net Framework 4.7.2 eller høyere kreves, for mer dokumentasjon se: https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation?view=graph-powershell-1.0
- Installer de aktuelle Microsoft.Graph-modulene:
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
Trinn 2
Installasjon/oppdatering av synkroniseringsmodulen
Installer eller oppdater BrightBookingUserAdminTools PowerShell-modulen:
Install-Module -Name BrightBookingUserAdminTools -Force
Kommandoen ' -Force ' sørger for at den nyeste versjonen av modulen er installert selv når en tidligere installasjon eksisterer. Når modulen allerede var installert, må PowerShell-økten startes på nytt.
Trinn 3
Konfigurasjon: få API-URL og API-nøkkel
For å kunne synkronisere brukerne, må du få følgende informasjon i GoBright Portal:
- API-URL og API-nøkkel
- Navnet på integrasjonen som skal knyttes til brukerne
Følg disse trinnene for å finne API URL og API-nøkkel:
- Logg på med en managerkonto i GoBright portal
- Gå til Administrasjonssenter > Integrasjoner > API-tilgang
- Generer en API-nøkkel via 'Legg til'-knappen. Velg som type 'manager' og skriv inn en beskrivelse for senere referanse
- Merk: sørg for at du lagrer API-nøkkelen, siden det ikke er mulig å gjenopprette den
- 'API URL' er din GoBright miljø-URL som finnes i URL-linjen i nettleseren din og under Administrasjonssenter > Integrasjoner > API-tilgang : API-url https:// [tenant-id] . gobright .cloud/
Følg disse trinnene for å finne navnet på integrasjonen:
- Logg på med en managerkonto i GoBright portal
- Gå til Administrasjonssenter > Integrasjoner
- Kopier navnet på integrasjonen (Exchange/Office 365) som skal brukes til å koble brukerne til
Navnet på integrasjonen, API-URLen og API-nøkkelen er nødvendig i de neste trinnene.
Trinn 4
Konfigurer PowerShell-skriptet for synkronisering
I det siste trinnet vil du bygge selve skriptet for å fortelle GoBright PowerShell-modul hvilke brukere du ønsker å få og skyve til din GoBright miljø. Dette kan gjøres med Azure AD eller Active Directory.
De GoBright plattformen håndhever kommunikasjon ved hjelp av TLS 1.2. Avhengig av systemet du bruker, kan dette ikke skje automatisk. Se koden nedenfor og implementer dette i hvert PowerShell-skript som kommuniserer med GoBright .
Legg også til $ErrorActionPreference for å sikre at den stopper skriptet hver gang det oppstår en feil. Ikke glem å legge til linjene nedenfor i hvert av skriptene dine.
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$ErrorActionPreference = "Stopp"
Velg en av forklaringene til skriptet som gjelder for din situasjon nedenfor.
Skript for Azure AD-synkronisering ved hjelp av Microsoft.Graph-modulen
Trinn 4.1: Connect til din Azure AD
Start PowerShell, og koble til Azure AD-en din via kommandoen:
Connect-MgGraph -Scopes 'User.Read.All','Group.Read.All','GroupMember.Read.All'
Trinn 4.2: Test utvalget av brukere
Nedenfor finner du flere eksempelkommandoer, du kan justere dem for å passe din situasjon.
Disse kommandoene vil faktisk ikke oppdatere brukere i GoBright , fordi de inkluderer '-WhatIf'-parameteren.
Eksempel på synkroniseringskommandoer:
Behandle brukere og legg til brukerrollene innenfor GoBright basert på deres gruppemedlemskap 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
Tilgjengelige parametere for Push-AzureADUsersToBB
Du kan bruke følgende parametere i kommandoen 'Push-AzureADUsersToBB':
|
– ADUserSpecificUsername UserPrincipalName |
Som standard vil brukeren autentisere med den primære e-postadressen til brukeren til Microsoft Exchange Server eller Office365. Oppgi denne verdien for å bruke en annen måte å autentisere brukeren på til Microsoft Exchange Server eller Office365: |
| -ADUserPincodePropertyName (valgfri) |
Spesifiser et feltnavn for et felt i Active Directory som du vil bruke som en 'pinkode' (må være numerisk, minimum 4 sifre og må være unik). |
| -ADUserMobilePropertyName (valgfri) |
Angi et feltnavn på et felt i Active Directory som du vil bruke for å få mobilnummeret til brukerne (f.eks. for varsling av digitalt mottak) |
| -ADUserNFCIdPropertyName (valgfri) |
Angi et feltnavn for et felt i Active Directory som du vil bruke for å få NFC-identifikatoren for den brukeren. |
| -ADUserDefaultCostCenterId OrNamePropertyName (valgfri) |
Angi et feltnavn for et felt i Active Directory som du vil bruke til å angi standard kostnadssenter for den brukeren. Du kan spesifisere navnet eller id ('guide') til kostnadssenteret, der navnet er mest brukt. |
| -GroupUserRoleMapping |
Denne parameteren gir deg muligheten til å tilordne en rolle til en bruker i plattformen, basert på et gruppemedlemskap i Azure AD. Se eksempelet nedenfor. |
| -UserRoleNameForNewUsers (valgfri) |
Valgfritt navn på en eksisterende rolle i portalen som skal brukes når nye brukere opprettes gjennom denne synkroniseringen. |
| -Deaktiver eksisterende brukere SameIntegrationThatAreNotLoaded (valgfri) |
Valgfri bryter for å automatisk deaktivere brukere som ikke er i de valgte brukerne fra ActiveDirectory lenger, men som fortsatt eksisterer i portalen. |
| -Inkluder brukere uten AzureAD AssignedLicensesOrAssignedPlans |
Inkluder brukere som ikke har tildelt Azure AD-lisenser (ellers ville blitt inkludert som inaktive) eller Azure AD-planer tilordnet (ellers ville bli fullstendig ekskludert). Vær oppmerksom på at å inkludere disse brukerne kan føre til utilsiktede 'brukere' som servicekontoer, rompostboksbrukere osv. Dette kan reduseres ved å filtrere brukerne før de mates inn i denne kommandoen. |
| -BrightBookingApiUrl (obligatorisk) |
API-nettadressen, som funnet i trinn 3 |
| -BrightBookingApiKey (obligatorisk) |
API-nettadressen, som funnet i trinn 3 |
| -BrightBookingIntegrationName (obligatorisk) |
API-nettadressen, som funnet i trinn 3 |
| -Hva hvis (valgfri) |
Bruk '-WhatIf'-parameteren til kun å teste og se, men ikke sende data til din GoBright miljø |
Trinn 4.2: Kjør selve synkroniseringen
Når listen over brukere er riktig filtrert, kan du utføre den virkelige synkroniseringen ved å fjerne '-WhatIf'-parameteren.
Så kjør nå den samme kommandoen, men uten '-WhatIf' og den vil behandle brukerne til din GoBright miljø.
Trinn 4.3: Planlegg integrasjonen til å kjøre periodisk via Windows oppgaveplanlegger
For å kunne kjøre skriptet uten tilsyn bør du på en eller annen måte logge på automatisk.
Den anbefalte måten å bruke uovervåket pålogging på, dette kan gjøres via sertifikater, via appregistrering 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!"
Administratorsamtykke i AzureAD
Gå til Azure-portalen og åpne den opprettede bedriftsapplikasjonen for uovervåket pålogging og velg API-tillatelse > Gi administratorsamtykke for "Ditt domene"
Nå kan du bruke følgende måte for automatisk å logge på Azure AD med den uovervåkede påloggingsmetoden og teste skriptet ditt via '-WhatIf' før du kjører det faktiske brukersynkroniseringsskriptet:
[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 deretter disse trinnene for å synkronisere brukerne fra Active Directory på en tidsplan:
- Ta kommandoen du har laget (se tidligere trinn), og lagre den i en .ps1-fil:
- Opprett en .ps1-fil (f.eks. UsersToBrightBooking.ps1) i en mappe du foretrekker
- Åpne filen med en editor, for eksempel "notisblokk"
- Lim inn påloggingsskriptet for automatisk å logge på Azure AD
- Lim inn hele kommandoen i filen
- Lagre filen
- Kjør filen for å se om den er vellykket
- Opprett en oppgave i Windows-oppgaveplanleggeren:
- Åpne Windows oppgaveplanlegger
- Lag en oppgave
- Sett en tidsplan, for eksempel en gang om dagen, eller hver 4. time
- Legg til en handling "Start et program":
- Program/manus:
Powershell.exe - Parametere:
-windowstyle minimert -c "powershell -c . [Navn på den opprettede .ps1-filen] -verbose >> ExportToGoBright_Output.txt 2>&1″ - Start i:
Fyll "start in" med plasseringen av skriptet, for eksempel: C:scripts
- Program/manus:
"Manus
"]
Trinn 4.1: Connect til din Azure AD
Start PowerShell, og koble til Azure AD-en din via standard ' Connect -AzureAD'-kommandoen.
AzureAD powershell-modulen er avviklet
Vær oppmerksom på at AzureAD powershell-modulen er utdatert. Migrer til Microsoft.Graph powershell-modulen (se ovenfor i denne artikkelen)
Trinn 4.2: Test utvalget av brukere
Kommandoen for å hente informasjonen fra Active Directory og behandle den 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 bruke følgende parametere i kommandoen 'Push-AzureADUsersToBB':
|
– ADUserSpecificUsername UserPrincipalName |
Som standard vil brukeren autentisere med den primære e-postadressen til brukeren til Microsoft Exchange Server eller Office365. Oppgi denne verdien for å bruke en annen måte å autentisere brukeren på til Microsoft Exchange Server eller Office365: |
| -ADUserPincodePropertyName (valgfri) |
Spesifiser et feltnavn for et felt i Active Directory som du vil bruke som en 'pinkode' (må være numerisk, minimum 4 sifre og må være unik). |
| -ADUserMobilePropertyName (valgfri) |
Angi et feltnavn på et felt i Active Directory som du vil bruke for å få mobilnummeret til brukerne (f.eks. for varsling av digitalt mottak) |
| -ADUserNFCIdPropertyName (valgfri) |
Angi et feltnavn for et felt i Active Directory som du vil bruke for å få NFC-identifikatoren for den brukeren. |
| -ADUserDefaultCostCenterId OrNamePropertyName (valgfri) |
Angi et feltnavn for et felt i Active Directory som du vil bruke til å angi standard kostnadssenter for den brukeren. Du kan spesifisere navnet eller id ('guide') til kostnadssenteret, der navnet er mest brukt. |
| -GroupUserRoleMapping |
Denne parameteren gir deg muligheten til å tilordne en rolle til en bruker i plattformen, basert på et gruppemedlemskap i Azure AD. Se eksempelet nedenfor. |
| -UserRoleNameForNewUsers (valgfri) |
Valgfritt navn på en eksisterende rolle i portalen som skal brukes når nye brukere opprettes gjennom denne synkroniseringen. |
| -Deaktiver eksisterende brukere SameIntegrationThatAreNotLoaded (valgfri) |
Valgfri bryter for å automatisk deaktivere brukere som ikke er i de valgte brukerne fra ActiveDirectory lenger, men som fortsatt eksisterer i portalen. |
| -Inkluder brukere uten AzureAD AssignedLicensesOrAssignedPlans |
Inkluder brukere som ikke har tildelt Azure AD-lisenser (ellers ville blitt inkludert som inaktive) eller Azure AD-planer tilordnet (ellers ville bli fullstendig ekskludert). Vær oppmerksom på at å inkludere disse brukerne kan føre til utilsiktede 'brukere' som servicekontoer, rompostboksbrukere osv. Dette kan reduseres ved å filtrere brukerne før de mates inn i denne kommandoen. |
| -BrightBookingApiUrl (obligatorisk) |
API-nettadressen, som funnet i trinn 3 |
| -BrightBookingApiKey (obligatorisk) |
API-nettadressen, som funnet i trinn 3 |
| -BrightBookingIntegrationName (obligatorisk) |
API-nettadressen, som funnet i trinn 3 |
| -Hva hvis (valgfri) |
Bruk '-WhatIf'-parameteren til kun å teste og se, men ikke sende data til din GoBright miljø |
Nedenfor finner du flere eksempelkommandoer, du kan justere dem slik du trenger for å passe din situasjon.
Disse kommandoene vil faktisk ikke oppdatere brukere i systemet ennå, så disse er testkommandoer, fordi de inkluderer '-WhatIf'-parameteren.
Eksempel på testkommandoer:
Behandle alle brukere 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
Behandle brukere med UPNs slutt på 'dittdomene.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
Behandle brukere med en NFC-ID og PIN-kode i et tilpasset attributt , merk at utvidelsesattributtnavnet må være identisk med det 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
Behandle brukere og legg til brukerrollene innenfor GoBright basert på deres gruppemedlemskap 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
Behandle alle brukere unntatt de som er medlem av 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
Trinn 4.2: Kjør selve synkroniseringen
Når listen over brukere er riktig filtrert, kan du utføre den virkelige synkroniseringen ved å fjerne '-WhatIf'-parameteren.
Så kjør nå den samme kommandoen, men uten '-WhatIf' og den vil behandle brukerne til din GoBright miljø.
Trinn 4.3: Planlegg integrasjonen til å kjøre periodisk via Windows oppgaveplanlegger
For å kunne kjøre skriptet uten tilsyn bør du på en eller annen måte logge på automatisk.
Anbefalt metode for uovervåket pålogging:
Den anbefalte måten å gjøre uovervåket pålogging på er å opprette en registrert app i Azure AD og koble til den appen:
#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
For mer informasjon vennligst klikk på denne lenken .
For testformål kan du bruke følgende måte for automatisk å logge på Azure AD med den uovervåkede påloggingsmetoden og teste skriptet før du kjører det faktiske brukersynkroniseringsskriptet:
$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
Merk: når du får en feil i PowerShell om at det ikke er nok rettigheter til å kjøre skriptet, må du sjekke rettighetene for å legge til appen. For mer informasjon, les følgende Microsoft-artikkel "Trinn 5: Tilordne Azure AD-roller til applikasjonen": https://docs.microsoft.com/en-us/powershell/exchange/app-only-auth-powershell-v2?view=exchange-ps
Følg deretter disse trinnene for å synkronisere brukerne fra Active Directory på en tidsplan:
- Ta kommandoen du har laget (se tidligere trinn), og lagre den i en .ps1-fil:
- Opprett en .ps1-fil (f.eks. UsersToBrightBooking.ps1) i en mappe du foretrekker
- Åpne filen med en editor, for eksempel "notisblokk"
- Lim inn påloggingsskriptet for automatisk å logge på Azure AD
- Lim inn hele kommandoen i filen
- Lagre filen
- Kjør filen for å se om den er vellykket
- Opprett en oppgave i Windows-oppgaveplanleggeren:
- Åpne Windows oppgaveplanlegger
- Lag en oppgave
- Sett en tidsplan, for eksempel en gang om dagen, eller hver 4. time
- Legg til en handling "Start et program":
- Program/manus:
Powershell.exe - Parametere:
-windowstyle minimert -c "powershell -c . [Navn på den opprettede .ps1-filen] -verbose >> ExportToGoBright_Output.txt 2>&1″ - Start i:
Fyll "start in" med plasseringen av skriptet, for eksempel: C:scripts
- Program/manus:
Skript for Active Directory-synkronisering
Trinn 4.1: Test utvalget av brukere
Kommandoen for å hente informasjonen fra Active Directory og behandle den inn 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 bruke følgende parametere i kommandoen 'Push-ADUsersToBB':
| -Filter (obligatorisk) |
Filterbetingelsen for å filtrere brukerne du ønsker å synkronisere ( mer dokumentasjon tilgjengelig ) |
| -SearchBase (valgfri) |
Spesifiserer Active Directory-banen søket under ( mer dokumentasjon tilgjengelig ) |
|
-ADSpecificUsername |
Som standard vil brukeren autentisere med den primære e-postadressen til brukeren til Microsoft Exchange Server eller Office365. Oppgi disse verdiene for å bruke en annen måte å autentisere brukeren på til Microsoft Exchange Server eller Office365: |
| -ADUserPincodePropertyName (valgfri) |
Angi et feltnavn for et felt i Active Directory som du vil bruke som en "pinkode" (må være numerisk, minimum 4 sifre og må være unik) |
| -ADUserMobilePropertyName (valgfri) |
Angi et feltnavn på et felt i Active Directory som du ønsker å bruke for å få mobiltelefonnummeret til brukerne (f.eks. for varsling av digitalt mottak) |
| -ADUserNFCIdPropertyName (valgfri) |
Angi et feltnavn for et felt i Active Directory som du vil bruke for å få NFC-identifikatoren for den brukeren. Vær oppmerksom på at den skal være i HEX-format, f.eks.: XX:XX:XX:XX:XX:XX. |
| -ADUserDefaultCostCenterId OrNamePropertyName (valgfri) |
Angi et feltnavn for et felt i Active Directory som du vil bruke til å angi standard kostnadssenter for den brukeren. Du kan spesifisere navnet eller id ('guide') til kostnadssenteret, der navnet er mest brukt. |
| -UserRoleNameForNewUsers (valgfri) |
Valgfritt navn på en eksisterende rolle i plattformen som skal brukes når nye brukere opprettes gjennom denne synkroniseringen. |
| -UserDefaultRoleName (valgfri) |
Angi standard rollenavn for alle brukere som ikke har samsvar i 'GroupUserRoleMapping' (se nedenfor) |
| -GroupUserRoleMapping (valgfri) |
Denne parameteren gir deg muligheten til å tildele en rolle til en bruker i plattformen, basert på et gruppemedlemskap i ActiveDirectory. Se eksempelet nedenfor. |
| -Deaktiver eksisterende brukere SameIntegrationThatAreNotLoaded (valgfri) |
Valgfri bryter for å automatisk deaktivere brukere som ikke er i de valgte brukerne fra ActiveDirectory lenger, men som fortsatt eksisterer i portalen. |
| -BrightBookingApiUrl (obligatorisk) |
API-nettadressen, som funnet i trinn 3 |
| -BrightBookingApiKey (obligatorisk) |
API-nettadressen, som funnet i trinn 3 |
| -BrightBookingIntegrationName (obligatorisk) |
API-nettadressen, som funnet i trinn 3 |
| -Hva hvis (valgfri) |
Bruk '-WhatIf'-parameteren til kun å teste og se, men ikke sende data til din GoBright miljø |
Nedenfor finner du flere eksempelkommandoer, du kan justere dem slik du trenger for å passe din situasjon.
Kommandoene vil faktisk ikke oppdatere brukere i systemet ennå, så disse er testkommandoer, fordi de inkluderer '-WhatIf'-parameteren.
Eksempel på testkommandoer:
Behandle brukere med UPNs slutt på 'dittdomene.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
Behandle brukere med UPN som slutter med 'dittdomene.com', og bruk 'PersonnelNumber'-feltet i ActiveDirectory som pinkode for brukerne:
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
Behandle brukere som er medlemmer av en bestemt gruppe i en OU (Organisasjonsenhet):
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
Behandle brukere som er medlemmer av en bestemt gruppe i en OU (Organisasjonsenhet) og angi en spesifikk rolle basert på deres gruppemedlemskap:
$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
Behandle brukere som er medlemmer av en bestemt gruppe i en OU (Organisasjonsenhet), med [domene][brukernavn] som autentiseringsbrukernavn:
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
Trinn 4.2: Kjør selve synkroniseringen
Når listen over brukere er riktig filtrert, kan du utføre den virkelige synkroniseringen ved å fjerne '-WhatIf'-parameteren.
Så kjør nå den samme kommandoen, men uten '-WhatIf' og den vil behandle brukerne til din GoBright miljø.
Trinn 4.3: Planlegg integrasjonen til å kjøre periodisk via Windows oppgaveplanlegger
Følg disse trinnene for å synkronisere brukerne fra Active Directory på en tidsplan:
- Ta kommandoen du har laget (se tidligere trinn), og lagre den i en .ps1-fil:
- Opprett en .ps1-fil (f.eks. UsersToBrightBooking.ps1) i en mappe du foretrekker
- Åpne filen med en editor, for eksempel "notisblokk"
- Lim inn hele kommandoen i filen
- Lagre filen
- Kjør filen for å se om den er vellykket
- Opprett en oppgave i Windows-oppgaveplanleggeren:
- Åpne Windows oppgaveplanlegger
- Lag en oppgave
- Sett en tidsplan, for eksempel en gang om dagen, eller hver 4. time
- Legg til en handling "Start et program":
- Program/manus:
Powershell.exe - Parametere:
-windowstyle minimert -c "powershell -c . [Navn på den opprettede .ps1-filen] -verbose >> ExportToGoBright_Output.txt 2>&1″ - Start i:
Fyll "start in" med plasseringen av skriptet, for eksempel: C:scripts
- Program/manus:
Synkroniseringsintervall for testing
Rådene for synkroniseringsintervallet er et omfang av følgende beløp nedenfor:
- 0 til 2000 brukere: synkroniseringen kan kjøres 4 ganger om dagen
- Over 2000 brukere: synkroniseringen kan kjøres 2 ganger om dagen
For å teste omtrent 3-4 ganger i løpet av en time anbefaler vi på det sterkeste å kjøre skriptet med små grupper på 10 brukere per kjøring.