Core/Connect.ps1
|
function Resolve-AerContext { [CmdletBinding()] param( [string[]] $SubscriptionId, [string[]] $ExcludeSubscriptionName = @() ) $context = Get-AzContext -ErrorAction SilentlyContinue if ($null -eq $context -or $null -eq $context.Account) { Write-Host "No Azure context found. Launching interactive login..." -ForegroundColor Yellow Connect-AzAccount -ErrorAction Stop | Out-Null $context = Get-AzContext -ErrorAction Stop } $subs = @(Get-AzSubscription -ErrorAction Stop | Where-Object { $_.State -eq 'Enabled' }) if ($SubscriptionId -and $SubscriptionId.Count -gt 0) { $wanted = @($SubscriptionId | ForEach-Object { $_.Trim().ToLowerInvariant() }) $subs = @($subs | Where-Object { $wanted -contains $_.Id.ToLowerInvariant() }) } foreach ($pattern in $ExcludeSubscriptionName) { if (-not [string]::IsNullOrWhiteSpace($pattern)) { $subs = @($subs | Where-Object { $_.Name -notlike "*$pattern*" }) } } if ($subs.Count -eq 0) { throw "No enabled subscriptions match the provided filters." } $map = @{} foreach ($s in $subs) { $map[$s.Id.ToLowerInvariant()] = $s.Name } return [pscustomobject]@{ TenantId = $context.Tenant.Id TenantDomain = $context.Tenant.Domain ?? $context.Tenant.Id Account = $context.Account.Id Subscriptions = @($subs) SubscriptionIds = @($subs | ForEach-Object { $_.Id }) SubscriptionMap = $map } } |