我正在尝试获取有关我们代码的一些统计信息。这适用于一个模块:
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
它不起作用(虽然名称确实如此)。不知道如何在不写太多代码的情况下解决这个问题......
答案 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作为我的模式,但你必须为你替换它