fix: fetch all groups via -AllPages for large tenants

Replaces default 100-item page limits and =999 workarounds
with -AllPages on group queries across assignment and baseline scripts.
Enables full fzf inline search/filter for group selection.
This commit is contained in:
2026-04-14 18:36:23 +02:00
parent 773ab12901
commit 77f7372d44
5 changed files with 14 additions and 14 deletions

View File

@@ -277,9 +277,9 @@ if($Mode -eq "Backup")
# Preload groups for name resolution in backup # Preload groups for name resolution in backup
Write-Host "`nLoading groups for backup resolution..." -ForegroundColor Cyan Write-Host "`nLoading groups for backup resolution..." -ForegroundColor Cyan
$backupGroupsResponse = Invoke-GraphRequest "/groups?`$select=id,displayName&`$top=999" $backupGroupsResponse = Invoke-GraphRequest "/groups?`$select=id,displayName&`$orderby=displayName" -AllPages
$backupGroups = @{} $backupGroups = @{}
foreach($g in $backupGroupsResponse.value) foreach($g in $backupGroupsResponse)
{ {
$backupGroups[$g.id] = $g.displayName $backupGroups[$g.id] = $g.displayName
} }
@@ -382,8 +382,8 @@ elseif($Mode -eq "Restore")
# Resolve group names to IDs in current tenant if needed # Resolve group names to IDs in current tenant if needed
Write-Host "`nLoading current tenant groups for name resolution..." -ForegroundColor Cyan Write-Host "`nLoading current tenant groups for name resolution..." -ForegroundColor Cyan
$currentGroupsResponse = Invoke-GraphRequest "/groups?`$select=id,displayName&`$top=999" $currentGroupsResponse = Invoke-GraphRequest "/groups?`$select=id,displayName&`$orderby=displayName" -AllPages
$currentGroups = $currentGroupsResponse.value $currentGroups = $currentGroupsResponse
$success = 0 $success = 0
$skipped = 0 $skipped = 0

View File

@@ -252,8 +252,8 @@ Write-Host "Selected $($selectedApps.Count) apps." -ForegroundColor Green
#region Load Groups #region Load Groups
Write-Host "`nLoading Azure AD groups..." -ForegroundColor Cyan Write-Host "`nLoading Azure AD groups..." -ForegroundColor Cyan
$groupsResponse = Invoke-GraphRequest "/groups?`$select=id,displayName&`$orderby=displayName" $groupsResponse = Invoke-GraphRequest "/groups?`$select=id,displayName&`$orderby=displayName" -AllPages
$groups = $groupsResponse.value | Where-Object { $_.displayName } | Sort-Object displayName $groups = $groupsResponse | Where-Object { $_.displayName } | Sort-Object displayName
Write-Host "Found $($groups.Count) groups." -ForegroundColor Green Write-Host "Found $($groups.Count) groups." -ForegroundColor Green
$groupDisplayNames = $groups | ForEach-Object { "$($_.displayName) [$($_.id)]" } $groupDisplayNames = $groups | ForEach-Object { "$($_.displayName) [$($_.id)]" }

View File

@@ -295,8 +295,8 @@ Write-Host "Selected $($selectedObjects.Count) objects." -ForegroundColor Green
#region Load groups & filters #region Load groups & filters
Write-Host "`nLoading Azure AD groups..." -ForegroundColor Cyan Write-Host "`nLoading Azure AD groups..." -ForegroundColor Cyan
$groupsResponse = Invoke-GraphRequest "/groups?`$select=id,displayName&`$orderby=displayName" $groupsResponse = Invoke-GraphRequest "/groups?`$select=id,displayName&`$orderby=displayName" -AllPages
$groups = $groupsResponse.value | Where-Object { $_.displayName } | Sort-Object displayName $groups = $groupsResponse | Where-Object { $_.displayName } | Sort-Object displayName
Write-Host "Found $($groups.Count) groups." -ForegroundColor Green Write-Host "Found $($groups.Count) groups." -ForegroundColor Green
Write-Host "`nLoading assignment filters..." -ForegroundColor Cyan Write-Host "`nLoading assignment filters..." -ForegroundColor Cyan

View File

@@ -378,8 +378,8 @@ $groupCache = @{}
if($baseline.ContainsKey("groups") -and $baseline["groups"]) if($baseline.ContainsKey("groups") -and $baseline["groups"])
{ {
Write-Host "`nResolving groups..." -ForegroundColor Cyan Write-Host "`nResolving groups..." -ForegroundColor Cyan
$existingGroupsResp = Invoke-GraphRequest "/groups?`$select=id,displayName&`$orderby=displayName&`$top=999" $existingGroupsResp = Invoke-GraphRequest "/groups?`$select=id,displayName&`$orderby=displayName" -AllPages
$existingGroups = $existingGroupsResp.value $existingGroups = $existingGroupsResp
foreach($grpDef in $baseline["groups"]) foreach($grpDef in $baseline["groups"])
{ {
@@ -413,8 +413,8 @@ if($baseline.ContainsKey("groups") -and $baseline["groups"])
#region Pre-load all existing groups for assignment resolution #region Pre-load all existing groups for assignment resolution
Write-Host "`nPre-loading group directory..." -ForegroundColor Cyan Write-Host "`nPre-loading group directory..." -ForegroundColor Cyan
$allGroupsResp = Invoke-GraphRequest "/groups?`$select=id,displayName&`$orderby=displayName&`$top=999" $allGroupsResp = Invoke-GraphRequest "/groups?`$select=id,displayName&`$orderby=displayName" -AllPages
foreach($g in $allGroupsResp.value) foreach($g in $allGroupsResp)
{ {
if(-not $groupCache.ContainsKey($g.displayName)) if(-not $groupCache.ContainsKey($g.displayName))
{ {

View File

@@ -242,8 +242,8 @@ if(-not $selectedTypeTitles)
} }
Write-Host "`nLoading groups for name resolution..." -ForegroundColor Cyan Write-Host "`nLoading groups for name resolution..." -ForegroundColor Cyan
$groupsResponse = Invoke-GraphRequest "/groups?`$select=id,displayName&`$top=999" $groupsResponse = Invoke-GraphRequest "/groups?`$select=id,displayName&`$orderby=displayName" -AllPages
$groups = $groupsResponse.value $groups = $groupsResponse
$reportRows = @() $reportRows = @()