8

我正在创建一个脚本以在我的 TFS 实例中进行大量移动。我有 2010 TFS Power Tools 提供的 tfs cmdlet,但它们的获取帮助文档非常少。具体来说,Add-TfsPendingChange 似乎不支持重命名,这迫使我改用“tf.exe rename”。

首先:我是否以某种方式错过了 cmdlet 的文档?我已经在命令上尝试了 get-help,但它们不支持 -detailed 或 -examples 标志。还有更多可用的吗?

其次:我有什么理由比常规的 tf.exe 更喜欢任何 cmdlet?执行类似功能时,除了通过管道传递对象之外还有其他好处吗?

4

3 回答 3

6

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

还要记住,在 x64 Windows 系统上,TF cmdlet 只能在 32 位 PowerShell 主机中工作。

于 2011-02-04T22:53:51.947 回答
6

tf cmdlet 并非完全没用,但是……我们决定现在不尝试在我们的构建环境中使用它们,即使这意味着文本解析。

除了 x64 的东西,还有很多缺失的命令(感谢@Keith)和缺失的参数,最重要的是,它们在远程会话中不起作用!

于 2011-02-09T04:22:53.130 回答
3

第三种选择是使用 PowerShell 中的 TFS 公共程序集。执行此操作时,您可以访问所有 TFS 客户端功能,并且仍然可以使用 TFS cmdlet。您是否选择此方法tf.exe和其他 TFS 命令行可执行文件取决于您喜欢哪种脚本环境。

这是引用 TFS 2013 公共程序集的 PowerShell 命令(对于 TFS 2012 或 2010,只需更改Version=12.0.0.0Version=11.0.0.0or Version=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-TfsWorkspacecmdlet 实例化 Microsoft.TeamFoundation.VersionControl.Client.Workspace对象。
  2. 调用Workspace对象的PendRenameGetPendingChangesCheckin方法。

像这样的东西:

$workspace = Get-Workspace
$workspace.PendRename($oldItemPath, $newItemPath)
$pendingChange = $workspace.GetPendingChanges($oldItemPath)
$workspace.Checkin($pendingChange, $comment)
于 2015-07-02T15:05:06.300 回答