2011-02-18 2 views
0

코드에 대한 통계를 얻으려고합니다. 이것은 하나 개의 모듈에 대해 잘 작동 :Powershell Group-Object에서 카운트 받기

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 출력을 얻기 위해 모든 모듈에 걸쳐이 작업을 실행하려면 : 나는

| Select-Obejct Count 

를 추가하는 경우,

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

을 불행하게도 작동하지 않습니다 (이름은 않습니다). 너무 많은 코드를 작성하지 않고이 문제를 해결하는 방법을 모르겠다. ...

답변

0

그것은 (적어도 나를 위해) 작동합니다. 이 데이터가 올바르게 정렬되어 있고 콘솔의 맨 오른쪽에서이를 알 수 없기 때문일 수 있습니까? Foreach cmdlet을 예로도 사용을 선택하기보다는, 오프 선택할 수 있습니다 "그냥"속성 값 :

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

Select-Object 당신이 많은 있도록 수신 대상에서 선택 단지 속성을 포함하는 새로운 객체를 생성 잔인한 시간입니다. 또한 Get-ChildItemFilter 매개 변수를 Include 이상으로 사용하는 것이 좋습니다. Fiter은 상당히 빠릅니다.

0

나는 방법을 찾아 간단 couldnt한다 ..하지만이에 내가 문자열을 사용하여 내 패턴으로 int로하고있어

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

같은 출력이 보이는

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 

작동하는 것 같다,하지만 당신은거야 너의 것을 위해 그것을 바꿔야 만한다.

+1

보통 공백이없는 한 문자열 args를 인용 할 필요가 없다. 예 :'... | Select-String int, string'도 마찬가지로 작동합니다. 또한 속성 이름 구문에 따라 해시 테이블 값에 접근 할 수 있습니다 :'int = $ _. int.count'. –

+0

huppy_doodoo 그의 패턴에 공백이 있었는데, 나는 단지의 경우 따옴표를 넣어 :) – mrwaim