VSTS WIQL-запросы к связанным рабочим элементам в PowerShell

Используя WIQL(язык запросов рабочих элементов) в PowerShell, я хотел создать отчет о моем командном проекте VSTS, который состоит из деталей рабочего элемента, связывающего отношения всех рабочих элементов в рамках конкретных "Путь итерации" и "Путь области". Пример: Epics→ Особенности →UserStories. Так как есть отношения между родителями и детьми между Epics & Features, а также между Feature & UserStories. Таким образом, входными данными будут "Путь итерации" и "Путь области", а соответствующим выходным документом будет отчет (.csv или.xls), который содержит все детали этих рабочих элементов и их взаимосвязи. Может кто-нибудь сообщить мне, как добиться этого с помощью WIQL в PowerShell?

1 ответ

Решение

Простой пример:

    #Load TFS PowerShell Snap-in
    if((Get-PSSnapIn -Name Microsoft.TeamFoundation.PowerShell -ErrorAction SilentlyContinue) -eq $null)
    {
        Add-PSSnapin Microsoft.TeamFoundation.PowerShell
    }
    #Load Reference Assemblies
    $Tfs2015AssembliesPath="C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer"
    Add-Type -Path "$Tfs2015AssembliesPath\Microsoft.TeamFoundation.Client.dll"
    Add-Type -Path "$Tfs2015AssembliesPath\Microsoft.TeamFoundation.Common.dll"
    Add-Type -Path "$Tfs2015AssembliesPath\Microsoft.TeamFoundation.WorkItemTracking.Client.dll"
    Function GetWorkItems{
        param([string]$teamProjectName,[string]$address)
        $credentials = New-Object System.Net.NetworkCredential("[user name]", "[password]")
        $tfsCollection = New-Object Microsoft.TeamFoundation.Client.TfsTeamProjectCollection((New-Object System.URI($address)))
        $wis = $tfsCollection.GetService([Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore])
        $wiqlQT="select [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State], [System.Tags] from WorkItemLinks where (Source.[System.TeamProject] = @project and Source.[System.WorkItemType] = 'Epic' and Source.[System.State] <> '' and Source.[System.AreaPath] = 'Agile2015Starain' and Source.[System.IterationPath] = 'Agile2015Starain') and ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward') and (Target.[System.TeamProject] = @project and Target.[System.WorkItemType] <> '') mode (Recursive)"
        $variableValues=@{}
        $variableValues.Add("project", $teamProjectName)
        $query=New-Object Microsoft.TeamFoundation.WorkItemTracking.Client.Query($wis,$wiqlQT,$variableValues)
        $witCollection=$query.RunLinkQuery()

           #logical to save data to excel or csv

        $wits=New-Object "System.Collections.Generic.List[Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem]"
        $title=""
        $id=0
        Foreach($witItem in $witCollection)
            {
                $id=$witItem.SourceId
                 if($id -gt 0)
                    {
                        $parentWorkItem = $wits | where {$_['ID'] -eq $id}
                        $t = $parentWorkItem.Title;
                    }
                    $currentWorkItem = $wis.GetWorkItem($witItem.TargetId);
                    $t = $currentWorkItem.Title;
                    $wits.Add($currentWorkItem);
            }
    }

GetWorkItems "Agile2015Starain" "https://[your vsts name].visualstudio.com"
Другие вопросы по тегам