2011-02-04 56 views
8

我正在创建脚本以在我的TFS实例中执行大量动作。我有2010 TFS电动工具提供的tfs cmdlet,但它们的获取帮助文档非常稀少。具体来说,Add-TfsPendingChange似乎不支持重命名,这迫使我使用“tf.exe重命名”来代替。Powershell和TFS:tf.exe与电动工具TFS cmdlet?

首先:我是否错过了cmdlet的文档?我已经尝试了对命令的get-help,但他们不支持-detailed或-examples标志。有更多可用的东西吗?

其次:为什么我需要比普通tf.exe更喜欢任何cmdlet?在执行类似功能时,除了将物体通过管道外还有其他好处吗?

回答

6

TF cmdlet在这一点上是一个简约的产品,包括提供的文档。一般来说,我会使用TF cmdlet来支持我想要做的事 - 特别是如果您有任何疑问。处理查询cmdlet的输出要容易得多,因为它们为您提供丰富的对象,而不必使用类似tf status . /r之类的文本流。

另请注意,在x64 Windows系统上,TF cmdlet仅适用于32位PowerShell主机。

+1

在x86控制台的事尼斯通话。我找到了dll-Help.xml文件,但用get-help读取它更好。谢谢! – bwerks 2011-02-05 01:16:36

6

tf cmdlet并不完全没有用,但是......我们决定不要尝试在我们的构建环境中使用它们,尽管它意味着文本解析。

从x64事情

除此之外,还有很多missing commands(感谢@Keith)的缺少的参数,并最重要的,他们不会在远程会话工作!

3

第三个选项是使用PowerShell中的TFS公共程序集。当你这样做时,你可以访问所有的TFS客户端功能,并仍然使用TFS cmdlet。无论您是通过tf.exe还是其他TFS命令行可执行文件选择此方法,都取决于您喜欢哪种脚本环境。

这里是一个PowerShell命令来引用TFS 2013公开程序集(对于TFS 2012或2010,只需将Version=12.0.0.0更改为Version=11.0.0.0Version=10.0.0.0)。

'Microsoft.TeamFoundation.Client', 'Microsoft.TeamFoundation.Common', 'Microsoft.TeamFoundation.VersionControl.Client' | 
    ForEach-Object { 
     Add-Type -AssemblyName "$_, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
    } 

为了您重命名例如,然后你可以:

  1. 使用Get-TfsWorkspace cmdlet来实例化一个 Microsoft.TeamFoundation.VersionControl.Client.Workspace对象。
  2. 致电Workspace对象的PendRename,GetPendingChangesCheckin方法。

事情是这样的:

$workspace = Get-Workspace 
$workspace.PendRename($oldItemPath, $newItemPath) 
$pendingChange = $workspace.GetPendingChanges($oldItemPath) 
$workspace.Checkin($pendingChange, $comment)