如何使用PowerShell访问“自定义”或非系统TFS工作项字段?

时间:2010-12-16 17:50:52

标签: powershell tfs tfs2008

当使用PowerShell从TFS中提取信息时,我发现我可以访问标准字段而不是“自定义”字段。我不确定自定义是正确的术语,但是例如,如果我查看VS2008中的Process Editor并编辑Work Item类型,则会出现如下列出的字段,其中包含Name,Type和RefName:

Title         String    System.Title
State         String    System.State
Rev           Integer   System.Rev
Changed By    String    System.ChangedBy

我可以使用Get-TfsItemHistory访问这些:

Get-TfsItemHistory "$/path" -Version "D01/12/10~" -R 
  | Select -exp WorkItems | Format-Table Title, State, Rev, ChangedBy -Auto

到目前为止一切顺利。

但是,WorkItem类型中还有一些其他字段,我称之为“自定义”或非系统字段,例如:

Activated By  String    Microsoft.VSTS.Common.ActivatedBy
Resolved By   String    Microsoft.VSTS.Common.ResolvedBy

以下命令不会检索数据,只是空格。

Get-TfsItemHistory "$/path" -Version "D01/12/10~" -R 
  | Select -exp WorkItems | Format-Table ActivatedBy, ResolvedBy -Auto

我也尝试过引号中的名字,完全限定的refname,但没有运气。你如何访问这些“非系统”字段?

由于

博兹

更新:

根据Keith的回答,我可以得到我需要的字段:

Get-TfsItemHistory "$/Hermes/Main" -Version "D01/12/10~" -Recurse `
  | Select ChangeSetId, Comment -exp WorkItems `
  | Select ChangeSetId, Comment, @{n='WI-Id'; e={$_.Id}}, Title -exp Fields `
  | Where {$_.ReferenceName -eq 'Microsoft.VSTS.Common.ResolvedBy'} `
  | Format-Table ChangesetId, Comment, WI-Id, Title, @{n='Resolved By'; e={$_.Value}} -Auto

注意: 将WorkItem的Id重命名为WI-Id是必要的,因为Id与Field Id不明确。 重命名Fields Value属性会给出一个列标题名称而不是“Value”。

1 个答案:

答案 0 :(得分:3)

每个工作项中都有一个Fields集合属性,似乎包含所有工作项字段和值。像这样访问它:

Get-TfsItemHistory . -r -vers "D12/14/2010~" | 
    Where {$_.WorkItems.count -gt 0} | Select -Expand workitems | 
    Select @{n='WIT-Id';e={$_.Id}},Title -Expand Fields | 
    Where {$_.ReferenceName -eq 'Microsoft.VSTS.Common.ActivatedBy'} | 
    Format-Table Value,WIT-Id,Title -auto