Public/Google/Get-GoogleOrgUnitsForProcessing.ps1

function Get-GoogleOrgUnitsForProcessing {
    param (
        [Parameter(Mandatory = $true)]
        $UserList,

        [Parameter(Mandatory = $true)]
        $UserRootOU,

        [Parameter(Mandatory = $true)]
        $CurrentOrgUnits
    )

    #Add the OUs to check from only active users
    $OUList = @()
    foreach ($item in $UserList | Where-Object {$_.IDBActive -eq $true}) {
        $OUList += $item.GoogleOrganizationalUnit
        $OUList += $item.GoogleOrganizationalUnitTrash
    }

    #Expand all OUs to include every ancestor path
    $OUListExpanded = @()
    foreach ($ou in $OUList) {
        $parts = $ou.TrimStart('/').Split('/')
        for ($i = 1; $i -le $parts.Count; $i++) {
            $OUListExpanded += '/' + ($parts[0..($i-1)] -join '/')
        }
    }

    #Create list for processing - deduplicated, missing only, sorted by depth (parent-first)
    $OrgUnitsForProcessing = $OUListExpanded |
        Sort-Object -Unique |
        Where-Object { $_ -notin $CurrentOrgUnits } |
        Sort-Object { ($_ -split '/').Count }

    foreach ($item in $OrgUnitsForProcessing) {
        Write-Log -Message "Google: Adding Org Unit to Process List: Create: $($item)"
    }

    return $OrgUnitsForProcessing | Sort-Object -Unique
}