2009-07-20 7 views
2

Je suis en train d'essayer d'écrire un petit script PowerShell (je n'ai aucune expérience dans les scripts Powershell donc je voulais utiliser ça comme un test) qui boucle dans nos dépôts svn en comptant combien de commits ont été faits avec un commentaire de "Révisé par; Personne" car cela indique un commit non révisé.Comptage d'objets à partir de Where-Object

J'ai actuellement les suivantes

$repositorys = @("Path1", "path2","path3","path4") 
$matches = 0 
foreach ($path in $repositorys){ 
"Path: {0}" -f $path.tostring() 
([xml] (svn log --xml $path)).log.logentry | Where-Object {$_.msg -imatch "(Reviewed By: (no(.*)one))" } | measure-object | format-list 

} 

Cela me donne la sortie avec le compte en fonction du nombre de matchs qu'il a trouvé

  Count Average    Sum     Maximum    Minimum    Property 
      ----- -------    ---     -------    -------    -------- 
       1 

Si je retire la mesure objet puis-je obtenir la les détails de la validation SVN (révision, auteur, message, date, etc.)

Ce que je veux pouvoir rapporter, c'est le nombre de commits non révisés et leurs détails (donc essentiellement une fusion entre les deux méthodes décrites ci-dessus). J'ai donc rapport qui ressemble à

Path1:

Number of un-reviewed commits: xx 
    Revision    Author 
    --------    ------- 
    x     x 

Quelqu'un peut-il me éclairer ?? Est-ce possible?

Répondre

5

Voici à quoi sert la cmdlet Tee-Object.

[xml] (svn log --xml $path)).log.logentry | 
    ? {$_.msg -imatch "(Reviewed By: (no(.*)one))" } | 
    tee -variable temp | 
    measure | 
    % { "Number of un-reviewed commits: $($_.count)" } 
$temp | fl 

Il n'y a rien ici, vous ne pouvez pas faire en brisant manuellement le pipeline & variables assignant, mais « tee » est un raccourci pratique pour savoir.

Son autre usage commun est d'écrire des résultats intermédiaires dans un fichier. Voir 'aide tee -examples' pour plus de détails.

2

Eh bien, dans ce cas, vous devez sortir deux choses différentes. Je vous suggère de sauvegarder le résultat du pipeline qui fait le travail dans une variable puis faire quelque chose comme ce qui suit:

$x = ([xml] (svn log --xml $path)).log.logentry | Where-Object {$_.msg -imatch "(Reviewed By: (no(.*)one))" } 

Write-Host Number of un-reviewed commits: ($x.Count) 
$x | fl 

Donc, vous venez de sortir le numéro, puis déposez simplement votre collection de la conduite à imprimer il.