2

私は Powershell を初めて使用するので、問題が発生した場合に助けが必要です。ディレクトリに関する情報を含むオブジェクトを返す関数を作成しました。

日付: 2012 年 10 月 12 日

コンピューター: PC1

ディレクトリ: C:\TEMP

FOLDERSIZE_IN_MB: 70

ディレクトリをループしてサイズの情報を収集し、週に 1 回 CSV ファイルにエクスポートします。

ここで私の問題が始まります:

ディレクトリの成長に関する情報を取得したいと思います。最も古いCSVファイルと最新のCSVファイルをインポートするスクリプトを書き始めました。

$data="C:\LOG\Data"
$data= gci -path $data -filter "*.csv" 
$temp=""
$old,$new=@()

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"))
}

2 つの配列を比較して、両方で等しいディレクトリ値を見つけ、それらのサイズで呼び出すにはどうすればよいですか?

チェック方法がわかりません:

OLD の C:\TEMP と NEW の C:\TEMP の場合、(1-(SIZEOLD/SITZENEW))*100 を呼び出します。

次のような出力が得られれば幸いです。

日付: 2012 年 10 月 12 日

コンピューター: PC1

ディレクトリ: C:\TEMP

FOLDERSIZE_IN_MB: 80,5

GROWTH_SINCE_LAST_SCAN: 15%

これは私が問題を解決するために行ったことですが、しっかりしているようには見えず、ハッシュをオブジェクトに変換して結果を csv にパイプする方法がわかりません。

$old=$old|グループ オブジェクト アイテム $new=$new|グループ オブジェクト アイテム

$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 +"%")


   } 
}
4

1 に答える 1

0

最も前向きな方法はに基づいていgci | measure-object -sum lengthます。Scripting Guysは、まさにそのようにしています

自家製のソリューションでは、ディレクトリ名とサイズをファイルに保存したいと思います。次回の実行時に、データをインポートし、その内容にハッシュテーブルを作成します。各ディレクトリのフルネームをハッシュキーとして使用し、サイズを値として使用します。現在のディレクトリサイズを読み取り、ハッシュテーブルから古いサイズを確認します。(ハッシュテーブルをシリアル化することもできますが、私はおそらくそうします。)

$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
  }
}
于 2012-10-24T14:31:58.907 に答える