2012-10-24 4 views
2

저는 Powershell을 처음 사용하고있어서 문제가 생겼을 때 도움이됩니다. 나는 Directory에 대한 정보를 사용해, 객체를 반환하는 함수를 만들었습니다 :두 개의 어레이와 값을 객체로 비교

DATE : 2012년 10월 12일

컴퓨터 : PC1

DIRECTORY : C : \의 TEMP

FOLDERSIZE_IN_MB : 70

디렉토리를 반복하여 크기 정보를 수집하고이를 일주일에 한 번 CSV 파일로 내 보냅니다. 나는 DIR 성장에 대한 몇 가지 정보를 얻고 싶은

:

은 여기 내 문제를 시작합니다. 가장 오래된 CSV 파일과 가장 새로운 CSV 파일을 가져와 스크립트를 작성하기 시작했습니다.

$data="C:\LOG\Data" 
$data= gci -path $data -filter "*.csv" 
$temp="" 
$old,[email protected]() 

foreach($item in $data){ 


    If((Get-Date $item.LastWriteTime -format ("ddMMyyyy")) -gt $temp){ 

     $new+= $item.FullName |Import-CSV -delimiter ";" 
    } 
    Elseif((Get-Date $item.LastWriteTime -format ("ddMMyyyy")) -lt $temp){ 
     $old+= $item.FullName |Import-CSV -delimiter ";" 
    } 

$temp=(Get-Date $item.LastWriteTime -format ("ddMMyyyy")) 
} 

어떻게 두 개의 배열을 비교하여 두 개의 배열을 비교할 수 있으며 둘 다 동일한 크기의 벡터를 찾을 수 있습니까?

내가 확인하는 방법을 잘 모릅니다 :

IF C : OLD 및 C : \ temp와 NEW의 \의 TEMP 다음 callulate (1- (SIZEOLD/SITZENEW)) * 100.

내가 같은 출력을 얻을 것이 좋을 것이다 :

DATE : 2012년 10월 12일

컴퓨터 : PC1

DIRECTORY : C : \의 TEMP

을 FOLDERSIZE_IN_MB : 80,5

GROWTH_SINCE_LAST_SCAN : 15 %

이것은 내 문제를 해결하기 위해 수행 한 것이지만 견고하지 않으며 해시를 개체로 변환하여 결과를 CSV 형식으로 다시 변환하는 방법을 알지 못합니다.

$ 된 = $ 오래된 | 가장 기대 방법은 gci | measure-object -sum length 기반으로 할 것

$result1=compare $new $old -property Name -includeequal -passthru |WHERE {$_.Sideindicator -eq "=="} 
$result2=compare $old $new -property Name -includeequal -passthru |WHERE {$_.Sideindicator -eq "=="} 

for($i=0;$i -le $result1.count;$i++){ 

    if($result1[$i].Name -contains $result2[$i].Name){ 

     $Size2=($result2[$i].Group)| select-object -property FolderSize_in_MB 
     $Size1=($result1[$i].Group)| select-object -property FolderSize_in_MB  

      if(([int]$Size1.FolderSize_in_MB) -ne "0"){ 
       $growth=(1-(([int]$Size2.FolderSize_in_MB)/([int]$Size1.FolderSize_in_MB)))*100 
      } 
      else{ 
       $growth="0" 
      } 
     } 
    else{ 

    } 
    if($result1[$i]){ 

    $result1[$i].Group| ADD-Member NoteProperty Growth ("{0:n2}"-f $growth +"%") 


    } 
} 
+0

이것을 시도하십시오 - http://technet.microsoft.com/en-us/library/ee156812.aspx –

답변

0

그룹 객체 항목 | 그룹 객체 항목 $ 새 = $ 새. Scripting Guys는 done it that way입니다.

수제 솔루션의 경우 디렉토리 이름과 크기를 파일에 저장하고 싶습니다. 다음에 실행할 때 데이터를 가져 와서 내용에 해시 테이블을 만듭니다. 각 dir의 전체 이름을 해시 키로 사용하고 크기를 값으로 사용하십시오. 현재 디렉토리 크기를 읽고 해시 테이블에서 오래된 크기를보십시오. (당신은 해시 테이블을 직렬화 할 수 있습니다, 나는 적절하게 그렇게 할 것입니다.)

$ht = @{} 
$oldDirs = import-csv "lastStatus.log" # Assume: Name,Size 

$oldDirs | % { 
    $ht.Add($_.Name, $_.Size) 
} 

$newDirs = gci -path $data -filter "*.csv" 

$newDirs | % { 
    # If the hashtable contains dir with same name, read the size and print comparison 
    if($ht.ContainsKey($_.FullName)) { 
    $oldValue = $ht.Item($_.FullName) 
    $("{0}, {1}% " -f $_, (1-($oldValue/$_.Size))*100) # Get current size here somehow 
    } 
} 
+0

고맙습니다. 시도해 보겠습니다. – PointerNullException

+0

일해 주신 대단히 감사합니다. – PointerNullException