'Issue setting Release pipeline property via REST APIs in Azure DevOps

I am trying to set a property in the Integrations section of a Release pipeline through REST APIs. In the process, I find that a specific property cannot be set until it has been enabled via UI at least once before. The specific property is "BoardsEnvironmentType" and i see this error while trying to set it in the json object,

"The property '$value' cannot be found on this object. Verify that the property exists and can be set."

To reiterate, the same code works if I set the property through UI at least once before, here is the image of the property I am referring to,

enter image description here

Here is my code snippet,

$releaseDefinitions = Invoke-RestMethod -Uri "https://vsrm.dev.azure.com/$organisation/$teamProject/_apis/release/definitions?path=\$Path&api-version=6.1-preview.4" -Method Get -Headers $headers

$releaseDefIds = $releaseDefinitions.value.id


foreach ($id in $releaseDefIds)
    { 

       Write-Host "$id"

       $releaseDefUrl = "https://vsrm.dev.azure.com/$organisation/$teamProject/_apis/release/definitions/"+"$id"+"?api-version=6.1-preview.4"


 $releaseDefinitionDetail = Invoke-RestMethod -Uri $releaseDefUrl -Method Get -Headers $headers
   
 $releaseDefinitionDetail.properties.IntegrateBoardsWorkItems.'$value' = "true"

       

      $releaseEnvironments = $releaseDefinitionDetail.environments.name


      $envCount = $releaseDefinitionDetail.environments.count

    
      for ($i=0; $i -lt $envCount; $i++)

         {
            
           $envName = $releaseDefinitionDetail.environments[$i].name


           $releaseDefinitionDetail.environments[$i].properties.LinkBoardsWorkItems.'$value' = "true"

           

            if ($envName -contains "Dev")

                {
                
                   **$releaseDefinitionDetail.environments[$i].properties.BoardsEnvironmentType.'$value' = "development"**

                } 


Solution 1:[1]

You're using single quotes around the variable which is interpreted as a literal string. If the property needs to be dynamically inferred, you could use Get-Member or evaluate it as a dynamic expression with iex.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 joelforsyth