小编hex*_*ate的帖子

PowerShell ForEach/Piping混乱

我在PowerShell中使用TFS PowerTools Cmdlet尝试从我的服务器获取有关Changeset和相关WorkItem的一些信息.我把问题归结为我不理解的行为,我希望它不是TFS特定的(所以有人可能能够向我解释这个问题:))

这是我可以开始工作的唯一命令:

Get-TfsItemHistory C:\myDir -recurse -stopafter 5 | % { Write-Host $_.WorkItems[0]["Title"] }

它做了我所期望的 - Get-TfsItemHistory返回一个包含5个ChangeSet的列表,并将它们传递给foreach,它打印出第一个关联WorkItem的Title.那我的问题是什么?我正在尝试编写一个大型脚本,我更喜欢将事物编写为更像C#程序(powershell语法让我哭泣).每当我尝试以任何其他方式执行上述操作时,WorkItems集合为空.

以下命令(我解释为在逻辑上等效)不起作用(WorkItems集合为null):

$items = Get-TfsItemHistory C:\myDir -recurse -stopafter 5
$items | ForEach-Object { Write-Host $_.WorkItems[0]["Title"] }

我真的更喜欢的那个:

$items = Get-TfsItemHistory C:\myDir -recurse -stopafter 5
foreach ($item in $items)
{
    $item.WorkItems[0]["Title"]
    # do lots of other stuff
}

我读了一篇关于'foreach'运算符和ForEach-Object Cmdlet之间差异的文章,但这似乎更像是一场性能争论.这似乎是关于何时使用管道的问题.

我不确定为什么这三种方法都不起作用.任何见解都表示赞赏.

powershell foreach piping tfs2010

11
推荐指数
1
解决办法
2万
查看次数

标签 统计

foreach ×1

piping ×1

powershell ×1

tfs2010 ×1