Um im TFS den zeitlichen Verlauf von Projekten in Form von z.B. Sprints oder Iterationen abzubilden wird der Iterationspfad verwendet. Das manuelle Anlegen der einzelnen Iterationen für einen längeren Zeitraum kann jedoch zu einer aufwendigen Aufgabe werden, da für jede Iteration mindestens der Name sowie das Start- und Enddatum gesetzt werden sollte.
Um diesen administrativen Aufwand einzusparen und eine flexible Iterationsstruktur zu erstellen, die Iterationen verschiedener Längen zulässt, empfiehlt es sich diesen Prozess mit Hilfe eines Power Shell Skripts zu automatisieren. Ziel ist es also am Ende nur noch die Informationen über das jeweilige Projekt sowie den Zeitraum anpassen zu müssen, für welchen Iterationen erstellt werden sollen.
Der logische Aufbau solch eines Skripts lässt sich in vier Teile unterteilen. Im ersten Teil werden zunächst alle benötigten .NET Assemblies geladen. Dazu ist es notwendig im Vorhinein die beiden Dlls “Microsoft.TeamFoundation.Client.dll” und “Microsoft.TeamFoundation.Common.dll”, welche sich im Installationsverzeichnis des TFS befinden, in einem lokalen Verzeichnis abzuspeichern. Erstere stellt die APIs zur Verfügung, um sich zum TFS zu verbinden und um auf Daten aus Team Projekt Collections und Team Projekten zugreifen zu können. Daran anschließend muss der Pfad, welcher die Dlls beinhaltet, entsprechend angepasst werden.
Im zweiten Teil des Skripts befinden sich alle Commandlets, welche mit Funktionalitäten des TFS im Zusammenhang stehen. Hier werden beispielsweise Funktionen definiert, um die entsprechenden TFS Services zu erhalten, Informationen über ein Teamprojekt zu extrahieren oder eben auch um eine neue Iteration zu erzeugen.
Der dritte Teil enthält alle Commandlets, welche zur Berechnung der einzelnen Iterationsdaten notwendig sind, d.h. alle zeitbezogene Funktionen. Für den angegebenen Zeitraum werden die Start- und Enddaten aller Iterationen berechnet, sodass ein Iterationsbaum entsteht der in Quartale, Monate, Zwei-Wochen-Zeiträume, sowie einzelne Wochen gegliedert ist.
Der große Vorteil dieser Vorgehensweise liegt in der variablen Iterationslänge. So kann jedes Team innerhalb eines Teamprojektes separat entscheiden auf welcher Ebene des Iterationsbaumes es arbeiten möchte, d.h. jedes Team kann sich auf eine unterschiedliche Iterationsdauer innerhalb eines gemeinsamen Iterationsbaumes festlegen.
Schließlich findet im vierten Teil des Scripts die eigentliche Ausführung des Programms durch Aufrufen der in den vorhergehenden beiden Teilen definierten Commandlets statt. Um das Skript für eigene Zwecke anzupassen muss an dieser Stelle der Zeitraum sowie die URL der Collection und das Projekt eingetragen werden, für welches die Iterationen erzeugt werden sollen.
Nicht zuletzt kann nun das Skript ausgeführt werden und die Iterationen werden wie gewünscht für das angegebene Teamprojekt erzeugt. Hat man dieses Skript einmal erfolgreich implementiert, so kann es mit nur wenigen Anpassungen für jedes Teamprojekt eingesetzt werden und erspart damit viel Zeit.
Das vollständige Script ist zu finden unter: CreateIterations.zip
Besonderer Dank an dieser Stelle noch an Martin Hinshelwood (MrHinsh), der mit seinem Blogbeitrag PowerShell TFS2013 API#1 – Get TFSCollection and TFS Service einen guten Einstieg in das Thema PowerShell und TFS liefert und einige nützliche Commandlets, wie z.B. Get-TfsCollection, zur Verfügung stellt.