Private/Orchestration/Invoke-AzurePhase.ps1
|
function Invoke-AzurePhase { <# .SYNOPSIS Establishes (or reuses) Az context for optional Azure Resource PIM enumeration. .DESCRIPTION Imports Az.Accounts (and leaves context loaded unless environment variable forces disconnect). Handles retry logic, tenant scoping, and silent preference adjustments. .PARAMETER QuietMode Reduce console messages. .PARAMETER AzureSubscriptionIds Specific Azure subscription IDs to process. If not specified, all accessible subscriptions are processed. .OUTPUTS PSCustomObject capturing connection state and errors. #> [CmdletBinding()] param( [switch]$QuietMode, [string[]]$AzureSubscriptionIds ) $data = $script:AzureAuthenticationData $UPN = $null $tenantId = $null # Try to get UPN from Graph context try { $UPN = (Get-MgContext -ErrorAction SilentlyContinue).Account } catch { # Silent failure - continue without UPN } # Try to get tenant ID from Graph context first, then Az context try { $tenantId = (Get-MgContext -ErrorAction SilentlyContinue).TenantId } catch { # Silent failure - try Az context } if (-not $tenantId) { try { $tenantId = (Get-AzContext -ErrorAction SilentlyContinue).Tenant.Id } catch { # Silent failure - continue without tenant ID } } # Check if Az.Accounts module is available if (-not (Import-AzAccountsModule -QuietMode:$QuietMode)) { $data.ProcessingErrors.Add('Az.Accounts module not installed.') if (-not $QuietMode) { Write-Host '[Azure] Skipped (module missing)' -ForegroundColor DarkYellow } return $data } # Store original preference variables $prevWarn = $WarningPreference $prevInfo = $InformationPreference $prevProg = $ProgressPreference $prevVerb = $VerbosePreference $prevDbg = $DebugPreference # Suppress all output during Azure operations $WarningPreference = 'SilentlyContinue' $InformationPreference = 'SilentlyContinue' $ProgressPreference = 'SilentlyContinue' $VerbosePreference = 'SilentlyContinue' $DebugPreference = 'SilentlyContinue' try { $data = Connect-AzContextSafe -DataObject $data -TenantId $tenantId -AccountUpn $UPN -QuietMode:$QuietMode } finally { # Restore original preference variables $WarningPreference = $prevWarn $InformationPreference = $prevInfo $ProgressPreference = $prevProg $VerbosePreference = $prevVerb $DebugPreference = $prevDbg } # (future enumeration placeholder retained) $data = Finalize-AzurePhase -DataObject $data -QuietMode:$QuietMode return $data } |