从Powershell组对象获取计数

ct3nt3jp  于 2023-03-08  发布在  Shell
关注(0)|答案(2)|浏览(123)

我试图得到一些关于我们代码的统计数据。这对一个模块来说很好:

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

它不工作(虽然名称)。不知道如何绕过这个没有写太多的代码...

9cbw7uwe

9cbw7uwe1#

我找不到更简单的方法,但这似乎是可行的

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作为我的模式,但是您必须将其替换为您的模式

rekjcdws

rekjcdws2#

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

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

Select-Object创建了一个全新的对象,只包含您从传入对象中选择的属性,所以很多时候它是多余的。另外,我建议在Get-ChildItem上使用Filter参数,而不是Include,因为Fiter要快得多。

相关问题