PowerShell script to set environment variables in Azure DevOps Pipelines that will persist between tasks.
function Set-AzurePipelinesVariable {
<#
.SYNOPSIS
Set a environment variable in Azure DevOps Pipelines that will
persist between tasks.
.DESCRIPTION
This command uses the VSTS/Azure Pipelines command task.setvariable to
create an envrionment variable which will be available in all following
tasks within the same stage.
.EXAMPLE
Set-AzurePipelinesVariable -Name ProjectName -Value (Get-ProjectName)
.EXAMPLE
Set-AzurePipelinesVariable -Name ProjectName -Value (Get-ProjectName) -Secret
.LINK
https://github.com/Microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md
#>
[CmdletBinding( SupportsShouldProcess = $false )]
[System.Diagnostics.CodeAnalysis.SuppressMessage('PSUseShouldProcessForStateChangingFunctions', '')]
[System.Diagnostics.CodeAnalysis.SuppressMessage('PSAvoidUsingWriteHost', 'Azure Pipelines does not listen to Out-Host')]
param (
# Name of the variable
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string]$Name,
# Value of the variable
[string]$Value,
# The value of the variable will be saved as secret and masked out from log.
# Secret variables are not passed into tasks as environment variables and must be passed as inputs.
[switch]$Secret
)
Process {
$_secret = ""
if ($Secret) { $_secret = ";issecret=true" }
Write-Verbose "storing [$Name] with Azure Pipelines task.setvariable command"
Write-Host "##vso[task.setvariable variable=$Name$_secret]$Value"
}
}