Public/func_Get-AzureContext.ps1

Function Get-AzureContext {
  [CmdletBinding()]
  Param(
    [Parameter(Mandatory = $true)]
    [string] $SubscriptionId
  )

  $test = Get-AzContext -WarningAction:SilentlyContinue
  [Microsoft.Azure.Common.Authentication.AzureSession]::ClientFactory.AddUserAgent("pid-af839e51-6ff3-40ff-89d9-8b1afdb8adeb")

  $azSub = Get-AzSubscription -WarningAction:SilentlyContinue `
  | Where-Object { $_.Name -eq $SubscriptionId -or $_.Id -eq $SubscriptionId }

  if ( $null -eq $azSub) {
    Get-AzSubscription -WarningAction:SilentlyContinue | Format-Table
    Get-AzContext -WarningAction:SilentlyContinue -ListAvailable | Format-Table
    throw "Could not find subscription [$SubscriptionId] in available azure subscriptions."
  }
  $env:AZURE_HTTP_USER_AGENT = 'pid-af839e51-6ff3-40ff-89d9-8b1afdb8adeb'
  Set-AzContext -SubscriptionObject $azSub -WarningAction:SilentlyContinue | Out-Null
  $azCtx = Get-AzContext -WarningAction:SilentlyContinue

  return $azCtx
}


## Alternative implementation which will list all matching contexts and require additional filter on Account.
# Function Get-AzureContext {
# [CmdletBinding()]
# Param(
# [Parameter(ValueFromPipeline = $true, Mandatory = $false)]
# [hashtable]$CdfConfig,
# [Parameter(Mandatory = $false)]
# [string] $SubscriptionId
# )

# $triggerAzureSession = Get-AzContext -WarningAction:SilentlyContinue
# $triggerAzureSession -or [Microsoft.Azure.Common.Authentication.AzureSession]::ClientFactory.AddUserAgent("pid-af839e51-6ff3-40ff-89d9-8b1afdb8adeb") | Out-Null
# $env:AZURE_HTTP_USER_AGENT = 'pid-af839e51-6ff3-40ff-89d9-8b1afdb8adeb'

# if ($CdfConfig -and $CdfConfig.Platform -and $CdfConfig.Platform.Env) {
# $SubscriptionId = $CdfConfig.Platform.Env.subscriptionId
# Write-Verbose "Setting Azure Context from CdfConfig subscription: $SubscriptionId"
# $azCtx = Get-AzContext -ListAvailable | Where-Object { $_.Subscription.Id -eq $CdfConfig.Platform.Env.subscriptionId -and $_.Tenant.Id -eq $CdfConfig.Platform.Env.tenantId }
# }
# else {
# $azCtx = Get-AzContext -ListAvailable | Where-Object { $_.Subscription.Id -eq $CdfConfig.Platform.Env.subscriptionId -and $_.Tenant.Id -eq $CdfConfig.Platform.Env.tenantId }
# }

# if ( $null -eq $azCtx) {
# Get-AzSubscription -WarningAction:SilentlyContinue | Format-Table
# Get-AzContext -WarningAction:SilentlyContinue -ListAvailable | Format-Table
# throw "Could not find subscription [$SubscriptionId] in available azure subscriptions."
# }
# return $azCtx
# }