How to undelete releases of a release definition?

One of our customer have reported as he has deleted few releases of a given release definition accidentally and wanted to know a way to bulk un-delete those releases. The undelete can be done within 15 days of the soft delete and after that releases are permanently deleted. It can be un-deleted either using Powershell or C# program.

Using powershell:-


param (
[string] $token,
[int32] $definitionId

## Construct a basic auth head using PAT
function BasicAuthHeader()

  $ba = (":{0}" -f $authtoken)
  $ba = [System.Text.Encoding]::UTF8.GetBytes($ba)
  $ba = [System.Convert]::ToBase64String($ba)
  $h = @{Authorization=("Basic{0}" -f $ba);ContentType="application/json"}
  return $h

# Fill in your account name/project name/definition name
$accountName = "anjani1"
$projectName = "TFVCProj"
$definitionNameToRecover = "New Release Definition"
# Find the Id of release definition that got deleted
$deletedReleasesUri = "https://$$projectName/_apis/Release/releases?api-version=4.1-preview.6&isDeleted=true&definitionId=$definitionId"
$h = BasicAuthHeader $token
$deletedReleases = Invoke-RestMethod -Uri $deletedReleasesUri -Headers $h -ContentType application/json" -Method Get
$deletedReleasesIds = $ # | ConvertTo-Json -Depth 100
write-host "Found the total deleted releases : $deletedReleasesIds.count"
For ($i=0; $i -lt $deletedReleasesIds.count; $i++)
$deletedReleaseId = $deletedReleasesIds[$i];
Write-Host "Found the deleted id : $deletedReleaseId";
# Recover the deleted release
$undeleteReason = '{ "Comment" : "Deleted by mistake" }'
$undeleteReleaseUri = "https://$$projectName/_apis/Release/releases/$deletedReleaseId`?comment=$undeleteReason&api-version=4.1-preview.6"
$undeletedDefinition = Invoke-RestMethod -Uri $undeleteReleaseUri -Headers $h -ContentType “application/json" -Method Put -Body $undeleteReason
write-host "Release id: $deletedReleaseId recovered successfully"


Using C# You may refer the blog link to know as how to program using ReleaseManagement client


using System;
using Microsoft.VisualStudio.Services.Client;
using Microsoft.VisualStudio.Services.Common;
using Microsoft.VisualStudio.Services.ReleaseManagement.WebApi.Clients;
using Microsoft.VisualStudio.Services.WebApi;
using Microsoft.VisualStudio.Services.ReleaseManagement.WebApi;
using Microsoft.VisualStudio.Services.ReleaseManagement.WebApi.Contracts;
using System.Diagnostics;

namespace ReleaseHttpClientSample
 class Program

  static void Main(string[] args)


      Uri serverUrl = new Uri("");
      var project = "TFVCProj";
      VssCredentials credentials = new VssClientCredentials();
      credentials.Storage = new VssClientCredentialStorage();
      VssConnection connection = new VssConnection(serverUrl, credentials);
      ReleaseHttpClient rmClient = connection.GetClient<ReleaseHttpClient>();
      var releases = rmClient.GetReleasesAsync(project, definitionId: 1, isDeleted: true).Result;
      foreach(var release in releases)
             rmClient.UndeleteReleaseAsync(project, release.Id, "Deleted by mistake").SyncResult();

Comments (0)

Skip to main content