PowerShell ForEach / Tuyauterie confusion

Je suis l'aide de la TSF PowerTools Applets de commande PowerShell pour essayer d'obtenir des informations sur les Modifications connexes et des WorkItems à partir de mon serveur. J'ai fait bouillir le problème de comportement que je ne comprends pas et je suis en espérant qu'il n'est pas TFS spécifiques (si quelqu'un là-bas peut-être en mesure d'expliquer le problème pour moi 🙂 )

Voici la seule commande que je puisse vous mettre au travail:

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

Il fait ce que j'attends - Get-TfsItemHistory renvoie une liste de 5 ensembles de Modifications, et il les tuyaux de ceux d'un foreach qui affiche le Titre de la première associés WorkItem. Alors, quel est mon problème? Je suis en train d'écrire un grand texte, et je préfère code de choses à regarder de plus comme un programme C# (powershell syntaxe me fait pleurer). Chaque fois que j'essaie de faire les écrits ci-dessus de toute autre manière, les WorkItems collection est null.

Les commandes suivantes (que j'ai interpréter logiquement équivalent) ne fonctionnent pas (Le WorkItems collection est nulle):

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

Celui que je préférerais vraiment:

$articles = Get-TfsItemHistory C:\myDir -recurse -stopafter 5 
foreach ($item de $articles) 
{ 
$item.Les WorkItems[0]["Titre"] 
# faire beaucoup d'autres choses 
} 

J'ai lu un article à propos de la différence entre le 'foreach' l'opérateur et la Cmdlet ForEach-Object, mais qui semble être plus d'une performance débat. Cela semble vraiment être un problème lorsque la tuyauterie est utilisé.

Je ne sais pas pourquoi tous les trois de ces approches ne fonctionnent pas. Toute réflexion est apprécié.

Je ne sais pas quel est le problème, mais il est certainement spécifique à la TSF Applets de commande (ils sont plutôt horrible, omi). Il semble que l'applet de commande était en train de faire le chargement paresseux, et une fois que le pipeline se termine, le contexte de données est parti et il est trop tard pour charger les données, mais la conception des applets de commande est tellement compliquée que je ne pouvais pas le suivre que de loin dans le réflecteur.

OriginalL'auteur hexate | 2010-10-24