Search code examples
tfstfsbuild

Is there a way to get tfs teambuild's controller (and agent) status from the command line?


Is there a way to get tfs 2010 teambuild's controller (and agent) status from the command line? my controllers (have got about 20) keep on having to be restarted (we know why this is) and I'd like a way to run a script (psexec?) to check what's stayed up.


Solution

  • It's possible to have a small console app that does this for you as follows:

    using System;
    using Microsoft.TeamFoundation.Build.Client;
    using Microsoft.TeamFoundation.Client;
    
    namespace GetAgentsStatus
    {
        class Program
        {
            static void Main()
            {
                TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("CollectionUri"));
                IBuildServer buildService = (IBuildServer)teamProjectCollection.GetService(typeof(IBuildServer));
                IBuildController buildController = buildService.GetBuildController("BuildControllerName");
    
                foreach (var agent in buildController.Agents)
                {
                    if(agent.Status == AgentStatus.Offline || agent.Status == AgentStatus.Unavailable)
                    {
                       Console.WriteLine(string.Format("{0} needs restarting",agent.Name));
                    }
                }
            }
        }
    }
    

    If you open any build definition for editing, navigate to "Build Defaults" to retrieve the value of BuildControllerName