Ich habe ein PS-Skript auf einem Domänencontroller (SRV2012R2) erstellt.Get-ChildItem in einem riesigen Verzeichnis und RAM-Nutzung
Das Skript prüft jeden freigegebenen Ordner (Netzlaufwerk), um zu sehen, ob es irgendwelche Dateien präsentieren größer als 2 GB:
foreach($dir in $Dirs)
{
$files = Get-ChildItem $dir -Recurse
foreach ($item in $files)
{
#Check if $item.Size is greater than 2GB
}
}
Ich habe folgendes Problem:
Die Aktien mit über ziemlich gefüllt sind 800 GB (Sub-) Ordner, Dateien und die meisten davon sind nur normale Dokumente.
Immer wenn ich mein Skript ausführe, sehe ich, dass die CPU + RAM enorme Mengen verbraucht, während ich mein Skript ausführe (nach 5 Minuten in der Get-Childitem
-Zeile hat der RAM bereits> 4GB erreicht).
Meine Frage ist, warum benötigt Get-ChildItem
so viele Ressourcen? Welche Alternative kann ich verwenden? Weil ich es nicht geschafft habe, mein Skript erfolgreich auszuführen.
Ich habe gesehen, dass ich | SELECT fullname, length
nach meiner Get-ChildItem
-Klausel als eine Verbesserung verwenden kann, aber das hat mir überhaupt nicht geholfen (Abfrage verbraucht immer noch enormen RAM).
Gibt es etwas, was ich tun kann, damit ich die Verzeichnisse ohne großen Widerstand von den Maschinenressourcen durchlaufen kann?
Was ist Ihr Endziel? Sie können dies auch in einer einzigen Zeile erreichen: '$ Files = Get-ChildItem -Recurse | Where-Object {$ PSItem.Length -gt 2GB} ' – TheIncorrigible1