Sincronizzazione degli utenti con Azure AD/Active Directory
Questo articolo è disponibile in formato video e in un articolo scritto contenente ulteriori dettagli.
Nota: a causa delle modifiche apportate al modulo PowerShell, alcune parti del video sono obsolete. Il video può comunque essere utilizzato come riferimento. Il codice contenuto in questo articolo è aggiornato.
La sincronizzazione Azure AD / Active Directory è in grado di creare, aggiornare e disattivare automaticamente gli utenti da Azure AD o Active Directory.
Abbiamo creato il modulo PowerShell 'BrightBookingUserAdminTools', che gestisce questa logica. Creando un'attività (pianificata) con i giusti comandi PowerShell, è possibile inviare regolarmente queste informazioni a GoBright dal server.
Nota: GoBright riceve i dati solo attraverso questo BrightBookingUserAdminTools. GoBright non ha i permessi per inviare i dati all'Azure AD / Active Directory.
GoBright come applicazione aziendale in Azure AD
Prima di continuare la sezione che segue, vorremmo sottolineare che è possibile impostare GoBright come applicazione aziendale all'interno di Azure AD. Questo vi consentirà di creare/aggiornare automaticamente gli utenti della piattaforma e di abilitare facilmente l'SSO. Si consiglia vivamente di seguire i passaggi dell'articolo seguente prima di continuare: GoBright come applicazione aziendale (Azure AD)
Introduzione
La logica di integrazione è disponibile come modulo PowerShell, tramite PowerShellGallery, come 'BrightBookingUserAdminTools'.
Il modulo PowerShell 'BrightBookingUserAdminTools' deve essere installato su una macchina (server) del dominio.
Quando è configurato, segue i seguenti passaggi, ogni volta che viene eseguito:
- Ottenere gli utenti da Azure AD o Active Directory, filtrati in base alle proprie preferenze, ad esempio filtrati in base all'appartenenza a un gruppo.
- Questi utenti vengono inviati a GoBright e immediatamente creati o aggiornati.
- Se l'utente viene disattivato in Azure AD o Active Directory, verrà disattivato anche in GoBright
- Gli utenti che non vengono letti da Azure AD o Active Directory non vengono aggiornati in Azure AD o Active Directory. GoBright
Seguite i passaggi seguenti per installare e configurare l'integrazione!
Passo 1
Installare i prerequisiti
Il modulo BrightBookingUserAdminTools ha le seguenti dipendenze:
- PowerShell versione 5 o superiore
- I seguenti moduli PowerShell:
- Galleria PowerShell
- ActiveDirectory
- Azure AD
- La macchina (server) deve essere collegata al dominio Windows.
Seguire i passi successivi per installare le dipendenze:
- Accedere al computer (server) in cui si desidera installare il task. (questa macchina deve essere collegata al dominio Windows).
- Avviare PowerShell su quella macchina, come 'amministratore':
- Verificare se PowerShell 5 è installato:
- Eseguire il seguente comando:
$PSVersionTable.PSVersion
- Nel risultato ottenuto, il valore "Maggiore" dovrebbe essere "5" o superiore.
- Se l'opzione 'Maggiore' è inferiore a '5', seguite la seguente procedura:
- Installare Windows Management Framework 5 (che include PowerShell 5):
Scaricare Windows Management Framework 5 - Nota 1: se viene visualizzato l'errore "L'aggiornamento non è applicabile al computer in uso", probabilmente è stato selezionato il download sbagliato; consultare questo articolo.
- Nota 2: Windows Management Framework 5 dipende da .NET Framework 4.5.
- Nota 3: probabilmente è necessario un riavvio.
- Dopo l'installazione, verificare se la casella 'Maggiore' è '5' o superiore:
$PSVersionTable.PSVersion
- Installare Windows Management Framework 5 (che include PowerShell 5):
- Eseguire il seguente comando:
- Politica di esecuzione di PowerShell (opzionale)
- Impostare il criterio di esecuzione di PowerShell su Senza restrizioni
-
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
-
- Impostare il criterio di esecuzione di PowerShell su Senza restrizioni
- Installare il modulo PowerShellGallery di PowerShell:
- Eseguire i seguenti comandi in PowerShell (eseguiti come amministratore)
- Installare NuGet PackageProvider:
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
- Configurare PowerShellGallery come fonte affidabile:
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
- Installare il modulo PowerShellGet:
Import-Module -Name PowerShellGet
- Se si desidera sincronizzare con Active Directory: Installare il modulo PowerShell di ActiveDirectory:
- Il modulo PowerShell di ActiveDirectory fa parte di Remote Server Administration Tools (RSAT).
- Per installare gli Strumenti di amministrazione del server remoto (RSAT), procedere come segue
- Se si desidera sincronizzare con Azure AD: Installare il modulo PowerShell di Microsoft.Graph:
- Eseguire i seguenti comandi in PowerShell (eseguiti come amministratore)
- Nota: è necessario .Net Framework 4.7.2 o superiore; per ulteriore documentazione, consultare: https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation?view=graph-powershell-1.0.
- Installare i moduli Microsoft.Graph applicabili:
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
Passo 2
Installazione/aggiornamento del modulo di sincronizzazione
Installare o aggiornare il modulo PowerShell BrightBookingUserAdminTools:
Install-Module -Name BrightBookingUserAdminTools -Force
Il comando '-Force' assicura che venga installata l'ultima versione del modulo anche se esiste un'installazione precedente. Se il modulo era già installato, sarà necessario riavviare la sessione PowerShell.
Passo 3
Configurazione: ottenere l'URL API e la chiave API
Per poter sincronizzare gli utenti, è necessario ottenere le seguenti informazioni nel portale GoBright :
- L'URL e la chiave API
- Il nome dell'integrazione che deve essere collegata agli utenti
Seguite questi passaggi per trovare l'URL e la chiave API:
- Accedere con un account manager al portale GoBright .
- Accedere a Centro amministrativo > Integrazioni > Accesso API
- Generare una chiave API tramite il pulsante "Aggiungi". Scegliere come tipo "manager" e inserire una descrizione per un riferimento successivo.
- Nota: assicurarsi di salvare la chiave API, poiché non c'è modo di recuperarla.
- L'"URL API" è l'URL dell'ambiente GoBright che si trova nella barra degli URL del browser e in Admin center > Integrazioni > Accesso API: URL API https://[tenant-id].gobright.cloud/
Seguite questi passaggi per trovare il nome dell'integrazione:
- Accedere con un account manager al portale GoBright .
- Andare al Centro amministrativo > Integrazioni
- Copiare il nome dell'integrazione (Exchange/Office 365) che deve essere utilizzata per collegare gli utenti a
Il nome dell'integrazione, l'URL API e la chiave API sono necessari nei passaggi successivi.
Passo 4
Configurare lo script PowerShell di sincronizzazione
Nell'ultimo passaggio si costruirà lo script vero e proprio per dire al modulo PowerShell GoBright quali utenti si vogliono ottenere e inviare all'ambiente GoBright . Questo può essere fatto con Azure AD o Active Directory.
La piattaforma GoBright impone che la comunicazione avvenga tramite TLS 1.2. A seconda del sistema utilizzato, questo potrebbe non avvenire automaticamente. Consultate il codice qui sotto e implementatelo in ogni script PowerShell che comunica con GoBright.
Aggiungere anche la $ErrorActionPreference per assicurarsi che lo script si fermi ogni volta che si verifica un errore. Non dimenticate di aggiungere le righe sottostanti in ciascuno dei vostri script.
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$ErrorActionPreference = "Stop"
Scegliete una delle spiegazioni del copione che si applica alla vostra situazione.
Script per la sincronizzazione di Azure AD utilizzando il modulo Microsoft.Graph
Passo 4.1: Connettersi ad Azure AD
Avviare PowerShell e collegarsi ad Azure AD tramite il comando:
Connect-MgGraph -Scopes 'User.Read.All','Group.Read.All','GroupMember.Read.All'
Fase 4.2: Test della selezione degli utenti
Di seguito sono riportati alcuni esempi di comandi, che possono essere adattati alla propria situazione.
Questi comandi non aggiornano ancora gli utenti in GoBright, perché includono il parametro "-WhatIf".
Esempi di comandi di sincronizzazione:
Elaborare gli utenti e aggiungere i ruoli utente all'interno di GoBright in base all'appartenenza ai gruppi in Azure AD:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $ErrorActionPreference = "Stop" Connect-MgGraph -Scopes 'User.Read.All','Group.Read.All','GroupMember.Read.All' $includedGroups = @()
$includedGroups += '[your AzureAD groupname_1 here]' $includedGroups += '[your AzureAD groupname_2 here]'
# get the list of userid's in the group $groups = Get-MgGroup -All | Where-Object { $includedGroups -contains $_.DisplayName } $users_in_groups_userids = @(); Foreach ($group in $groups) { $groupMembers = Get-MgGroupMember -All -GroupID $group.id Foreach ($groupMember in $groupMembers) { $users_in_groups_userids += $groupMember.Id } } # get the required details of those users $users_full_list = Get-MgUser -All -Select Id,DisplayName,Mail,UserPrincipalName,AccountEnabled,MobilePhone,AssignedLicenses $users = $users_full_list | Where-Object { $users_in_groups_userids -contains $_.Id } Write-Output "Loaded from AzureAD: $(($users | Measure-Object).Count) users" # define the mapping of groups to roles $groupToRoleMapping = @()
$groupToRoleMapping += @ # match specific users that belong to a group for Meet-Work-Visit
$groupToRoleMapping += @ # match specific users that belong to a group for Meet-Work-Visit
$groupToRoleMapping += @ # match specific users that belong to a group for Meet-Work-Visit
$groupToRoleMapping += @ # match specific users that belong to a group for View
$groupToRoleMapping += @ # **special case** this line matches for every user, because of the 'MatchType', and is needed when you want to have a generic role for every user
$roleNameDefaultIfNoGroupMatched = "Regular user"
$users | Push-AzureADUsersToBB -DeactivateExistingUsersInSameIntegrationThatAreNotLoaded -UserDefaultRoleName $roleNameDefaultIfNoGroupMatched -GroupUserRoleMapping $groupToRoleMapping -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]' -WhatIf
Parametri disponibili per Push-AzureADUsersToBB
È possibile utilizzare i seguenti parametri nel comando 'Push-AzureADUsersToBB':
-ADUserSpecificUsername UserPrincipalName |
Per impostazione predefinita, l'utente si autenticherà con l'indirizzo e-mail primario dell'utente al server Microsoft Exchange o Office365. Fornire questo valore per utilizzare un modo diverso di autenticazione dell'utente a Microsoft Exchange Server o Office365: |
-ADUserPincodePropertyName (facoltativo) |
Specificare il nome di un campo di Active Directory che si desidera utilizzare come "pincode" (deve essere numerico, di almeno 4 cifre e deve essere unico). |
-ADUserMobilePropertyName (facoltativo) |
Specificare il nome di un campo di Active Directory che si desidera utilizzare per ottenere il numero di cellulare degli utenti (ad esempio per la notifica della ricezione digitale) |
-ADUserNFCIdPropertyName (facoltativo) |
Specificare il nome di un campo di Active Directory che si desidera utilizzare per ottenere l'identificatore NFC dell'utente. |
-ADUserDefaultCostCenterId OrNamePropertyName (facoltativo) |
Specificare il nome di un campo di Active Directory che si desidera utilizzare per impostare il centro di costo predefinito per quell'utente. È possibile specificare il nome o l'id ('guid') del centro di costo, dove il nome è più comunemente usato. |
-GruppoUserRoleMapping |
Questo parametro consente di assegnare un ruolo a un utente nella piattaforma, in base all'appartenenza a un gruppo nell'Azure AD. Si veda l'esempio seguente. |
-UserRoleNameForNewUsers (opzionale) |
Nome opzionale di un ruolo esistente nel portale da utilizzare quando vengono creati nuovi utenti tramite questa sincronizzazione. |
-DeactivateExistingUsersIn SameIntegrationThatAreNotLoaded (opzionale) |
Interruttore opzionale per disattivare automaticamente gli utenti che non fanno più parte degli utenti selezionati da ActiveDirectory, ma che sono ancora presenti nel portale. |
-IncludeUsersWithoutAzureAD AssignedLicensesOrAssignedPlans |
Includere gli utenti che non hanno licenze Azure AD assegnate (altrimenti sarebbero inclusi come inattivi) o piani Azure AD assegnati (altrimenti sarebbero completamente esclusi). Si noti che l'inclusione di questi utenti potrebbe comportare la presenza di "utenti" indesiderati, come serviceacount, utenti di roommailbox e così via. Questo può essere mitigato filtrando gli utenti prima di inserirli in questo comando. |
-BrightBookingApiUrl (obbligatorio) |
L'url dell'API, come trovato al punto 3 |
-BrightBookingApiKey (obbligatorio) |
L'url dell'API, come trovato al punto 3 |
-BrightBookingIntegrationName (obbligatorio) |
L'url dell'API, come trovato al punto 3 |
-WhatIf (opzionale) |
Usare il parametro '-WhatIf' per testare e vedere, ma non per inviare effettivamente i dati all'ambiente GoBright . |
Passo 4.2: Eseguire la sincronizzazione vera e propria
Una volta filtrato correttamente l'elenco degli utenti, è possibile eseguire la sincronizzazione vera e propria rimuovendo il parametro '-WhatIf'.
Eseguite ora lo stesso comando, ma senza '-WhatIf', e gli utenti verranno processati nell'ambiente GoBright .
Passo 4.3: Pianificare l'esecuzione periodica dell'integrazione tramite il task scheduler di Windows
Per poter eseguire lo script senza sorveglianza è necessario effettuare in qualche modo il login automatico.
Il modo consigliato per utilizzare il login senza sorveglianza può essere fatto tramite certificati, tramite la registrazione dell'applicazione in Azure AD:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $ErrorActionPreference = "Stop"
#This script will create een enterprise app with a local certificate for unattended authorisation.
#Set the enterprise app name $AppName = "GoBright_UserSync_UnattendedLogin" $ErrorActionPreference = "Stop" #Connect with the graph to be able to create or update the application Connect-MgGraph -Scopes "Application.Read.All","Application.ReadWrite.All" #Get the tenantid $organization = Get-MgOrganization $APPTenantID = $organization.Id #Create or update the enterprise app $foundApps = Get-MgApplication | Where-Object {$_.DisplayName -eq $AppName} $foundAppsCount = $foundApps | Measure-Object if ($foundAppsCount.Count -eq 0) { # create the app $App = New-MgApplication -DisplayName $AppName $APPObjectID = $App.Id $APPClientID = $App.AppId } Else { $APPObjectID = $foundApps.Id $APPClientID = $foundApps.AppId } #Create a local self-signed certificate to use it as credential for the enterprise app $foundCerts = Get-ChildItem -Path cert:CurrentUsermy | Where-Object { $_.Subject -eq "CN=$($AppName)" } $foundCertsCount = $foundCerts | Measure-Object If ($foundCertsCount.Count -eq 0) { # create self-signed cert $thumb = (New-SelfSignedCertificate -CertStoreLocation Cert:CurrentUserMy -subject $AppName -KeyExportPolicy Exportable -NotAfter (Get-Date).AddYears(20) -Type CodeSigningCert -KeySpec Signature).Thumbprint $foundCerts = Get-ChildItem -Path cert:CurrentUsermy$thumb $cert = $foundCerts[0] } Else { $cert = $foundCerts[0] } #Create a keyCredential from the certificate for the enterprise app $keyCreds = @{ Type = "AsymmetricX509Cert"; Usage = "Verify"; key = $cert.RawData } try { #Set credentials Update-MgApplication -ApplicationId $APPObjectID -KeyCredentials $keyCreds #Set permission scopes, needs to go via id, see: https://learn.microsoft.com/en-us/graph/permissions-reference #'User.Read.All' = df021288-bdef-4463-88db-98f22de89214 #'Group.Read.All' = 5b567255-7703-4780-807c-7be8301ae99b #'GroupMember.Read.All' = 98830695-27a2-44f7-8c18-0c3ebc9698f6 $params = @{ RequiredResourceAccess = @( @{ ResourceAppId = "00000003-0000-0000-c000-000000000000" ResourceAccess = @( @{ Id = "df021288-bdef-4463-88db-98f22de89214" Type = "Role" }, @{ Id = "5b567255-7703-4780-807c-7be8301ae99b" Type = "Role" }, @{ Id = "98830695-27a2-44f7-8c18-0c3ebc9698f6" Type = "Role" } ) } )} Update-MgApplication -ApplicationId $APPObjectID -BodyParameter $params } catch { Write-Error $Error[0] } #Output details and request the admin to check the consent
Write-Output "App registration '$($AppName)' is now available, please use following details in the user sync script:"
Write-Output " - ClientId: $($APPClientID)"
Write-Output " - TenantId: $($APPTenantID)"
Write-Output " - CertificateThumbprint: $($cert.Thumbprint)"
Write-Output "NOTE: Please give admin consent in the AzureAD portal to this app!"
Consenso dell'amministratore in AzureAD
Accedere al portale Azure e aprire l'applicazione aziendale creata per l'accesso non presidiato e selezionare Autorizzazione API > Concessione del consenso di amministrazione per "Il tuo dominio".
Ora è possibile utilizzare il seguente metodo per accedere automaticamente ad Azure AD con il metodo di accesso non presidiato e testare lo script tramite '-WhatIf' prima di eseguire l'effettivo script di sincronizzazione degli utenti:
[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
Quindi, seguite questi passaggi per sincronizzare gli utenti da Active Directory in base a una pianificazione:
- Prendete il comando che avete composto (vedi passi precedenti) e salvatelo in un file .ps1:
- Creare un file .ps1 (ad esempio UsersToBrightBooking.ps1) in una cartella a piacere.
- Aprire il file con un editor, ad esempio 'notepad'.
- Incollare lo script di login per effettuare automaticamente il login ad Azure AD
- Incollare il comando completo nel file
- Salvare il file
- Eseguire il file per vedere se è stato eseguito con successo
- Creare un'attività nel pianificatore delle attività di Windows:
- Aprire il pianificatore delle attività di Windows
- Creare un'attività
- Impostare un programma, ad esempio una volta al giorno o ogni 4 ore.
- Aggiungere l'azione "Avvia un programma":
- Programma/script:
Powershell.exe - Parametri:
-windowstyle minimized -c "powershell -c .[Nome del file .ps1 creato] -verbose >> ExportToGoBright_Output.txt 2>&1″ - Inizio in:
Compilare "inizio in" con la posizione dello script, ad esempio:C:scripts
- Programma/script:
"Script
"]
Passo 4.1: Connettersi ad Azure AD
Avviare PowerShell e connettersi ad Azure AD tramite il comando standard "Connect-AzureAD".
Il modulo powershell AzureAD è deprecato
Si noti che il modulo powershell di AzureAD è deprecato; migrare al modulo powershell di Microsoft.Graph (vedere sopra in questo articolo).
Fase 4.2: Test della selezione degli utenti
Il comando per ottenere le informazioni da Active Directory ed elaborarle in BrightBooking è:
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]'
È possibile utilizzare i seguenti parametri nel comando 'Push-AzureADUsersToBB':
-ADUserSpecificUsername UserPrincipalName |
Per impostazione predefinita, l'utente si autenticherà con l'indirizzo e-mail primario dell'utente al server Microsoft Exchange o Office365. Fornire questo valore per utilizzare un modo diverso di autenticazione dell'utente a Microsoft Exchange Server o Office365: |
-ADUserPincodePropertyName (facoltativo) |
Specificare il nome di un campo di Active Directory che si desidera utilizzare come "pincode" (deve essere numerico, di almeno 4 cifre e deve essere unico). |
-ADUserMobilePropertyName (facoltativo) |
Specificare il nome di un campo di Active Directory che si desidera utilizzare per ottenere il numero di cellulare degli utenti (ad esempio per la notifica della ricezione digitale) |
-ADUserNFCIdPropertyName (facoltativo) |
Specificare il nome di un campo di Active Directory che si desidera utilizzare per ottenere l'identificatore NFC dell'utente. |
-ADUserDefaultCostCenterId OrNamePropertyName (facoltativo) |
Specificare il nome di un campo di Active Directory che si desidera utilizzare per impostare il centro di costo predefinito per quell'utente. È possibile specificare il nome o l'id ('guid') del centro di costo, dove il nome è più comunemente usato. |
-GruppoUserRoleMapping |
Questo parametro consente di assegnare un ruolo a un utente nella piattaforma, in base all'appartenenza a un gruppo nell'Azure AD. Si veda l'esempio seguente. |
-UserRoleNameForNewUsers (opzionale) |
Nome opzionale di un ruolo esistente nel portale da utilizzare quando vengono creati nuovi utenti tramite questa sincronizzazione. |
-DeactivateExistingUsersIn SameIntegrationThatAreNotLoaded (opzionale) |
Interruttore opzionale per disattivare automaticamente gli utenti che non fanno più parte degli utenti selezionati da ActiveDirectory, ma che sono ancora presenti nel portale. |
-IncludeUsersWithoutAzureAD AssignedLicensesOrAssignedPlans |
Includere gli utenti che non hanno licenze Azure AD assegnate (altrimenti sarebbero inclusi come inattivi) o piani Azure AD assegnati (altrimenti sarebbero completamente esclusi). Si noti che l'inclusione di questi utenti potrebbe comportare la presenza di "utenti" indesiderati, come serviceacount, utenti di roommailbox e così via. Questo può essere mitigato filtrando gli utenti prima di inserirli in questo comando. |
-BrightBookingApiUrl (obbligatorio) |
L'url dell'API, come trovato al punto 3 |
-BrightBookingApiKey (obbligatorio) |
L'url dell'API, come trovato al punto 3 |
-BrightBookingIntegrationName (obbligatorio) |
L'url dell'API, come trovato al punto 3 |
-WhatIf (opzionale) |
Usare il parametro '-WhatIf' per testare e vedere, ma non per inviare effettivamente i dati all'ambiente GoBright . |
Di seguito sono riportati alcuni esempi di comandi, che possono essere adattati alla situazione in cui ci si trova.
Questi comandi non aggiornano ancora gli utenti nel sistema, quindi sono comandi di prova, perché includono il parametro "-WhatIf".
Esempi di comandi di prova:
Elaborare tutti gli utenti di Azure AD su GoBright:
Get-AzureADUser -All $true | Push-AzureADUsersToBB -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]' -WhatIf
Elaborare gli utenti con UPN che terminano con 'yourdomain.com' a 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
Elaborare gli utenti con un ID NFC e un Pincode in un attributo personalizzato, tenendo presente che il nome dell'attributo di estensione deve essere identico a quello di 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
Elaborare gli utenti e aggiungere i ruoli utente all'interno di GoBright in base all'appartenenza ai gruppi in Azure AD:
$groupToRoleMapping = @()
$groupToRoleMapping += @ # match specific users that belong to a group for Meet-Work-Visit
$groupToRoleMapping += @ # match specific users that belong to a group for Meet-Work-Visit
$groupToRoleMapping += @ # match specific users that belong to a group for Meet-Work-Visit
$groupToRoleMapping += @ # match specific users that belong to a group for View
$groupToRoleMapping += @ # **special case** this line matches for every user, because of the 'MatchType', and is needed when you want to have a generic role for every user
$roleNameDefaultIfNoGroupMatched = "Regular user"
$users_all = Get-AzureADUser -All $true
$users_all | Push-AzureADUsersToBB -UserDefaultRoleName $roleNameDefaultIfNoGroupMatched -GroupUserRoleMapping $groupToRoleMapping -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]' -WhatIf
Elabora tutti gli utenti tranne quelli che sono membri di un gruppo specifico in Azure AD:
$excludedGroups = @()
$excludedGroups += '[GroupName1]'
$excludedGroups += '[GroupName2]'
$excludedGroups += '[GroupName3]'
$ADGroups = Get-AzureADGroup -All $true | Where-Object { $excludedGroups -notcontains $_.DisplayName }
$users_all = $ADGroups | Get-AzureADGroupMember -All $true
$users_all | Push-AzureADUsersToBB -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]' -WhatIf
Passo 4.2: Eseguire la sincronizzazione vera e propria
Una volta filtrato correttamente l'elenco degli utenti, è possibile eseguire la sincronizzazione vera e propria rimuovendo il parametro '-WhatIf'.
Eseguite ora lo stesso comando, ma senza '-WhatIf', e gli utenti verranno processati nell'ambiente GoBright .
Passo 4.3: Pianificare l'esecuzione periodica dell'integrazione tramite il task scheduler di Windows
Per poter eseguire lo script senza sorveglianza, è necessario effettuare in qualche modo il login automatico.
Metodo consigliato per il login non presidiato:
Il metodo consigliato per effettuare il login non presidiato è la creazione di un'applicazione registrata in Azure AD e la connessione a tale applicazione:
#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
Per maggiori informazioni, cliccate su questo link.
A scopo di test, si può utilizzare il seguente metodo per accedere automaticamente ad Azure AD con il metodo di login non presidiato e testare lo script prima di eseguire lo script di sincronizzazione degli utenti vero e proprio:
$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
Nota: se all'interno di PowerShell viene visualizzato un errore che indica che i diritti non sono sufficienti per eseguire lo script, è necessario controllare i diritti da aggiungere all'applicazione. Per ulteriori informazioni, leggete il seguente articolo di Microsoft "Passo 5: Assegnare i ruoli di Azure AD all'applicazione ": https://docs.microsoft.com/en-us/powershell/exchange/app-only-auth-powershell-v2?view=exchange-ps
Quindi, seguite questi passaggi per sincronizzare gli utenti da Active Directory in base a una pianificazione:
- Prendete il comando che avete composto (vedi passi precedenti) e salvatelo in un file .ps1:
- Creare un file .ps1 (ad esempio UsersToBrightBooking.ps1) in una cartella a piacere.
- Aprire il file con un editor, ad esempio 'notepad'.
- Incollare lo script di login per effettuare automaticamente il login ad Azure AD
- Incollare il comando completo nel file
- Salvare il file
- Eseguire il file per vedere se è stato eseguito con successo
- Creare un'attività nel pianificatore delle attività di Windows:
- Aprire il pianificatore delle attività di Windows
- Creare un'attività
- Impostare un programma, ad esempio una volta al giorno o ogni 4 ore.
- Aggiungere l'azione "Avvia un programma":
- Programma/script:
Powershell.exe - Parametri:
-windowstyle minimized -c "powershell -c .[Nome del file .ps1 creato] -verbose >> ExportToGoBright_Output.txt 2>&1″ - Inizio in:
Compilare "inizio in" con la posizione dello script, ad esempio:C:scripts
- Programma/script:
Script per la sincronizzazione di Active Directory
Fase 4.1: Testare la selezione degli utenti
Il comando per ottenere le informazioni da Active Directory ed elaborarle in GoBright è il seguente:
Push-ADUsersToBB [filter] [optional: specific username/pincode field] -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]'
È possibile utilizzare i seguenti parametri nel comando 'Push-ADUsersToBB':
-Filtro (obbligatorio) |
La condizione di filtro per filtrare gli utenti che si desidera sincronizzare(è disponibile ulteriore documentazione) |
-SearchBase (opzionale) |
Specifica il percorso di Active Directory in cui effettuare la ricerca(è disponibile altra documentazione). |
-ADSpecificUsername |
Per impostazione predefinita, l'utente si autenticherà con l'indirizzo e-mail primario dell'utente al server Microsoft Exchange o Office365. Fornire questi valori per utilizzare un modo diverso di autenticare l'utente a Microsoft Exchange Server o Office365: |
-ADUserPincodePropertyName (facoltativo) |
Specificare il nome di un campo in Active Directory che si desidera utilizzare come "pincode" (deve essere numerico, di almeno 4 cifre e deve essere unico). |
-ADUserMobilePropertyName (facoltativo) |
Specificare il nome di un campo in Active Directory che si desidera utilizzare per ottenere il numero di cellulare degli utenti (ad esempio per la notifica della ricezione digitale) |
-ADUserNFCIdPropertyName (facoltativo) |
Specificare il nome di un campo di Active Directory che si desidera utilizzare per ottenere l'identificatore NFC dell'utente. Si noti che deve essere in formato HEX, ad es: XX:XX:XX:XX:XX:XX. |
-ADUserDefaultCostCenterId OrNamePropertyName (facoltativo) |
Specificare il nome di un campo di Active Directory che si desidera utilizzare per impostare il centro di costo predefinito per quell'utente. È possibile specificare il nome o l'id ('guid') del centro di costo, dove il nome è più comunemente usato. |
-UserRoleNameForNewUsers (opzionale) |
Nome opzionale di un ruolo esistente nella piattaforma da utilizzare quando vengono creati nuovi utenti tramite questa sincronizzazione. |
-UserDefaultRoleName (facoltativo) |
Impostare il nome del ruolo predefinito per tutti gli utenti che non hanno una corrispondenza in 'GroupUserRoleMapping' (vedere sotto). |
-GroupUserRoleMapping (opzionale) |
Questo parametro consente di assegnare un ruolo a un utente nella piattaforma, in base all'appartenenza a un gruppo in ActiveDirectory. Si veda l'esempio seguente. |
-DeactivateExistingUsersIn SameIntegrationThatAreNotLoaded (opzionale) |
Interruttore opzionale per disattivare automaticamente gli utenti che non fanno più parte degli utenti selezionati da ActiveDirectory, ma che sono ancora presenti nel portale. |
-BrightBookingApiUrl (obbligatorio) |
L'url dell'API, come trovato al punto 3 |
-BrightBookingApiKey (obbligatorio) |
L'url dell'API, come trovato al punto 3 |
-BrightBookingIntegrationName (obbligatorio) |
L'url dell'API, come trovato al punto 3 |
-WhatIf (opzionale) |
Usare il parametro '-WhatIf' per testare e vedere, ma non per inviare effettivamente i dati all'ambiente GoBright . |
Di seguito sono riportati alcuni esempi di comandi, che possono essere adattati alla situazione in cui ci si trova.
Questi comandi non aggiornano ancora gli utenti nel sistema, quindi sono comandi di prova, perché includono il parametro "-WhatIf".
Esempi di comandi di prova:
Elaborare gli utenti con UPN che terminano con '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
Elaborare gli utenti con UPN che terminano con 'yourdomain.com' e utilizzare il campo 'PersonnelNumber' di ActiveDirectory come pincode per gli utenti:
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
Elaborare gli utenti che sono membri di un gruppo specifico in una UO (Unità Organizzativa):
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
Elaborare gli utenti che sono membri di un gruppo specifico in una OU (Unità Organizzativa) e impostare un ruolo specifico in base all'appartenenza al gruppo:
$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
Elabora gli utenti che sono membri di un gruppo specifico in una OU (Unità Organizzativa), con [dominio][nome utente] come nome utente di autenticazione:
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
Passo 4.2: Eseguire la sincronizzazione vera e propria
Una volta filtrato correttamente l'elenco degli utenti, è possibile eseguire la sincronizzazione vera e propria rimuovendo il parametro '-WhatIf'.
Eseguite ora lo stesso comando, ma senza '-WhatIf', e gli utenti verranno processati nell'ambiente GoBright .
Passo 4.3: Pianificare l'esecuzione periodica dell'integrazione tramite il task scheduler di Windows
Seguite questi passaggi per sincronizzare gli utenti da Active Directory in base a una pianificazione:
- Prendete il comando che avete composto (vedi passi precedenti) e salvatelo in un file .ps1:
- Creare un file .ps1 (ad esempio UsersToBrightBooking.ps1) in una cartella a piacere.
- Aprire il file con un editor, ad esempio 'notepad'.
- Incollare il comando completo nel file
- Salvare il file
- Eseguire il file per vedere se è stato eseguito con successo
- Creare un'attività nel pianificatore delle attività di Windows:
- Aprire il pianificatore delle attività di Windows
- Creare un'attività
- Impostare un programma, ad esempio una volta al giorno o ogni 4 ore.
- Aggiungere l'azione "Avvia un programma":
- Programma/script:
Powershell.exe - Parametri:
-windowstyle minimized -c "powershell -c .[Nome del file .ps1 creato] -verbose >> ExportToGoBright_Output.txt 2>&1″ - Inizio in:
Compilare "inizio in" con la posizione dello script, ad esempio:C:scripts
- Programma/script:
Intervallo di sincronizzazione per il test
Il consiglio per l'intervallo di sincronizzazione è una portata dei seguenti importi:
- Da 0 a 2000 utenti: la sincronizzazione può essere eseguita 4 volte al giorno.
- Oltre 2000 utenti: la sincronizzazione può essere eseguita 2 volte al giorno
Per eseguire i test circa 3-4 volte in un'ora, consigliamo vivamente di eseguire lo script con piccoli lotti di 10 utenti per esecuzione.