Public/Push-ADUsersToBB.ps1

Function Push-ADUsersToBB {
    <#
    .SYNOPSIS
        Get user information from ActiveDirectory with the information needed in GoBright BrightBooking and process it directly in GoBright BrightBooking
    .DESCRIPTION
        Get user information via the Get-ADUser command, retreiving the information needed for GoBright BrightBooking. (Requiring RSAT tools: Remote Server Administration Tools)
    .PARAMETER Filter
        A filter used to pass to Get-ADUser, if you don't need a filter, then use: '*'
        Example: 'samAccountName -like "admin*"'
        More information: https://technet.microsoft.com/en-us/library/hh531527(v=ws.10).aspx
    .PARAMETER SearchBase
        A SearchBase used to pass to Get-ADUser, specifies an Active Directory path to search under.
        Example: "OU=Office,DC=Company,DC=com"
        More information: https://technet.microsoft.com/library/hh852208.aspx
    .PARAMETER Server
        Specifies the AD DS instance to connect to, by providing one of the following values for a corresponding domain name or directory server.
        More information: https://technet.microsoft.com/library/hh852208.aspx
    .PARAMETER ADUserPincodePropertyName
        Optional ActiveDirectory User Property which contains the pincode
    .PARAMETER ADUserNamePropertyName
        Optional ActiveDirectory User Property which contains the name of the user, in case you do not want to use the default property
    .PARAMETER ADSpecificUsername
        Optional way to get a specific username from ActiveDirectory which should be used to authenticate the users when he logs in into GoBright BrightBooking (app/portal). You can choose which username should be used, DOMAIN\UserName or the UserPrincipalName (UPN)
    .PARAMETER BrightBookingApiUrl
        Address of the GoBright BrightBooking API, e.g.: https://eu1.api.brightbooking.eu/
    .PARAMETER BrightBookingApiKey
        API key of the user to use to process the import
    .PARAMETER BrightBookingIntegrationName
        Name of the integration to link the users to
    .EXAMPLE
        Push-ADUsersToBB -Filter * -BrightBookingApiUrl "https://eu1.api.brightbooking.eu/" -BrightBookingApiKey "[your api key]" -BrightBookingIntegrationName "Office 365"
        # Get all users in the Active Directory and let GoBright BrightBooking process it directly
    .EXAMPLE
        Push-ADUsersToBB -Filter * -SearchBase "OU=Office,DC=Company,DC=com" -BrightBookingApiUrl "https://eu1.api.brightbooking.eu/" -BrightBookingApiKey "[your api key]" -BrightBookingIntegrationName "Office 365"
        # Get the users in the Active Directory, which are member of the given group and let GoBright BrightBooking process it directly
    .EXAMPLE
        Push-ADUsersToBB -Filter { memberOf -RecursiveMatch "CN=Administrators,DC=Company,DC=com" } -SearchBase "OU=Office,DC=Company,DC=com" -ADUserPincodePropertyName PersonnelNumber -BrightBookingApiUrl "https://eu1.api.brightbooking.eu/" -BrightBookingApiKey "[your api key]" -BrightBookingIntegrationName "Office 365"
        # Get the users in the Active Directory, which in the specified SearchBase path, and use the custom property 'PersonnelNumber' as pincode and let GoBright BrightBooking process it directly
    .LINK
        https://support.gobright.com/
    .LINK
        https://technet.microsoft.com/library/hh852208.aspx
    .LINK
        Get-ADUsersForBB
    .LINK
        Convert-ADUsersToBBUserExport
    .LINK
        Export-ADUsersForBB
    #>


    [CmdletBinding()]
    Param(
      [Parameter(Mandatory=$True)]
       [string]$Filter,
   
      [Parameter(Mandatory=$False)]
       [string]$SearchBase,
      
      [Parameter(Mandatory=$False)]
       [string]$Server,

      [Parameter(Mandatory=$False)]
       [string]$ADUserPincodePropertyName,

      [Parameter(Mandatory=$False)]
       [string]$ADUserNamePropertyName,
       
      [Parameter(Mandatory=$False)]
       [string]$ADUserMobilePropertyName = "Mobile",
       
      [Parameter(Mandatory=$False)]
      [ValidateSet("None","UserPrincipalName","DomainPlusUsername")]
       [string]$ADSpecificUsername = "None",

      [Parameter(Mandatory=$True)]
       [string]$BrightBookingApiUrl,

      [Parameter(Mandatory=$True)]
       [string]$BrightBookingApiKey,

      [Parameter(Mandatory=$True)]
       [string]$BrightBookingIntegrationName
    )

    Process {
        $ConvertUsersParams = @{
            ADSpecificUsername = $ADSpecificUsername
        }
        
        $ADUsersParams = @{
            Filter = $Filter
        }
        If ($SearchBase) {
            $ADUsersParams.SearchBase = $SearchBase
        }
        If ($Server) {    
            $ADUsersParams.Server = $Server
        }
        If ($ADUserPincodePropertyName) {
            $ADUsersParams.ADUserPincodePropertyName = $ADUserPincodePropertyName
            $ConvertUsersParams.ADUserPincodePropertyName = $ADUserPincodePropertyName
        }
        If ($ADUserNamePropertyName) {
            $ADUsersParams.ADUserNamePropertyName = $ADUserNamePropertyName
            $ConvertUsersParams.ADUserNamePropertyName = $ADUserNamePropertyName
        }
        If ($ADUserMobilePropertyName) {
            $ADUsersParams.ADUserMobilePropertyName = $ADUserMobilePropertyName
            $ConvertUsersParams.ADUserMobilePropertyName = $ADUserMobilePropertyName
        }
        
        Get-ADUsersForBB @ADUsersParams | Convert-ADUsersToBBUserExport @ConvertUsersParams | Send-ADUsersToBB -BrightBookingApiUrl $BrightBookingApiUrl -BrightBookingApiKey $BrightBookingApiKey -BrightBookingIntegrationName $BrightBookingIntegrationName;
    }
}