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:

  1. 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.
  2. Questi utenti vengono inviati a GoBright e immediatamente creati o aggiornati.
  3. Se l'utente viene disattivato in Azure AD o Active Directory, verrà disattivato anche in GoBright
  4. 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:

  1. Accedere al computer (server) in cui si desidera installare il task. (questa macchina deve essere collegata al dominio Windows).
  2. Avviare PowerShell su quella macchina, come 'amministratore':
    clip0001-279x300.jpg
  3. 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
  4. Politica di esecuzione di PowerShell (opzionale)
    • Impostare il criterio di esecuzione di PowerShell su Senza restrizioni
      • Set-ExecutionPolicy -ExecutionPolicy Unrestricted
  5. 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
  6. Se si desidera sincronizzare con Active Directory: Installare il modulo PowerShell di ActiveDirectory:
  7. 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
(opzionale)

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:
UserPrincipalName per utilizzare l'UPN

-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)
Utilizzerà il campo standard 'Mobile' per impostazione predefinita.

-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.

-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.
È necessario fornire una hashtable (un elenco chiave+valore), dove la chiave è l'FQN completo del gruppo e il valore è il nome del ruolo nella piattaforma.

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.
Utilizzare questo interruttore per disattivarli automaticamente.
Vengono presi in considerazione solo gli utenti della stessa integrazione (vedere il parametro: BrightBookingIntegrationName).

-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

"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
(opzionale)

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:
UserPrincipalName per utilizzare l'UPN

-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)
Utilizzerà il campo standard 'Mobile' per impostazione predefinita.

-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.

-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.
È necessario fornire una hashtable (un elenco chiave+valore), dove la chiave è l'FQN completo del gruppo e il valore è il nome del ruolo nella piattaforma.

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.
Utilizzare questo interruttore per disattivarli automaticamente.
Vengono presi in considerazione solo gli utenti della stessa integrazione (vedere il parametro: BrightBookingIntegrationName).

-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

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
(facoltativo)

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:
DomainPlusUsername per utilizzare DOMAINusername
UserPrincipalName per utilizzare UPN

-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)
Utilizzerà il campo standard 'Mobile' per impostazione predefinita.

-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.
È necessario fornire una hashtable (un elenco chiave+valore), dove la chiave è l'FQN completo del gruppo e il valore è il nome del ruolo nella piattaforma.

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.
Utilizzare questo interruttore per disattivarli automaticamente.
Vengono presi in considerazione solo gli utenti della stessa integrazione (vedere il parametro: BrightBookingIntegrationName).

-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

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.

Questo articolo proviene dal Centro assistenza di GoBright.

Visualizza l'articolo originale

FAQ

Chiedici qualsiasi cosa! Trova le risposte alle domande più frequenti qui.

Sfoglia le FAQ

Centro assistenza

Una miniera d'oro per tutti gli IT e Facility Manager. Immergiti negli aspetti tecnici dei nostri prodotti e soluzioni.

Visitate il Centro assistenza

Newsletter

Vuoi essere informato su tutti gli sviluppi dello smart office e sulle nostre nuove funzionalità? Iscriviti ora.

Iscriviti ora