Public/Push-AzureADUsersToBB.ps1
Function Push-AzureADUsersToBB { <# .SYNOPSIS Takes users via the pipeline from Get-AzureADUser, converts the information needed and process it directly in GoBright BrightBooking .DESCRIPTION Takes users via the pipeline from Get-AzureADUser, converts the information needed and process it directly in GoBright BrightBooking .PARAMETER ADUserNamePropertyName Optional AzureAd User Property which contains the name of the user, in case you do not want to use the default property .PARAMETER ADUserPincodePropertyName Optional AzureAd User Property which contains the pincode .PARAMETER ADUserMobilePropertyName Optional AzureAd User Property which contains the mobile phone number .PARAMETER BrightBookingApiUrl Address of the GoBright BrightBooking API, e.g.: https://t1b.gobright.cloud/ .PARAMETER BrightBookingApiKey API key of the user to use to process the import .PARAMETER BrightBookingIntegrationName Name of the GoBright integration to link the users to .PARAMETER UserRoleNameForNewUsers Name of the GoBright userrole to link new users to .PARAMETER DeactivateExistingUsersInSameIntegrationThatAreNotLoaded Deactivate users that exist in the platform in the same integration but are not loaded anymore from AD (e.g. because they are not anymore in the group you filter on) .PARAMETER WhatIf Use the WhatIf switch to print out the retreived users, without processing them to the API. This is usefull for testing purposes .EXAMPLE Get-AzureADUser | Push-AzureADUsersToBB -BrightBookingApiUrl "https://t1b.gobright.cloud/" -BrightBookingApiKey "[your api key]" -BrightBookingIntegrationName "Office 365" # Get all users in the Active Directory and let GoBright BrightBooking process it directly .LINK Get-AzureADUser #> [CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = 'Low')] Param( [Parameter(Mandatory=$True,ValueFromPipeline=$True)] [System.Object[]]$pipelineAzureADUsers, [Parameter(Mandatory=$False)] [string]$ADUserNamePropertyName = "DisplayName", [Parameter(Mandatory=$False)] [string]$ADUserPincodePropertyName, [Parameter(Mandatory=$False)] [string]$ADUserMobilePropertyName = "Mobile", [Parameter(Mandatory=$False)] [string]$ADUserNFCIdPropertyName, [Parameter(Mandatory=$True)] [string]$BrightBookingApiUrl, [Parameter(Mandatory=$True)] [string]$BrightBookingApiKey, [Parameter(Mandatory=$True)] [string]$BrightBookingIntegrationName, [Parameter(Mandatory=$False)] [string]$UserRoleNameForNewUsers, [switch]$DeactivateExistingUsersInSameIntegrationThatAreNotLoaded ) Begin { If (-not $PSBoundParameters.ContainsKey('Confirm')) { $ConfirmPreference = $PSCmdlet.SessionState.PSVariable.GetValue('ConfirmPreference') } If (-not $PSBoundParameters.ContainsKey('WhatIf')) { $WhatIfPreference = $PSCmdlet.SessionState.PSVariable.GetValue('WhatIfPreference') } $convertedUsers = @() } Process { Foreach ($ADUser in $pipelineAzureADUsers) { $userName = "" If ($ADUserNamePropertyName) { $userName = $ADUser.$ADUserNamePropertyName } Else { $userName = $ADUser.DisplayName } $userMobile = "" If ($ADUserMobilePropertyName) { $userMobile = $ADUser.$ADUserMobilePropertyName } $userNFCId = "" If ($ADUserNFCIdPropertyName) { $userNFCId = $ADUser.$ADUserNFCIdPropertyName } $userEmailAddress = $ADUser.UserPrincipalName $userEnabled = $false If ($ADUser.AccountEnabled -And $ADUser.AssignedLicenses -And $userEmailAddress) { $userEnabled = $true } $userPincode = "" If ($ADUserPincodePropertyName) { $userPincode = $ADUser.$ADUserPincodePropertyName } $userRoleName = ""; If ($ADUser.UserRoleName) { $userRoleName = $ADUser.UserRoleName; } $outputUserPropertiesHash = [ordered]@{ EmailAddress = $userEmailAddress Name = $userName TelephoneMobile = $userMobile #AuthenticationUsername = $userAuthenticationUsername Pincode = $userPincode Active = $userEnabled UniqueImportID = $ADUser.ObjectId UserRoleName = $userRoleName NFCId = $userNFCId } If ($ADUser.AssignedPlans) { $outputUser = New-Object PSObject -Property $outputUserPropertiesHash $convertedUsers += $outputUser } } } End { $syncIncludesUserPincode = $false If ($ADUserPincodePropertyName) { $syncIncludesUserPincode = $true } $syncIncludesUserNFCId = $false If ($ADUserNFCIdPropertyName) { $syncIncludesUserNFCId = $true } # ShouldProcess intercepts WhatIf* --> no need to pass it on If ($PSCmdlet.ShouldProcess("ShouldProcess?")) { If ($DeactivateExistingUsersInSameIntegrationThatAreNotLoaded) { Send-ADUsersToBB -pipelineConvertedADUsers $convertedUsers -BrightBookingApiUrl $BrightBookingApiUrl -BrightBookingApiKey $BrightBookingApiKey -BrightBookingIntegrationName $BrightBookingIntegrationName -UserRoleNameForNewUsers $UserRoleNameForNewUsers -SyncIncludesUserPincode $syncIncludesUserPincode -SyncIncludesUserNFCId $syncIncludesUserNFCId -DeactivateExistingUsersInSameIntegrationThatAreNotLoaded } Else { Send-ADUsersToBB -pipelineConvertedADUsers $convertedUsers -BrightBookingApiUrl $BrightBookingApiUrl -BrightBookingApiKey $BrightBookingApiKey -BrightBookingIntegrationName $BrightBookingIntegrationName -UserRoleNameForNewUsers $UserRoleNameForNewUsers -SyncIncludesUserPincode $syncIncludesUserPincode -SyncIncludesUserNFCId $syncIncludesUserNFCId } } Else { $countConvertedUsers = $convertedUsers | Measure-Object | Select-Object -ExpandProperty Count; Write-Output "============ Test mode (AzureAD) ============" Write-Output "When run in normal mode, it would now process the following $countConvertedUsers users to the API." Write-Output "If you want to run it for real, you should run without the WhatIf parameter." If ($syncIncludesUserNFCId) { Write-Output "Sync will process NFC ids" } Return $convertedUsers } } } |