Ctrl 0 Geschrieben 25. April 2014 Melden Teilen Geschrieben 25. April 2014 (bearbeitet) Hi Kollegen! Ich benötige ein Script das die "dicken" Ordner identifiziert. Extra Tools sind keine Option (were is the love?). Ich hab da auch schon mal was vorbereitet. Es gibt allerdings noch drei Probleme. #1 Ich bin einfach kein Programmierer.... #2 Das Script soll bis zur dritten Ordnerebene arbeiten (aktuell arbeitet es nur bis zur Zweiten) #3 Es entsteht ein Loop am Ende, den ich mir nicht zuverlässig erklären kann (siehe #1) #4 (lol) Ich bekomme bei Get-ChildItem das -Exclude nicht zum laufen # Schwelle für die Ausgabe in GigaByte $DieGroesse = "0,5" # Abfrage fürs Ziellaufwerk $Laufwerk = Read-Host -Prompt "Bitte geben Sie einen Laufwerksbuchstaben ein ( z.B. D )" cd $Laufwerk":" cd \ # Do the thing ForEach( $File in Get-ChildItem -ErrorAction SilentlyContinue -Force ) { # Sammeln von Daten der Ebene 1 $Groesse = (Get-ChildItem $File.FullName -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property length -ErrorAction SilentlyContinue -Sum).Sum $GroesseFormatiert = "{0:N2}" -f ($Groesse/1GB) # Aufbau der Tabelle der Ebene 1 IF ($GroesseFormatiert -gt $DieGroesse) { $Spalte1 = $File.FullName $Spalte2 = $GroesseFormatiert $obj = New-Object PSObject $obj | Add-Member "Speicherort" $Spalte1 -Force $obj | Add-Member "Größe in GB" $Spalte2 -Force Write-Output $obj } # Sammeln von Daten der Ebene 2 IF ($GroesseFormatiert -gt $DieGroesse) { cd $file ForEach( $File2 in Get-ChildItem -ErrorAction SilentlyContinue -Force ) { $Groesse = (Get-ChildItem $File2.FullName -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property length -ErrorAction SilentlyContinue -Sum).Sum $GroesseFormatiert = "{0:N2}" -f ($Groesse/1GB) # Aufbau der Tabelle der Ebene 2 IF ($GroesseFormatiert -gt $DieGroesse) { $Spalte1 = $File2.FullName $Spalte2 = $GroesseFormatiert $obj = New-Object PSObject $obj | Add-Member "Speicherort" $Spalte1 -Force $obj | Add-Member "Größe in GB" $Spalte2 -Force Write-Output $obj } cd \ } Write-Host "-------------------------------------------------------------------------------" } } #EOF Allen denen diese Lösung schon weiterhilft: viel Spaß Allen die mir helfen können schon mal: vielen Dank bearbeitet 25. April 2014 von Ctrl Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 25. April 2014 Melden Teilen Geschrieben 25. April 2014 Was meinst du bis zur dritten Ebene? Das Script soll bis zu drei Ebenen anzeigen, wie groß die Inhalte darin sind. z.B. d:\daten -> 12GB (Summe der enthaltenen Ordner (und Dateien)) d:\daten\folder -> 7GB (Summe der enthaltenen Ordner (und Dateien)) d:\daten\folder\foo -> 2GB d:\daten\folder\bar -> 5GB d:\daten\folder2 -> 5GB (Summe der enthaltenen Ordner (und Dateien)) d:\daten\folder2\foo -> 5GB Ich würde dein Script anders aufbauen. Du zählst die gleichen Daten Doppelt. Lieber auf 3. Ebene jeweils die Größen zählen und dann die Daten summieren. Zitieren Link zu diesem Kommentar
Ctrl 0 Geschrieben 25. April 2014 Autor Melden Teilen Geschrieben 25. April 2014 Hi Dukel, ja so hab ichs gemeint. Leider (siehe #1) komme ich mit den for-each Schleifen nicht so gut zurecht. Daher wars***einlich auch der Loop am Ende. Wenn Du meinst, dass es leichter ist, von der dritten Ebene nach unten zu suchen werde ich das mal durchdenken. Schon mal Danke und schönes Wochenende! Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 25. April 2014 Melden Teilen Geschrieben 25. April 2014 Hab mal was schnell gebaut. $root = 'C:\temp'$e1Size = 0foreach($e1 in (Get-ChildItem $root)){ if($e1.PsIsContainer){ $e2Size = 0 foreach($e2 in (Get-ChildItem $e1.FullName)){ if($e2.PsIsContainer){ $e3Size = 0 get-childitem $e2.FullName -recurse | % { $e3Size += $_.Length } $e2.FullName # Hier als Ausgabe, kann dann in eine Tabelle geschrieben $e3Size # Hier als Ausgabe, kann dann in eine Tabelle geschrieben $e2Size += $e3Size # Übergabe der Größen an höherwertigen Ordner } } get-childitem $e1.FullName | % { $e2Size += $_.Length } $e1.FullName # Hier als Ausgabe, kann dann in eine Tabelle geschrieben $e2Size # Hier als Ausgabe, kann dann in eine Tabelle geschrieben $e1Size += $e2Size # Übergabe der Größen an höherwertigen Ordner }}get-childitem $root | % { $e1Size += $_.Length }$root # Hier als Ausgabe, kann dann in eine Tabelle geschrieben$e1Size # Hier als Ausgabe, kann dann in eine Tabelle geschrieben Zitieren Link zu diesem Kommentar
Daniel -MSFT- 129 Geschrieben 25. April 2014 Melden Teilen Geschrieben 25. April 2014 Ein anderer Weg: Schau Dir mal das FileSystemObject an. Ist wesentlich eleganter als Deine 'Holzhammermethode' Zitieren Link zu diesem Kommentar
Ctrl 0 Geschrieben 28. April 2014 Autor Melden Teilen Geschrieben 28. April 2014 Hi Daniel und Dukel! Jetzt werde ich mal an einer Version ohne Holzhammer arbeiten. Danke für die Antworten (made my day)! Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.