我是 Powershell 的新手,需要一些帮助来解决问题。我创建了一个函数,它返回一个包含有关目录信息的对象:
日期:2012 年 10 月 12 日
电脑:PC1
目录:C:\TEMP
FOLDERSIZE_IN_MB:70
我遍历目录以收集它们的大小信息,并每周一次将其导出到 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"))
}
如何比较两个数组以在两者中找到相等的 dir vlaues 并计算它们的大小?
我不知道如何检查:
如果 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 +"%")
}
}