我正在使用 PowerShell 中的 TFS PowerTools Cmdlet 尝试从我的服务器获取有关变更集和相关工作项的一些信息。我把问题归结为我不理解的行为,我希望它不是 TFS 特定的(所以那里的人可能能够向我解释这个问题:))
这是我可以开始工作的唯一命令:
Get-TfsItemHistory C:\myDir -recurse -stopafter 5 | % { 写主机 $_.WorkItems[0]["Title"] }
它符合我的预期——Get-TfsItemHistory 返回一个包含 5 个 ChangeSet 的列表,并将它们通过管道传送到打印出第一个关联 WorkItem 的 Title 的 foreach。那我的问题是什么?我正在尝试编写一个大型脚本,并且我更喜欢编写看起来更像 C# 程序的代码(powershell 语法让我哭了)。每当我尝试以任何其他方式执行上述操作时,WorkItems 集合都是空的。
以下命令(我将其解释为逻辑等效)不起作用(WorkItems 集合为空):
$items = Get-TfsItemHistory C:\myDir -recurse -stopafter 5 $项目 | ForEach-Object { 写入主机 $_.WorkItems[0]["Title"] }
我真的更喜欢的一个:
$items = Get-TfsItemHistory C:\myDir -recurse -stopafter 5 foreach($item 中的 $item) { $item.WorkItems[0]["标题"] # 做很多其他的事情 }
我读了一篇关于“foreach”运算符和 ForEach-Object Cmdlet 之间区别的文章,但这似乎更像是一场性能辩论。这似乎是关于何时使用管道的问题。
我不确定为什么这三种方法都不起作用。任何见解都值得赞赏。