Jump to content

Powershell große Ordner ermitteln


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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 von Ctrl
Link zu diesem Kommentar

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.

Link zu diesem Kommentar

Hab mal was schnell gebaut.

 

 


$root = 'C:\temp'

$e1Size = 0
foreach($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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...