将两个数组与对象作为值进行比较



我是PowerShell的新手,需要解决问题。我创建了一个函数,该函数返回具有有关目录的Infos的对象:

日期:10-12-2012

计算机:PC1

目录:c: temp

foldersize_in_mb:70

i循环通过目录来收集其大小的信息并每周一次将其导出到CSV文件中。

这里开始我的问题:

我想获得有关DIR增长的一些信息。我开始写一个带有导入最古老和最新的CSV文件的脚本。

$data="C:LOGData"
$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"))
}

我如何比较两个阵列以找到同等的dir vlaues并用尺寸呼叫?

我不知道如何检查:

如果c: temp in old and c: new中的temp in new than callutate(1-(sizeold/sitzenew))*100。

我很高兴获得一个输出:

日期:10-12-2012

计算机:PC1

目录:c: temp

foldersize_in_mb:80,5

granning_since_lastrongcan:15%

这是我为解决问题而做的事情,但我看上去并不稳定,我不知道如何将哈希转换回对象将结果管输送到CSV中。

$ old = $ old | group-object项目 $ new = $ new | group-object项目

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

   } 
}

最新的方法将基于gci | measure-object -sum length。脚本人刚刚这样做。

对于自制解决方案,我宁愿将目录名称和大小存储在文件中。在下一项运行中,导入数据并在其内容上创建一个标签。将每个DIR的全名作为哈希键和大小作为值。读取当前的DIR尺寸,并从Hashtable中看旧尺寸。(您可以序列化hashtable,我建议这样做。)

$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
  }
}

相关内容

  • 没有找到相关文章

最新更新