Powershell和TFS:tf.exe和Power tools TFS cmdlets相比如何选择?

8
我正在创建一个脚本,用于在我的TFS实例中进行大量移动。我有2010 TFS Power Tools中提供的tfs cmdlets,但它们的get-help文档非常简洁。具体来说,Add-TfsPendingChange似乎不支持重命名,这迫使我使用"tf.exe rename"。首先:我是否错过了cmdlets的文档?我尝试在命令上使用get-help,但它们不支持-detailed或-examples标志。还有其他更详细的信息可用吗?其次,相对于常规tf.exe,我有什么理由更喜欢任何cmdlets?除了在执行类似功能时通过管道传递对象之外,还有其他好处吗?
3个回答

6
TF 命令集目前还比较简约,提供的文档也很少。一般来说,如果 TF 命令集支持我的操作,我会使用它们,尤其是在有任何疑问时。查询命令集的输出处理更加容易,因为它们提供了丰富的对象,而不是像 tf status . /r 这样需要解析的文本流。
另外请记住,在 x64 Windows 系统上,TF 命令集只能在 32 位 PowerShell 主机中运行。

1
关于x86控制台的建议不错。我找到了dll-Help.xml文件,但使用get-help阅读它更好。谢谢! - bwerks
哇,显然 cmdlets 完全无法检测/处理合并更改。看来我只能回到 tf.exe 了。 - bwerks
将来考虑在PowerShell中使用TFS公共程序集(请参见我的答案中的示例代码)。 - weir

6

虽然 tf cmdlets 不是完全无用的,但是...我们决定暂时不在我们的构建环境中尝试使用它们,即使这意味着需要进行文本解析。

除了 x64 之外,还有很多缺失的命令(感谢 @Keith)和缺失的参数,而且最重要的是,它们不能在远程会话中使用!


3
第三个选项是在PowerShell中使用TFS公共程序集。使用此方法,您可以访问所有TFS客户端功能,并仍然可以使用TFS cmdlets。选择这种方法还是tf.exe和其他TFS命令行可执行文件取决于您喜欢哪种脚本环境。
以下是引用TFS 2013公共程序集的PowerShell命令(对于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对象的PendRenameGetPendingChangesCheckin方法。
类似于这样:
$workspace = Get-Workspace
$workspace.PendRename($oldItemPath, $newItemPath)
$pendingChange = $workspace.GetPendingChanges($oldItemPath)
$workspace.Checkin($pendingChange, $comment)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接