public/library/Add-PSTSVariableGroup.ps1
function Add-PSTSVariableGroup { [CmdletBinding(DefaultParameterSetName="set1")] param( [Parameter(Mandatory=$true)][string] $project, [Parameter(Mandatory=$true)][string] $name, [parameter(ParameterSetName="set1")] [HashTable] $variables, [parameter(ParameterSetName="set2", Mandatory=$true)] [string] $vault, [parameter(ParameterSetName="set2", Mandatory=$true)] [string] $serviceEndpoint, [parameter(ParameterSetName="set2")] [string[]] $vaultKeys ) process { $null = @( $resp = Get-PSTSServiceEndpoint -project $project | Where-Object {$_.name -eq $serviceEndpoint } [VariableGroup] $variableGroup = [VariableGroup]::new() $variableGroup.name = $name if ($PSCmdlet.ParameterSetName -eq "set2" ) { $variableGroup.providerData = [ProviderData]::new($resp.id, $vault) } # [ProjectReference] = [ProjectReference] $variableGroup.variables = @{} if ($PSCmdlet.ParameterSetName -eq "set2" ) { $variableGroup.type ="AzureKeyVault" $vaultKeys | ` Foreach-Object { $_, $variableGroup.variables.Add( ` $_ , ` $(_getJSONVariable ` -isSecret $true ` ) ` ) } } else { $variables.GetEnumerator() | ` Foreach-Object { $_, $variableGroup.variables.Add( ` $_.Key , ` $(_getJSONVariable ` -isSecret $false ` -value $_.Value ) ` ) } } $content = ` _PSTSAPI ` -project $project ` -resource "distributedtask/VariableGroups" ` -method "POST" ` -body $($variableGroup | ConvertTo-Json -Depth 100) ` -contentType "application/json" ` -apiVersion "api-version=5.1-preview.1" ) return [VariableGroup]$content } } function _getJSONVariable { param( [Parameter()] [string] $value = $([string]::Empty), [Parameter(Mandatory=$true)] [string] $isSecret ) $ret = new-Object -TypeName "PSObject" $ret | Add-Member -MemberType NoteProperty "isSecret" -Value $isSecret $ret | Add-Member -MemberType NoteProperty "value" -Value $value $ret | Add-Member -MemberType NoteProperty "enabled" -Value $true $ret | Add-Member -MemberType NoteProperty "contentType" -Value "" $ret | Add-Member -MemberType NoteProperty "expires" -Value $null return $ret } |