Public/Add-EntraIDAzureDevOpsFederatedCredentialAccessTokenProfile.ps1
<# .SYNOPSIS Adds a new profile for getting Entra ID access tokens. .EXAMPLE Add-EntraIDAccessTokenProfile #> function Add-EntraIDAzureDevOpsFederatedCredentialAccessTokenProfile { [CmdletBinding(DefaultParameterSetName="resource")] Param ( [Parameter(Mandatory = $false)] [String] $Name = "Default", [Parameter(Mandatory = $false, ParameterSetName = "resource")] [String] $Resource = "https://graph.microsoft.com", [Parameter(Mandatory = $false, ParameterSetName = "scope")] [String] $Scope = "https://graph.microsoft.com/.default", [Parameter(Mandatory = $false)] [String] $TenantId = $ENV:AZURESUBSCRIPTION_TENANT_ID, [Parameter(Mandatory = $false)] [ValidatePattern("^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$")] [String] $ClientId = $ENV:AZURESUBSCRIPTION_CLIENT_ID, # Specifies that we want a V2 token [Parameter(Mandatory = $false, ParameterSetName = "scope")] [Switch] $V2Token ) Process { if ($Script:Profiles.ContainsKey($Name)) { Write-Warning "Profile $Name already exists, overwriting" } if($PSCmdlet.MyInvocation.BoundParameters.ContainsKey("V2Token")) { Write-Warning "The V2Token parameter is deprecated and will be removed in a future release. The presence of a Scope parameter now implies a V2 token." } $Script:Profiles[$Name] = @{ AuthenticationMethod = "azuredevopsfederatedcredential" ClientId = $ClientId Resource = $PSCmdlet.ParameterSetName -eq "resource" ? $Resource : $null Scope = $PSCmdlet.ParameterSetName -eq "scope" ? $Scope : $null TenantId = $TenantId } Get-EntraIDAccessToken -Profile $Name | Out-Null } } |