Я использую командлеты TFS PowerTools в PowerShell, чтобы попытаться получить некоторую информацию о наборах изменений и связанных рабочих элементах с моего сервера.Я свел проблему к поведению, которое я не понимаю, и я надеюсь, что оно не специфично для TFS (так что кто-то может объяснить мне проблему :))
Вот единственная команда, котораяЯ могу приступить к работе:
Get-TfsItemHistory C:\myDir -recurse -stopafter 5 | % { Write-Host $_.WorkItems[0]["Title"] }
Он делает то, что я ожидаю - Get-TfsItemHistory возвращает список из 5 ChangeSets и направляет их в foreach, который печатает заголовок первого связанного WorkItem.Так в чем моя проблема?Я пытаюсь написать большой скрипт и предпочитаю кодировать вещи, чтобы они больше походили на программу на C # (синтаксис powershell заставляет меня плакать).Всякий раз, когда я пытаюсь выполнить вышеописанное любым другим способом, коллекция WorkItems равна нулю.
Следующие команды (которые я интерпретирую как логически эквивалентные) не работают (коллекция WorkItems равна нулю):
$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, но, похоже, это скореедебаты производительности.Это действительно кажется проблемой, когда используется трубопровод.
Я не уверен, почему все три из этих подходов не работают.Любое понимание приветствуется.