일부 XML 로그 파일의 요약 데이터를 반환하는 작은 Powershell 함수를 작성하려고합니다. 나는이 같은이 함수를 호출 할 수 있어야한다고 생각Powershell은 루프를 통해 매번 동일한 데이터를 반환합니다.
function Summarize-Log($log)
{
$obj = New-Object Object
$obj | Add-Member NoteProperty Date $log.lastwritetime
$obj | Add-Member NoteProperty Passed ([xml](get-content $log)).suite.passed
$obj | Add-Member NoteProperty NotImplemented ([xml](get-content $log)).suite.notImplemented
return $obj
}
: 나는 짧은 요약하는 기능 썼다 나는 다음과 같이 호출하면
dir -recurse $logDirs | where { $_.name -eq "MyLog.xml" } | foreach{ Summarize-Log $_ }
를, 그것에서 같은 숫자를 읽을 것 각각은 루프를 통과합니다. Date 속성은 정확하지만 get 매개 변수 호출이 입력 매개 변수에 관계없이 동일한 데이터를 반환하는 것처럼 XML에서 읽히는 두 속성은 올바르지 않습니다.
어떻게 수정합니까?
지금은 전체 파일을 두 번 읽는 것처럼 코드에서 나타납니다. 이 정보를 얻는보다 효율적인 방법이 있습니까?
업데이트 된 2.0의 New-Object cmdlet을 사용하는 BTW에서는 Add-Member를 자주 사용하지 않는 경향이 있습니다. '$ props = @ {Date = $ log.LastWriteTime; Passed = ...}; $ obj = new-object psobject -prop $ props'. 그것은 덜 장황하고 IMO와 같이 읽기 쉽습니다. –
속성의 순서를 제어 할 수 있기 때문에 계속해서 Add-Member로 넘어 가고 있습니다. 그것은 너무 나쁘다. -Property는 IEnumerable>을 제공 할 수 없다. –
OldFart
대신'dir -recurse $ logDirs | where {$ _. name -eq "MyLog.xml"}''dir -recurse $ logDirs MyLog.xml'을 쓰지 않는 이유는 무엇입니까? 나는 이것이 당신의 문제를 해결할 것이라고 제안하는 것이 아니라 단지 더 간단하다는 것입니다. –