How to mark an environment in use?


MTM provides a nice Ux to mark the environments in use but one of our customer wanted to do that programmatically. Here is the script for it with execution steps: –

  • Login to a machine with tfs object model installed. (The tfs object model gets installed with VS, MTM, Tfs, test controller etc)
  • Open notepad, copy paste the following script and change the highlighted variables as per your setup/deployment.
  • Open a power-shell command prompt and run the modified power-shell script.
  • It should mark the environment in use if it is not already marked.

Enjoy !!

# Define parameters
$tfsCollectionUrl = New-Object System.URI("
http://myserver:8080/tfs/defaultcollection");
$projectName = "myproject";
$environmentName = "myEnvironment";

# Load Client Assembly
[Reflection.Assembly]::Load(“Microsoft.TeamFoundation.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”);
[Reflection.Assembly]::Load(“Microsoft.TeamFoundation.Common, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”);
[Reflection.Assembly]::Load(“Microsoft.TeamFoundation.Lab.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”);
[Reflection.Assembly]::Load(“Microsoft.TeamFoundation.Lab.Common, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”); 

# Connect to tfs
$tfsCollection = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($tfsCollectionUrl);
$labService = $tfsCollection.GetService([Microsoft.TeamFoundation.Lab.Client.LabService]);

# Query for environments
$labEnvironmentQuerySpec = New-Object Microsoft.TeamFoundation.Lab.Client.LabEnvironmentQuerySpec;
$labEnvironmentQuerySpec.Project = $projectName;
$labEnvironmentQuerySpec.Disposition = [Microsoft.TeamFoundation.Lab.Client.LabEnvironmentDisposition]::Active;

$labEnvironments = $labService.QueryLabEnvironments($labEnvironmentQuerySpec);
foreach ($environment in $labEnvironments)
{
   $envName = $environment.Name;
   if ($envName -eq $environmentName)
   {
     $matchingEnvironment = $environment;
   }
}

# whether the environment is already in use
$inUseMarker = $matchingEnvironment.GetInUseMarker();

if ($inUseMarker -eq $null)
{
   Write-Host Environment is not in-use;

   $matchingEnvironment.SetInUseMarker("Reserving the environment for script testing purpose");
}
else
{
   Write-Host Environment is in-use since $inUseMarker.Timestamp by $inUseMarker.User with details $inUseMarker.Comment;
}

Comments (0)

Skip to main content