internal/functions/Get-EnvironmentBusinessUnit.ps1


<#
    .SYNOPSIS
        Get Business Units from Environment
         
    .DESCRIPTION
        Fetches all Business Units from the environment
         
    .PARAMETER BaseUri
        Base Web API URI for the environment
         
        Used to construct the correct REST API Url, based on the WebApi / OData endpoint
         
    .EXAMPLE
        PS C:\> Get-EnvironmentBusinessUnit -BaseUri 'https://temp-test.crm4.dynamics.com'
         
        This will fetch all Business Units from the environment.
        Uses the WebAPI / OData endpoint.
         
    .NOTES
        Author: Mötz Jensen (@Splaxi)
#>

function Get-EnvironmentBusinessUnit {
    [CmdletBinding()]
    param (
        [Parameter (Mandatory = $true)]
        [string] $BaseUri
    )

    begin {
        $secureToken = (Get-AzAccessToken -ResourceUrl $baseUri -AsSecureString).Token
        $tokenWebApiValue = ConvertFrom-SecureString -AsPlainText -SecureString $secureToken

        $headersWebApi = @{
            "Authorization" = "Bearer $($tokenWebApiValue)"
        }
    }

    process {
        $resBusinessUnits = Invoke-RestMethod -Method Get -Uri $($baseUri + '/api/data/v9.2/businessunits?$expand=business_unit_parent_business_unit') -Headers $headersWebApi

        $resBusinessUnits.value | Select-PSFObject -TypeName "D365Bap.Tools.BusinessUnit" -Property "businessunitid as Id",
        Name,
        @{Name = "ParentId"; Expression = { $_.business_unit_parent_business_unit[0].businessunitid } },
        @{Name = "ParentName"; Expression = { $_.business_unit_parent_business_unit[0].name } },
        "_organizationid_value as OrganizationId"
    }
}