我正在尝试编写一个Powershell脚本,该脚本列出了由于错误而在TFS上更改的所有源文件。这个想法是那些变化最大的文件是重构或重写的候选者。
我找到了一个script来列出自日期以来更改的项目。
###############################################################
#
# Search for all unique file changes in TFS
# for a given date/time range and collection location.
# Write results to a manifest file.
#
# Author: Gary A. Stafford
# Created: 2012-04-18
# Revised: 2012-08-11
#
###############################################################
# Clear Output Pane
clear
# Enforce coding rules
Set-StrictMode -version 2.0
# Loads Windows PowerShell snap-in if not already loaded
if ( (Get-PSSnapin -Name Microsoft.TeamFoundation.PowerShell -ErrorAction SilentlyContinue) -eq $null )
{
Add-PSSnapin Microsoft.TeamFoundation.PowerShell
}
# Variables - CHECK EACH TIME
[string] $tfsCollectionPath = "http://tfs2010/tfsCollection"
[string] $locationToSearch = "$/Development/AdventureWorks/"
[string] $outputFile = "c:\ChangesToTFS.txt"
[string] $dateRange = "D2012-07-08 00:00:00Z~"
[bool] $openOutputFile = $true # Accepts $false or $true
# For a date/time range: 'D2012-08-06 00:00:00Z~D2012-08-09 23:59:59Z'
# For everything including and after a date/time: 'D2012-07-21 00:00:00Z~'
[Microsoft.TeamFoundation.Client.TfsTeamProjectCollection] $tfs = get-tfsserver $tfsCollectionPath
# Add informational header to file manifest
[string] $outputHeader =
"TFS Collection: " + $tfsCollectionPath + "`r`n" +
"Source Location: " + $locationToSearch + "`r`n" +
"Date Range: " + $dateRange + "`r`n" +
"Created: " + (Get-Date).ToString() + "`r`n" +
"======================================================================"
$outputHeader | Out-File $outputFile
Get-TfsItemHistory $locationToSearch -Server $tfs -Version $dateRange `
-Recurse -IncludeItems |
Select-Object -Expand "Changes" |
Where-Object { $_.ChangeType -notlike '*Delete*'} |
Where-Object { $_.ChangeType -notlike '*Rename*'} |
Select-Object -Expand "Item" |
Where-Object { $_.ContentLength -gt 0} |
Where-Object { $_.ServerItem -notlike '*/sql/*' } |
Where-Object { $_.ServerItem -notlike '*/documentation/*' } |
Where-Object { $_.ServerItem -notlike '*/buildtargets/*' } |
Where-Object { $_.ServerItem -notlike 'build.xml'} |
Where-Object { $_.ServerItem -notlike '*.proj'} |
Where-Object { $_.ServerItem -notlike '*.publish.xml'} |
Select -Unique ServerItem | Sort ServerItem |
Format-Table -Property * -AutoSize | Out-String -Width 4096 |
Out-File $outputFile -append
Write-Host `n`r**** Script complete and file written ****
If ($openOutputFile) { Invoke-Item $outputFile }
如果我稍微修改这个脚本,我会得到所有的错误:
$bugs = Get-TfsItemHistory $locationToSearch -Server $tfs -Version $dateRange `
-Recurse -IncludeItems | Select-Object -ExpandProperty AssociatedWorkItems | Where-Object {$_.WorkItemType -eq 'Bug'}
我遇到的问题是将两者结合起来。使用上面的脚本,上下文切换到Work-Item。我如何仍然列出符合因错误而更改标准的源文件?
答案 0 :(得分:0)
根据您的信息,您可以列出作为工作项目的一部分更改的所有文件。示例代码如下:
function Get-TfsItem([int] $workItemNumber)
{
Get-TfsServer njtfs -all |
foreach { $_.wit.GetWorkItem($workItemNumber) } |
foreach { $_.Links } |
foreach { ([regex]'vstfs:///VersionControl/Changeset/(\d+)').matches($_.LinkedArtifactUri) } |
foreach { $_.groups[1].value } |
Get-TfsChangeset |
Select-TfsItem |
Sort Path -Unique
}