Подсчет объектов от Where-Object - PullRequest
2 голосов
/ 20 июля 2009

В настоящее время я пытаюсь написать небольшой сценарий powershell (у меня нет опыта работы с сценариями Powershell, поэтому я хотел использовать его в качестве теста), который просматривает наши хранилища svn, подсчитывая, сколько коммитов было сделано с комментарием «Reviewed» by; No-one ", так как это указывает на непроверенный коммит.

В настоящее время у меня есть следующее

$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

}

Это дает мне вывод с количеством в зависимости от того, сколько совпадений он нашел

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

Если я удаляю объект меры, тогда я получаю детали SVN-коммита (ревизия, автор, сообщение, дата и т. Д.)

По сути, я хочу иметь возможность сообщать о количестве непроверенных коммитов и подробностях (так что, по сути, это слияние двух методов, описанных выше). Итак, у меня есть отчет, который выглядит как

Path1:

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

Может ли кто-нибудь просветить меня ?? Это возможно?

Ответы [ 2 ]

5 голосов
/ 20 июля 2009

Это то, для чего предназначен командлет 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

Здесь нет ничего, что вы не могли бы сделать, вручную разбив конвейер и назначив переменные, но «ти» - удобный способ узнать это.

Другое его обычное использование - запись промежуточных результатов в файл. См. 'Help tee -examples' для подробной информации.

2 голосов
/ 20 июля 2009

хорошо, в этом случае вам придется выводить две разные вещи. Я бы посоветовал вам сохранить результат конвейера, который выполняет работу, в переменной, а затем сделать что-то вроде следующего:

$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

Таким образом, вы просто выводите число, а затем просто отбрасываете свою коллекцию из конвейера, чтобы напечатать ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...