如何使用PowerShell从TFS获取某些文件?

时间:2012-07-09 04:59:30

标签: tfs branch powershell-v2.0

我们分支发布后,有一些需要更新的配置文件。目前,我正在获取特定(新)分支上所有源代码的最新版本。这非常耗时并占用大量磁盘空间。

有没有办法搜索/遍历特定分支,只获取符合特定条件的文件?

E.g:

Loop through files under branch on the TFS server
If file name matches "foo.proj" or file name matches "foo.ini" 
Get latest version of the file

使用TF(tf get $/project/foo.proj)的命令行界面可以很容易地获得“get”部分。我不确定如何在没有获得最新版本的情况下循环访问服务器对象。

2 个答案:

答案 0 :(得分:2)

查看TFS PowerToys中的TFS PowerShell Snapin(您需要自定义安装才能选择)。

在32位PSH实例(Add-PSSnapin Microsoft.TeamFoundation.PowerShell)中加载管理单元后,您可以使用:

  • Get-TFSItemProperty在文件夹上获取源代码管理下的项目列表。
  • Update-TfsWorkspace将所有或特定文件/文件夹更新或更新到您的工作区。

更新 :您可以通过PowerToys安装适用于32位的64位PSH TFS管理单元(请参阅注释),在这种情况下,这不仅限于32位PSH实例。

答案 1 :(得分:1)

我最后用过这个:

使用您下载的tftp.exe自定义安装TFS Powershell管理单元。

添加快照:

if ( (Get-PSSnapin -Name Microsoft.TeamFoundation.PowerShell -ErrorAction SilentlyContinue) -eq $null )
{
    Add-PSSnapin Microsoft.TeamFoundation.PowerShell
}

Powershell脚本:

param( [string] $ServerBranchLocation )

$tfs=Get-TfsServer -name http://mytfsserver:8080/tfs
$TfExePath = "${env:ProgramFiles(x86)}\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe"

$matchFoo = "foofile.foo"

foreach ($item in Get-TfsChildItem $ServerBranchLocation -r -server $tfs) 
{ 
    if ($item -match $matchFoo)
    { & "$TFExePath" get $item.ServerItem /force /noprompt }
}

我找不到使用snap in获取最新版本的方法,所以我不得不使用ol'trusty tf.exe。