我是Powershell的新手,需要一些问题的帮助。我创建了一个函数,它返回一个关于目录的Infos对象:
日期:2012年12月12日
计算机:PC1
DIRECTORY:C:\ TEMP
FOLDERSIZE_IN_MB:70
我遍历目录以收集其大小的信息,并将其导出为每周一次的CSV文件。
这是我的问题:
我想获得有关dir增长的一些信息。我开始编写一个脚本,导入最旧和最新的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并使用其大小进行调用?
我不知道如何检查:
如果C:\ TEMP在OLD和C:\ TEMP在NEW然后调用(1-(SIZEOLD / SITZENEW))* 100。
我很高兴获得如下输出:
日期:2012年12月12日
计算机:PC1
DIRECTORY:C:\ TEMP
FOLDERSIZE_IN_MB:80,5
GROWTH_SINCE_LAST_SCAN:15%
这就是我解决问题的方法,但我看起来并不稳固,我不知道如何将哈希转换回对象以将结果传递给csv。
$ old = $ old |组对象项 $ new = $ new | Group-object Item
$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 :(得分:0)
最前进的方式是基于gci | measure-object -sum length
。脚本专家只有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
}
}