Получить счет от Powershell Group-Object - PullRequest
0 голосов
/ 18 февраля 2011

Я пытаюсь получить статистику о нашем коде. Это прекрасно работает для одного модуля:

function countTestCases($path=$pwd) {
   Get-ChildItem $path -Recurse -Include *.java | Where-Object {-not $_.PSIsContainer } |     Select-String "extends ComponentTestCase", "extends DatabaseDependentTestcase" | Group-Object Pattern | Select-Object Count
}

но я хочу запустить это на всех модулях, чтобы получить вывод CSV, например:

module,#ComponentTestCase,#DatabaseDependantTestCase
module1,20,30
module2,12,1

к сожалению, если я добавлю

| Select-Obejct Count

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

Ответы [ 2 ]

0 голосов
/ 19 февраля 2011

Я не могу проще найти способ ... но это, кажется, работает

Get-ChildItem $path -Recurse -Include *.cs | Select-String "int", "string" | Group-Object Pattern -AsHashTable | foreach {
    new-object psobject -Property @{
        int = $_['int'].Count;
        string = $_['string'].Count;
        module = 'mymodulename'}
    } | select module, int, string

Вывод выглядит как

module                                            int                    string
------                                            ---                    ------
mymodulename                                       19                        78

Я использую string и int в качестве шаблонов, но вам придется заменить их на свои

0 голосов
/ 18 февраля 2011

Работает (по крайней мере у меня). Возможно, это связано с тем, что эти данные выровнены по правому краю, а вы не заметили их в правой части консоли? Кроме того, вместо использования select можно выбрать «просто» значение свойства с помощью командлета Foreach, например ::1002*

Get-ChildItem $path -Recurse -Filter *.java | Where {!$_.PSIsContainer } |
 Select-String "extends ComponentTestCase","extends DatabaseDependentTestcase" | 
 Group-Object Pattern | Foreach {$_.Count}

Select-Object создает совершенно новый объект, который будет содержать только свойства, выбранные вами из входящего объекта, поэтому большую часть времени он будет излишним. Кроме того, я бы рекомендовал использовать параметр Filter на Get-ChildItem вместо Include, так как Fiter немного быстрее.

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