Verzeichnisgröße ermitteln

Verzeichnisgröße ermitteln

Dieses Stück Code ist als Template gedacht. Ein zuvor ermitteltest Verzeichnis kann gegenüber dem aktuellem Stand ausgewertet werden. Dazu achtet man auf Zeile 17: $oldresult = $result . Die alten Daten können natürlich auch aus einem XML-Import kommen.


$BaseDirectory = "C:\Users\adrian\Downloads\Windows-classic-samples-master\Windows-classic-samples-master\"

$result=@()


$alleUnterverzeichnisse = ls $BaseDirectory -Recurse -Directory -Force -Depth 1

foreach($unterverzeichnis in $alleUnterverzeichnisse.fullname)
    {
    Write-Host $unterverzeichnis -ForegroundColor Yellow
    ls -Path $unterverzeichnis -Directory  -Force | % -Begin{$h =@{}  } -Process{ $stat = ls $_.FullName -File -Recurse |`
    Measure-Object -Property Length -sum ; $h.Path =$_.FullName ; $h.Files = $stat.Count ; $h.TotalSize =$stat.sum; $result += [PSCustomObject]$h } -End {<#$result#>} 
    }

# für das erste result wieder einkommentieren um Testdaten zu generieren, später noch einen Import bauen
#$oldresult = $result


function nn($path,$object) ## nn = notNull 
    { #wenn der Index von Path im Object.path nicht gefunden werden kann, wird $false zurückgegeben
    if($object.path.indexof($path) -ge 0){return $true}else{return $false}
    }




$allresults =@($result | Select-Object Path,Files,TotalSize,`
        @{Name='oldFiles'     ;Expression={if(nn $_.Path $oldresult) {$oldresult[$oldresult.Path.indexof($_.Path)].Files}     } },
        @{Name='oldTotalSize' ;Expression={if(nn $_.Path $oldresult) {$oldresult[$oldresult.Path.indexof($_.Path)].TotalSize} } },
        @{Name='oldPath'      ;Expression={if(nn $_.Path $oldresult) {$oldresult[$oldresult.Path.indexof($_.Path)].Path}      } },
        @{Name='ABSTotalSize' ;Expression={[math]::abs($_.TotalSize - $oldresult[$oldresult.Path.indexof($_.Path)].TotalSize) } },
        @{Name='ABSFiles'     ;Expression={[math]::abs($_.Files     - $oldresult[$oldresult.Path.indexof($_.Path)].Files)}},
        @{Name='Deleted'      ;Expression={$false}}, # ich bekomme den Pfad leider nicht aus den Eigenschaften raus.
        @{Name='IsNew'        ;Expression={if(nn $_.Path $oldresult) {return $False} else {return $true} }}  
    )


$existInOld = Compare-Object $result.path $oldresult.Path | ?{$_.SideIndicator -eq "=>"}

$allresults +=@($existInOld.InputObject |%{
    $oldresult[$oldresult.path.indexof($_)] | Select-Object Path,Files,TotalSize,`
        @{Name='oldFiles'     ;Expression={if(nn $_.Path $oldresult) {$oldresult[$oldresult.Path.indexof($_.Path)].Files}     } },
        @{Name='oldTotalSize' ;Expression={if(nn $_.Path $oldresult) {$oldresult[$oldresult.Path.indexof($_.Path)].TotalSize} } },
        @{Name='oldPath'      ;Expression={if(nn $_.Path $oldresult) {$oldresult[$oldresult.Path.indexof($_.Path)].Path}      } },
        @{Name='ABSTotalSize' ;Expression={[math]::abs($_.TotalSize - $oldresult[$oldresult.Path.indexof($_.Path)].TotalSize) } },
        @{Name='ABSFiles'     ;Expression={[math]::abs($_.Files     - $oldresult[$oldresult.Path.indexof($_.Path)].Files)}},
        @{Name='Deleted'      ;Expression={$true}}, 
        @{Name='IsNew'        ;Expression={if(nn $_.Path $oldresult) {return $False} else {return $false} }}   
        }
    )



$allresults | ogv