Powershell - IO.Directory - Suchen-Datei-Typen in allen Unterverzeichnissen
Ich rannte über diesem code in einem anderen Beitrag, der schon fast das macht, was ich brauche, aber kann nicht herausfinden, wie es zu ändern, um die Suche nach bestimmten Datei-Typen, d.h. *.bak, .txt, etc. Ich bin mit der Powershell-mit [System.IO.DirectoryInfo], weil, wie andere gesagt haben, mit Get-ChildItem ist zu langsam über das Netzwerk. Ich dachte es wäre nur so etwas wie $fileEntries = [IO.Directory]::GetFiles("C:\", ".bak"), aber es immer noch gibt, jede Datei in jedem Verzeichnis. --PS/.NET-Neuling
try
{
$fileEntries = [IO.Directory]::GetFiles("C:\")
[System.IO.DirectoryInfo]$directInf = New-Object IO.DirectoryInfo("C:\")
$folders = $directInf.GetDirectories()
}
catch [Exception]
{
$_.Exception.Message
$folders = @()
}
foreach($fileName in $fileEntries)
{
#[Console]::WriteLine($fileName);
}
Remove-Variable -ErrorAction SilentlyContinue -Name fileEntries
foreach($folder in $folders)
{
recurse("C:\" + $folder + "\")
}
InformationsquelleAutor user2089287 | 2013-02-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wird diese Schleife durch jede Erweiterung der Suche für alle Dateien in der root-und sub-directories. Sicherzustellen, dass Sie die richtigen Berechtigungen auf die Verzeichnisse alle besonders, wenn Sie von C:\ als root.
Diese Methode funktioniert nur mit der Powershell ausgeführt wird .Net 4.0 oder höher.
Überprüfen und aktualisieren Sie die version von .Net:
Den CLRVersion Wert ist .net-version.
Update der config-Datei wie folgt:
Starten der Powershell-Sitzung und überprüfen Sie die CLRVersion Wert in der $PSVersionTable-variable.
Ich hatte den gleichen Fehler mit Powrshell 2.0 aber es funktioniert auf Powershell 3.0
Mist. Ich habe nicht die Möglichkeit zum installieren von 3.0 noch.
Gibt es eine Möglichkeit, dies zu tun, ohne die EnumerateFiles-Methode? Ich habe auch versucht GetFiles mit [IO.SearchOption]::AllDirectories, sondern lief in den Fehler "Zugriff Verweigert" gegen das "System Volume Information" - Verzeichnis.
Wenn Sie dieses tun, sind an der Wurzel des C:\ Treiber, dann müssen Sie über Vollzugriff auf alle Verzeichnisse sonst bist du verpflichtet, den Zugang verweigert. GetFiles und EnumerateFiles führen die gleiche Funktion, außer EnumerateFiles ist schneller, wie es funktioniert auf die Dateien in der Reihenfolge, in der Erwägung, dass GetFiles liefert die komplette Liste der Dateien zuerst, dann beginnt die Arbeit an Ihnen. Verwenden EnumerateFiles kleben Sie an der Powershell 2.0, aber Sie müssen ändern Sie die Powershell-config-Datei zu verwenden .Net 4.0 oder höher.
InformationsquelleAutor Musaab Al-Okaidi
Dieser arbeitete nach dem erstellen einer config-Datei zu verwenden .NET 4.0 Framework:
InformationsquelleAutor user2089287
Hier ist ein einfaches PowerShell-Skript zum verschieben von vielen Dateien von einem Verzeichnis in strukturierten Verzeichnis nach Jahr, Monat und Tag. Dieser ist sehr schnell, ich hatte über 500K Dateien.
Diese wohl verbessert werden können, aber es funktioniert.
InformationsquelleAutor Manny