private/tests-shared/Get-GroupNameFromId.ps1
|
function Get-GroupNameFromId { <# .SYNOPSIS Resolves group GUIDs to display names from Entra. .DESCRIPTION Takes an array of targets (GUIDs or strings) and resolves GUIDs to group display names by querying Entra via Microsoft Graph API. .PARAMETER TargetsArray Array of target values (GUIDs or strings like 'AllUsers') .EXAMPLE $resolved = Get-GroupNameFromId -TargetsArray $targets Returns an array of resolved display names .OUTPUTS Array of strings (resolved names or original values) #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string[]]$TargetsArray ) $displayArray = @() $targetMap = @{} # Use HashSet for deduplication of GUIDs to query $guidsToQuery = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::OrdinalIgnoreCase) # 1. Classification & Deduplication foreach ($target in $TargetsArray) { $targetMap[$target] = $target # Default fallback $guidRef = [System.Guid]::Empty if ([System.Guid]::TryParse($target, [ref]$guidRef)) { [void]$guidsToQuery.Add($target) } } # 2. Query if ($guidsToQuery.Count -gt 0) { try { $guidsArray = @($guidsToQuery) $groups = Invoke-ZtGraphRequest -RelativeUri 'groups' -UniqueId $guidsArray -Select 'id,displayName' -ApiVersion beta -ErrorAction SilentlyContinue Write-PSFMessage -Level VeryVerbose -Message "Groups returned: $($groups.Count)" if ($null -ne $groups -and $groups.Count -gt 0) { foreach ($group in $groups) { if ($group.id -and $group.displayName) { $targetMap[$group.id] = $group.displayName } } } } catch { Write-PSFMessage -Level Warning -Message "Unable to resolve group GUIDs: $_" } } # 3. Reconstruct Output foreach ($target in $TargetsArray) { $displayArray += $targetMap[$target] } # Comma operator prevents PowerShell from unrolling single-element arrays return ,$displayArray } |