Frage

Wie kann ich eine ich -ish Analyse unter Verwendung von Powershell? Ich möchte regelmäßig die Größe der Verzeichnisse auf meiner Festplatte überprüfen.

Im Folgenden gibt mir die Größe der einzelnen Dateien im aktuellen Verzeichnis:

foreach ($o in gci)
{
   Write-output $o.Length
}

Aber was ich wirklich will, ist die Gesamtgröße aller Dateien im Verzeichnis, einschließlich Verzeichnisse. Ich würde auch gerne in der Lage sein, um es nach Größe zu sortieren, optional.

War es hilfreich?

Lösung

Es gibt eine verfügbare Implementierung auf dem „Exploring Schöner Sprachen“ Blog:

"Eine Implementierung von‚ich ihm *‘in Powershell"

function directory-summary($dir=".") { 
  get-childitem $dir | 
    % { $f = $_ ; 
        get-childitem -r $_.FullName | 
           measure-object -property length -sum | 
             select @{Name="Name";Expression={$f}},Sum}
}

(-Code durch den Blog-Eigentümer: Luis Diego Fallas)

Ausgabe:

PS C:\Python25> directory-summary

Name                  Sum
----                  ---
DLLs              4794012
Doc               4160038
include            382592
Lib              13752327
libs               948600
tcl               3248808
Tools              547784
LICENSE.txt         13817
NEWS.txt            88573
python.exe          24064
pythonw.exe         24576
README.txt          56691
w9xpopen.exe         4608

Andere Tipps

ich den Befehl in der Antwort etwas nach Größe absteigend sortiert werden geändert und ist Größe in MB:

gci . | 
  %{$f=$_; gci -r $_.FullName | 
    measure-object -property length -sum |
    select  @{Name="Name"; Expression={$f}}, 
            @{Name="Sum (MB)"; 
            Expression={"{0:N3}" -f ($_.sum / 1MB) }}, Sum } |
  sort Sum -desc |
  format-table -Property Name,"Sum (MB)", Sum -autosize

Ausgabe:

PS C:\scripts> du

Name                                 Sum (MB)       Sum
----                                 --------       ---
results                              101.297  106217913
SysinternalsSuite                    56.081    58805079
ALUC                                 25.473    26710018
dir                                  11.812    12385690
dir2                                 3.168      3322298

Vielleicht ist es nicht die effizienteste Methode, aber es funktioniert.

function Get-DiskUsage ([string]$path=".") {
    $groupedList = Get-ChildItem -Recurse -File $path | Group-Object directoryName | select name,@{name='length'; expression={($_.group | Measure-Object -sum length).sum } }
    foreach ($dn in $groupedList) {
        New-Object psobject -Property @{ directoryName=$dn.name; length=($groupedList | where { $_.name -like "$($dn.name)*" } | Measure-Object -Sum length).sum }
    }
}

Ich ist ein bisschen anders; I-Gruppe alle Dateien auf Verzeichnisname, dann zu Fuß durch die genannte Liste Gebäude Summen für jedes Verzeichnis (um die Unterverzeichnisse enthalten).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top