从Powershell Group-Object获取数量

时间:2011-02-18 13:53:55

标签: powershell

我正在尝试获取有关我们代码的一些统计信息。这适用于一个模块:

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 :(得分:0)

它起作用(至少对我而言)。可能是因为这些数据是正确对齐的,而您在控制台的最右侧却没有注意到它?此外,您可以使用Foreach cmdlet选择“仅”属性值,而不是使用select。

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要快得多。

答案 1 :(得分:0)

我不能简单地找到方法..但这似乎有效

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作为我的模式,但你必须为你替换它