Användarsynkronisering med Azure AD/Active Directory

Den här artikeln finns i videoformat samt en skriftlig artikel som innehåller mer information.
Observera: På grund av ändringar i PowerShell-modulen är delar av videon föråldrade. Videon kan fortfarande användas som referens. Koden i den här artikeln är uppdaterad.

Azure AD / Active Directory-synkroniseringen kan automatiskt skapa, uppdatera och inaktivera användare från Azure AD eller Active Directory.

Vi har skapat PowerShell-modulen "BrightBookingUserAdminTools" som hanterar denna logik. Genom att skapa en (planerad) uppgift med rätt PowerShell-kommandon kan du regelbundet skicka denna information till GoBright från din server.

Obs: GoBright tar endast emot data via detta BrightBookingUserAdminTools. GoBright har inte behörighet att skicka data tillbaka till din Azure AD / Active Directory.

GoBright som en företagsapplikation i Azure AD

Innan vi fortsätter med avsnittet nedan vill vi påpeka att du kan konfigurera GoBright en företagsapplikation inom Azure AD. Detta gör att du kan skapa/uppdatera användare på plattformen automatiskt och enkelt aktivera SSO. Vi rekommenderar starkt att du följer stegen i artikeln nedan innan du fortsätter: GoBright företagsapplikation (Azure AD)

Inledning

Integrationslogiken finns tillgänglig som en PowerShell-modul, via PowerShellGallery, som "BrightBookingUserAdminTools".

PowerShell-modulen "BrightBookingUserAdminTools" ska installeras på en maskin (server) i din domän.

När den är konfigurerad följer den följande steg varje gång den körs:

  1. Hämta användarna från Azure AD eller Active Directory, filtrerade efter dina önskemål, t.ex. filtrerade efter gruppmedlemskap
  2. Dessa användare skickas till GoBright och skapas eller uppdateras omedelbart
  3. Om användaren avaktiveras i Azure AD eller Active Directory kommer den också att avaktiveras i GoBright
  4. Användare som inte läses från Azure AD eller Active Directory uppdateras inte heller i GoBright

Följ stegen nedan för att installera och konfigurera synkroniseringen Schemalagd i Schemaläggaren på en lokal server!

PowerShell-skriptet kan också schemaläggas för att köras på Azure Automation Runbook. Dokumentationen för Azure Runbook finns här.

Steg 1

Installera förkunskapskrav

Modulen BrightBookingUserAdminTools har följande beroenden:

  • PowerShell version 5 eller högre
  • Följande PowerShell-moduler:
    • PowerShellGalleri
    • ActiveDirectory
    • Azure AD
  • Maskinen (servern) ska vara kopplad till din Windows-domän

Följ de följande stegen för att installera beroendena:

  1. Logga in på den maskin (server) där du vill installera uppgiften. (den här maskinen bör vara länkad i Windows-domänen).
  2. Starta PowerShell på den maskinen, som "administratör":
    klipp0001-279x300.jpg
  3. Kontrollera om PowerShell 5 är installerat:
    • Utför följande kommando:

      $PSVersionTable.PSVersion
    • I det resultat du får bör "Major" vara "5" eller högre.
    • Om 'Major' är lägre än '5', följ dessa steg:
      • Installera Windows Management Framework 5 (detta inkluderar PowerShell 5):
        Hämta Windows Management Framework 5
      • Obs 1: Om du får felmeddelandet "Uppdateringen är inte tillämplig på din dator" har du förmodligen valt fel nedladdning, se den här artikeln.
      • Anm. 2: Windows Management Framework 5 är beroende av .NET Framework 4.5.
      • Obs 3: Omstart är förmodligen nödvändig.
      • Efter installationen, kontrollera att "Major"är "5"eller högre:

        $PSVersionTable.PSVersion
  4. PowerShell ExecutionPolicy(valfritt)
    • Ställ in PowerShell ExecutionPolicy till obegränsad
      • Set-ExecutionPolicy -ExecutionPolicy Unrestricted
  5. Tvinga fram TLS 1.2-anslutning:
    • [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $ErrorActionPreference = "Stop"
  6. Installera PowerShellGallery PowerShell-modulen:
    • Utför följande kommandon i PowerShell (körs som administratör)
    • Installera NuGet PackageProvider:

      Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
    • Konfigurera PowerShellGallery som en betrodd källa:

      Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
    • Installera modulen PowerShellGet:

      Import-Module -Name PowerShellGet
  7. Om du vill synkronisera med Active Directory: Installera ActiveDirectory PowerShell-modulen:
  8. Om du vill synkronisera med Azure AD: Installera PowerShell-modulen för Microsoft.Graph:
    • Utför följande kommandon i PowerShell (körs som administratör)
    • Obs: .Net Framework 4.7.2 eller högre krävs, för mer dokumentation se: https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation?view=graph-powershell-1.0
    • Installera de tillämpliga Microsoft.Graph-modulerna:

      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

Steg 2

Installation/Uppdatering av synkroniseringsmodulen

Installera eller uppdatera PowerShell-modulen BrightBookingUserAdminTools:

Install-Module -Name BrightBookingUserAdminTools -Force

Kommandot "-Force" ser till att den senaste versionen av modulen installeras även om det finns en tidigare installation. Om modulen redan var installerad måste PowerShell-sessionen startas om.

Steg 3

Konfiguration: hämta API-URL och API-nyckel

För att kunna synkronisera användarna måste du få följande information i GoBright Portal:

  • API-URL och API-nyckel
  • Namnet på den integration som ska kopplas till användarna

Följ dessa steg för att hitta API-URL och API-nyckel:

  • Logga in med ett chefskonto i GoBright
  • Gå till Admin center > Integrationer > API-åtkomst
  • Generera en API-nyckel genom att klicka på knappen "Lägg till". Välj som typ 'manager' och ange en beskrivning för senare referens
    • Obs: se till att du sparar API-nyckeln, eftersom det inte finns något sätt att återställa den
  • API-URL:en är din GoBright som finns i URL-fältet i din webbläsare och under Admin center > Integrationer > API-åtkomst: API-URL https://[tenant-id].gobright.cloud/

Följ dessa steg för att hitta namnet på integrationen:

  • Logga in med ett chefskonto i GoBright
  • Gå till Admin center > Integrationer
  • Kopiera namnet på den integration (Exchange/Office 365) som ska användas för att koppla användarna till

Namnet på integrationen, API-URL:en och API-nyckeln behövs i nästa steg.

Steg 4

Konfigurera PowerShell-skriptet för synkronisering

I det sista steget kommer du att bygga det faktiska skriptet för att berätta för GoBright PowerShell-modulen vilka användare du vill hämta och skicka till din GoBright . Detta kan göras med Azure AD eller Active Directory.

GoBright kräver kommunikation med TLS 1.2. Beroende på vilket system du använder kanske detta inte sker automatiskt. Se koden nedan och implementera detta i varje PowerShell-skript som kommunicerar med GoBright.

Lägg också till $ErrorActionPreference för att se till att det stoppar skriptet när ett fel inträffar. Glöm inte att lägga till raderna nedan i vart och ett av dina skript.

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

Välj en av förklaringarna till skriften som passar in på din situation nedan.

Skript för Azure AD-synkronisering med hjälp av modulen Microsoft.Graph

Steg 4.1: Connect din Azure AD

Starta PowerShell och anslut till din Azure AD via kommandot:

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

Steg 4.2: Testa urvalet av användare

Nedan hittar du några exempel på kommandon, du kan anpassa dem efter din situation.

Dessa kommandon kommer ännu inte att uppdatera användare i GoBright, eftersom de innehåller parametern "-WhatIf".

Exempel på synkroniseringskommandon:

Behandla användare och lägg till användarrollerna i GoBright baserat på deras gruppmedlemskap 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

Tillgängliga parametrar för Push-AzureADUsersToBB

Du kan använda följande parametrar i kommandot "Push-AzureADUsersToBB":

-ADUserSpecificUsername Användarnamn
(valfritt)

Som standard kommer användaren att autentisera sig med användarens primära e-postadress till Microsoft Exchange Server eller Office365.

Ange detta värde för att använda ett annat sätt att autentisera användaren till Microsoft Exchange Server eller Office365:
UserPrincipalName för att använda UPN

-ADUserPincodePropertyName
(valfritt)

Ange ett fältnamn för ett fält i Active Directory som du vill använda som "pincode" (måste vara numeriskt, minst 4 siffror och måste vara unikt).

-ADUserMobilePropertyName
(valfritt)

Ange ett fältnamn för ett fält i Active Directory som du vill använda för att få fram användarnas mobilnummer (t.ex. för avisering om digital mottagning)
Använder standardfältet "Mobile" som standard.

-ADUserNFCIdPropertyName
(valfritt)

Ange ett fältnamn för ett fält i Active Directory som du vill använda för att få NFC-identifieraren för den användaren.
Observera att det ska vara i HEX-format, t.ex: XX:XX:XX:XX:XX:XX:XX .

-ADUserDefaultCostCenterId OrNamePropertyName
(valfritt)

Ange ett fältnamn för ett fält i Active Directory som du vill använda för att ange standardkostnadsställe för den användaren. Du kan ange namnet eller id:t ("guid") för kostnadsstället, där namnet är vanligast.

-GroupUserRoleMapping

Denna parameter ger dig möjlighet att tilldela en roll till en användare i plattformen, baserat på ett gruppmedlemskap i Azure AD.
Du måste ange en hashtable (en nyckel + värdelista), där nyckeln är gruppens fullständiga FQN och värdet är rolename i plattformen.

Se exemplet nedan.

-UserRoleNameForNewUsers
(valfritt)

Valfritt namn på en befintlig roll i portalen som ska användas när nya användare skapas genom denna synkronisering.

-DeactivateExistingUsersIn
SameIntegrationThatAreNotLoaded
(valfritt)

Valfri switch för att automatiskt inaktivera användare som inte längre finns i de valda användarna från ActiveDirectory, men som fortfarande finns i portalen.
Använd denna switch för att automatiskt inaktivera dem.
Endast användare i samma integration beaktas (se parameter: BrightBookingIntegrationName)

-IncludeUsersWithoutAzureAD
Tilldelade licenser eller tilldelade planer

Inkludera användare som inte har Azure AD-licenser tilldelade (skulle annars inkluderas som inaktiva) eller Azure AD-planer tilldelade (skulle annars uteslutas helt). Observera att om du inkluderar dessa användare kan det leda till att du får oavsiktliga "användare" som serviceacounts, användare av rumsbrevlådor osv. Detta kan minskas genom att filtrera användarna innan de matas in i det här kommandot.

-BrightBookingApiUrl
(krävs)
API-webbadressen, som du hittade i steg 3
-BrightBookingApiKey
(krävs)
API-webbadressen, som du hittade i steg 3
-BrightBookingIntegrationName
(krävs)
API-webbadressen, som du hittade i steg 3
-WhatIf
(valfritt)
Använd parametern "-WhatIf" för att bara testa och se, men inte för att faktiskt skicka data till din GoBright

Steg 4.2: Kör den faktiska synkroniseringen

När listan med användare har filtrerats korrekt kan du utföra den verkliga synkroniseringen genom att ta bort parametern "-WhatIf".

Så kör nu samma kommando, men utan "-WhatIf" och det kommer att bearbeta användarna till din GoBright .

Steg 4.3: Schemalägg integrationen så att den körs med jämna mellanrum via Windows aktivitetsschemaläggare

För att kunna köra skriptet obevakat bör du på något sätt logga in automatiskt.
Det rekommenderade sättet att använda obevakad inloggning, detta kan göras via certifikat, 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!"

Administratörens samtycke i AzureAD

Gå till Azure-portalen och öppna den skapade företagsapplikationen för obevakad inloggning och välj API-behörighet > Ge administratörsgodkännande för "Din domän"

Nu kan du använda följande sätt för att automatiskt logga in på ditt Azure AD med den obevakade inloggningsmetoden och testa ditt skript via "-WhatIf" innan du kör det faktiska användarsynkroniseringsskriptet:

[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ölj sedan dessa steg för att synkronisera användarna från Active Directory enligt ett schema:

  • Ta kommandot som du har komponerat (se föregående steg) och spara det i en .ps1-fil:
    • Skapa en .ps1-fil (t.ex. UsersToBrightBooking.ps1) i en mapp som du föredrar
    • Öppna filen med en editor, t.ex. "notepad
    • Klistra in inloggningsskriptet för att automatiskt logga in på din Azure AD
    • Klistra in hela kommandot i filen
    • Spara filen
  • Exekvera filen för att se om den är framgångsrik
  • Skapa en uppgift i Windows aktivitetsschemaläggare:
    • Öppna Windows aktivitetsschemaläggare
    • Skapa en uppgift
    • Ställ in ett schema, t.ex. en gång om dagen eller var 4:e timme
    • Lägg till en åtgärd "Starta ett program":
      • Program/skript:
        Powershell.exe
      • Parametrar:
        -windowstyle minimized -c "powershell -c .[Namnet på den skapade .ps1-filen] -verbose >> ExportToGoBright_Output.txt 2>&1″
      • Start in:
        Fyll i "start in" med platsen där skriptet finns, t.ex: C:skript

"Skript
“]

Steg 4.1: Connect din Azure AD

Starta PowerShell och anslut till din Azure AD via standardkommandot "Connect".

AzureAD powershell-modul är föråldrad

Observera att AzureAD powershell-modulen är föråldrad, vänligen migrera till Microsoft.Graph powershell-modulen (se ovan i den här artikeln)

Steg 4.2: Testa urvalet av användare

Kommandot för att hämta informationen från Active Directory och bearbeta den i BrightBooking är:

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 använda följande parametrar i kommandot "Push-AzureADUsersToBB":

-ADUserSpecificUsername Användarnamn
(valfritt)

Som standard kommer användaren att autentisera sig med användarens primära e-postadress till Microsoft Exchange Server eller Office365.

Ange detta värde för att använda ett annat sätt att autentisera användaren till Microsoft Exchange Server eller Office365:
UserPrincipalName för att använda UPN

-ADUserPincodePropertyName
(valfritt)

Ange ett fältnamn för ett fält i Active Directory som du vill använda som "pincode" (måste vara numeriskt, minst 4 siffror och måste vara unikt).

-ADUserMobilePropertyName
(valfritt)

Ange ett fältnamn för ett fält i Active Directory som du vill använda för att få fram användarnas mobilnummer (t.ex. för avisering om digital mottagning)
Använder standardfältet "Mobile" som standard.

-ADUserNFCIdPropertyName
(valfritt)

Ange ett fältnamn för ett fält i Active Directory som du vill använda för att få NFC-identifieraren för den användaren.
Observera att det ska vara i HEX-format, t.ex: XX:XX:XX:XX:XX:XX:XX .

-ADUserDefaultCostCenterId OrNamePropertyName
(valfritt)

Ange ett fältnamn för ett fält i Active Directory som du vill använda för att ange standardkostnadsställe för den användaren. Du kan ange namnet eller id:t ("guid") för kostnadsstället, där namnet är vanligast.

-GroupUserRoleMapping

Denna parameter ger dig möjlighet att tilldela en roll till en användare i plattformen, baserat på ett gruppmedlemskap i Azure AD.
Du måste ange en hashtable (en nyckel + värdelista), där nyckeln är gruppens fullständiga FQN och värdet är rolename i plattformen.

Se exemplet nedan.

-UserRoleNameForNewUsers
(valfritt)

Valfritt namn på en befintlig roll i portalen som ska användas när nya användare skapas genom denna synkronisering.

-DeactivateExistingUsersIn
SameIntegrationThatAreNotLoaded
(valfritt)

Valfri switch för att automatiskt inaktivera användare som inte längre finns i de valda användarna från ActiveDirectory, men som fortfarande finns i portalen.
Använd denna switch för att automatiskt inaktivera dem.
Endast användare i samma integration beaktas (se parameter: BrightBookingIntegrationName)

-IncludeUsersWithoutAzureAD
Tilldelade licenser eller tilldelade planer

Inkludera användare som inte har Azure AD-licenser tilldelade (skulle annars inkluderas som inaktiva) eller Azure AD-planer tilldelade (skulle annars uteslutas helt). Observera att om du inkluderar dessa användare kan det leda till att du får oavsiktliga "användare" som serviceacounts, användare av rumsbrevlådor osv. Detta kan minskas genom att filtrera användarna innan de matas in i det här kommandot.

-BrightBookingApiUrl
(krävs)
API-webbadressen, som du hittade i steg 3
-BrightBookingApiKey
(krävs)
API-webbadressen, som du hittade i steg 3
-BrightBookingIntegrationName
(krävs)
API-webbadressen, som du hittade i steg 3
-WhatIf
(valfritt)
Använd parametern "-WhatIf" för att bara testa och se, men inte för att faktiskt skicka data till din GoBright

Nedan hittar du några exempel på kommandon, du kan anpassa dem så som du behöver för att passa din situation.

Dessa kommandon kommer ännu inte att uppdatera användare i systemet, så det är testkommandon eftersom de innehåller parametern "-WhatIf".

Exempel på testkommandon:

Processa alla användare i Azure AD till GoBright:

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

Bearbeta användare med UPN som slutar med "yourdomain.com" till 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

Behandla användare med ett NFC-ID och en PIN-kod i ett anpassat attribut, observera att namnet tilläggsattributet måste vara identiskt 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

Behandla användare och lägg till användarrollerna i GoBright baserat på deras gruppmedlemskap 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

Behandla alla användare utom de som är medlemmar i en viss grupp 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

Steg 4.2: Kör den faktiska synkroniseringen

När listan med användare har filtrerats korrekt kan du utföra den verkliga synkroniseringen genom att ta bort parametern "-WhatIf".

Så kör nu samma kommando, men utan "-WhatIf" och det kommer att bearbeta användarna till din GoBright .

Steg 4.3: Schemalägg integrationen så att den körs med jämna mellanrum via Windows aktivitetsschemaläggare

För att kunna köra skriptet obevakat bör du på något sätt logga in automatiskt.

Rekommenderad metod för obevakad inloggning:
Det rekommenderade sättet att göra obevakad inloggning är att skapa en registrerad app i Azure AD och ansluta till 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

För mer information, vänligen klicka på denna länk.

För teständamål kan du använda följande sätt för att automatiskt logga in på ditt Azure AD med den obevakade inloggningsmetoden och testa ditt skript innan du kör det faktiska användarsynkroniseringsskriptet:

$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

Obs: om du får ett felmeddelande i PowerShell om att det inte finns tillräckliga rättigheter för att köra skriptet måste du kontrollera vilka rättigheter som ska läggas till i appen. För mer information, läs följande Microsoft-artikel "Steg 5: Tilldela Azure AD-roller till applikationen ": https://docs.microsoft.com/en-us/powershell/exchange/app-only-auth-powershell-v2?view=exchange-ps

Följ sedan dessa steg för att synkronisera användarna från Active Directory enligt ett schema:

  • Ta kommandot som du har komponerat (se föregående steg) och spara det i en .ps1-fil:
    • Skapa en .ps1-fil (t.ex. UsersToBrightBooking.ps1) i en mapp som du föredrar
    • Öppna filen med en editor, t.ex. "notepad
    • Klistra in inloggningsskriptet för att automatiskt logga in på din Azure AD
    • Klistra in hela kommandot i filen
    • Spara filen
  • Exekvera filen för att se om den är framgångsrik
  • Skapa en uppgift i Windows aktivitetsschemaläggare:
    • Öppna Windows aktivitetsschemaläggare
    • Skapa en uppgift
    • Ställ in ett schema, t.ex. en gång om dagen eller var 4:e timme
    • Lägg till en åtgärd "Starta ett program":
      • Program/skript:
        Powershell.exe
      • Parametrar:
        -windowstyle minimized -c "powershell -c .[Namnet på den skapade .ps1-filen] -verbose >> ExportToGoBright_Output.txt 2>&1″
      • Start in:
        Fyll i "start in" med platsen där skriptet finns, t.ex: C:skript

Skript för synkronisering av Active Directory

Steg 4.1: Testa urvalet av användare

Kommandot för att hämta informationen från Active Directory och bearbeta den i GoBright är:

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 använda följande parametrar i kommandot "Push-ADUsersToBB":

-Filter
(krävs)
Filtervillkoret för att filtrera de användare som du vill synkronisera(mer dokumentation finns tillgänglig)
-SearchBase
(valfritt)
Anger Active Directory-sökvägen som sökningen ska göras under(mer dokumentation finns tillgänglig)

-ADSpecificUsername
(valfritt)

Som standard kommer användaren att autentisera sig med användarens primära e-postadress till Microsoft Exchange Server eller Office365.

Ange dessa värden för att använda ett annat sätt att autentisera användaren till Microsoft Exchange Server eller Office365:
DomainPlusUsername för att använda DOMAINusername
UserPrincipalName för att använda UPN

-ADUserPincodePropertyName
(valfritt)

Ange ett fältnamn för ett fält i Active Directory som du vill använda som "pincode" (måste vara numeriskt, minst 4 siffror och måste vara unikt)

-ADUserMobilePropertyName
(valfritt)

Ange ett fältnamn för ett fält i Active Directory som du vill använda för att få användarnas mobiltelefonnummer (t.ex. för avisering om digital mottagning)
Använder standardfältet "Mobile" som standard.

-ADUserNFCIdPropertyName
(valfritt)

Ange ett fältnamn för ett fält i Active Directory som du vill använda för att hämta NFC-identifieraren för den användaren.

Observera att det ska vara i HEX-format, t.ex: XX:XX:XX:XX:XX:XX:XX.

-ADUserDefaultCostCenterId OrNamePropertyName
(valfritt)

Ange ett fältnamn för ett fält i Active Directory som du vill använda för att ange standardkostnadsställe för den användaren. Du kan ange namnet eller id:t ("guid") för kostnadsstället, där namnet är vanligast.

-UserRoleNameForNewUsers
(valfritt)

Valfritt namn på en befintlig roll i plattformen som ska användas när nya användare skapas genom denna synkronisering.

-UserDefaultRoleName
(valfritt)

Ange standardrollnamnet för alla användare som inte har någon matchning i "GroupUserRoleMapping" (se nedan)

-GroupUserRoleMapping
(valfritt)

Denna parameter ger dig möjlighet att tilldela en roll till en användare i plattformen, baserat på ett gruppmedlemskap i ActiveDirectory.
Du måste ange en hashtable (en nyckel+värdelista), där nyckeln är gruppens fullständiga FQN och värdet är rolename i plattformen.

Se exemplet nedan.

-DeactivateExistingUsersIn
SameIntegrationThatAreNotLoaded
(valfritt)

Valfri switch för att automatiskt inaktivera användare som inte längre finns i de valda användarna från ActiveDirectory, men som fortfarande finns i portalen.
Använd denna switch för att automatiskt inaktivera dem.
Endast användare i samma integration beaktas (se parameter: BrightBookingIntegrationName)

-BrightBookingApiUrl
(krävs)
API-webbadressen, som du hittade i steg 3
-BrightBookingApiKey
(krävs)
API-webbadressen, som du hittade i steg 3
-BrightBookingIntegrationName
(krävs)
API-webbadressen, som du hittade i steg 3
-WhatIf
(valfritt)
Använd parametern "-WhatIf" för att bara testa och se, men inte för att faktiskt skicka data till din GoBright

Nedan hittar du några exempel på kommandon, du kan anpassa dem så som du behöver för att passa din situation.

Dessa kommandon kommer ännu inte att uppdatera användare i systemet, så det är testkommandon eftersom de innehåller parametern "-WhatIf".

Exempel på testkommandon:

Behandla användare med UPN som slutar med '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

Behandla användare med UPN:er som slutar med "yourdomain.com" och använd fältet "PersonnelNumber" i ActiveDirectory som pinkod för användarna:

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

Behandla användare som är medlemmar i en specifik grupp 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

Behandla användare som är medlemmar i en specifik grupp i en OU (Organizational Unit) och ange en specifik roll baserat på deras gruppmedlemskap:

$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

Behandla användare som är medlemmar i en viss grupp i en OU (Organizational Unit), med [domän][användarnamn] som autentiseringsanvändarnamn:

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

Steg 4.2: Kör den faktiska synkroniseringen

När listan med användare har filtrerats korrekt kan du utföra den verkliga synkroniseringen genom att ta bort parametern "-WhatIf".

Så kör nu samma kommando, men utan "-WhatIf" och det kommer att bearbeta användarna till din GoBright .

Steg 4.3: Schemalägg integrationen så att den körs med jämna mellanrum via Windows aktivitetsschemaläggare

Följ dessa steg för att synkronisera användarna från Active Directory enligt ett schema:

  • Ta kommandot som du har komponerat (se föregående steg) och spara det i en .ps1-fil:
    • Skapa en .ps1-fil (t.ex. UsersToBrightBooking.ps1) i en mapp som du föredrar
    • Öppna filen med en editor, t.ex. "notepad
    • Klistra in hela kommandot i filen
    • Spara filen
  • Exekvera filen för att se om den är framgångsrik
  • Skapa en uppgift i Windows aktivitetsschemaläggare:
    • Öppna Windows aktivitetsschemaläggare
    • Skapa en uppgift
    • Ställ in ett schema, t.ex. en gång om dagen eller var 4:e timme
    • Lägg till en åtgärd "Starta ett program":
      • Program/skript:
        Powershell.exe
      • Parametrar:
        -windowstyle minimized -c "powershell -c .[Namnet på den skapade .ps1-filen] -verbose >> ExportToGoBright_Output.txt 2>&1″
      • Start in:
        Fyll i "start in" med platsen där skriptet finns, t.ex: C:skript

Synkroniseringsintervall för testning

Rådet för synkroniseringsintervallet är en omfattning av följande belopp nedan:

  • 0 till 2000 användare: synkroniseringen kan köras 4 gånger per dag
  • Över 2000 användare: synkroniseringen kan köras 2 gånger per dag

För testning cirka 3-4 gånger per timme rekommenderar vi starkt att du kör skriptet med små grupper om 10 användare per körning.

Den här artikeln kommer från GoBright hjälpcenter.

Visa originalartikeln
Delta i vårt webbinarium ”Bright NEW Features” den 12 mars kl. 10:00 CET.

Här presenterar vi de senaste uppdateringarna av vår programvara, inklusive nya funktioner, produktlanseringar och kommande utvecklingar.

Anmäl dig till webbinariet om nya funktioner i Bright
GoBright 880 x 880