Verprogrammiert in Powershell
Hallo zusammen,
ich brauche Mal eure Hilfe. Ich habe mir ein Script zusammengebaut, das mir jedes Verzeichnis anzeigt inkl. Unterverzeichnis wo Änderungen stattgefunden haben innerhalb der letzten 30 Tage.
Gehen wir mal davon aus, das in 5 von 20 Verzeichnissen in den letzten 30 Tagen Änderungen vorgefallen sind. Ich möchte nun die 15 Verzeichnisse, wo keine Änderungen vorgefallen sind in ein anderes Verzeichnis verschieben (z.B. Archiv). Hat hier jemand einen Tipp für mich ? Stehe irgendwie voll auf dem Schlauch. Danke vorab.
ich brauche Mal eure Hilfe. Ich habe mir ein Script zusammengebaut, das mir jedes Verzeichnis anzeigt inkl. Unterverzeichnis wo Änderungen stattgefunden haben innerhalb der letzten 30 Tage.
Gehen wir mal davon aus, das in 5 von 20 Verzeichnissen in den letzten 30 Tagen Änderungen vorgefallen sind. Ich möchte nun die 15 Verzeichnisse, wo keine Änderungen vorgefallen sind in ein anderes Verzeichnis verschieben (z.B. Archiv). Hat hier jemand einen Tipp für mich ? Stehe irgendwie voll auf dem Schlauch. Danke vorab.
$path="C:\Temp"
$NoOfDirs=Get-ChildItem $path | Where-Object {$_.PSIsContainer -eq $True}
ForEach($dir in $NoOfDirs )
{
Get-ChildItem "$path\$($dir.name)" -Recurse |
Where-Object {($_.LastWriteTime -gt ([DateTime]::Now.Adddays(-30))) -and ($_.PSIsContainer -eq $False) } |
Select-Object @{l='Folder';e={$dir.Name}},Name,LastWriteTime |
Sort-Object -pro LastWriteTime -Descending |
Select -First 1
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 576698
Url: https://administrator.de/contentid/576698
Ausgedruckt am: 22.11.2024 um 14:11 Uhr
3 Kommentare
Neuester Kommentar
Stehe irgendwie voll auf dem Schlauch.
Ja ja, immer sind die Schläuche dran schuld ....$quelle = 'D:\quelle'
$ziel = 'D:\archiv'
ls $quelle -Directory| ?{!(ls $_.Fullname -Recurse -File | ?{$_.LastWriteTime -gt (get-date).AddDays(-30)})} | move-item -Destination $ziel -Force
Verprogrammiert in Powershell
Was ein ausgefallener Titel .Zitat von @dfritz:
Du bist Nah dran. Aber das ist es noch nicht. Du prüfst nur die Verzeichnisse in der Eben "D:\quelle".
Ich muss aber auch prüfen, ob in den Verzeichnissen D:\Quelle\Abc\123 Dateien neuer als 30 Tage sind.
Na dann mach das "ls" erste halt auch -recurse dann läuft auch das Rekursiv durch , das hatte ich nur deinem Code entnommen und dachte das war von dir so gewollt.....Du bist Nah dran. Aber das ist es noch nicht. Du prüfst nur die Verzeichnisse in der Eben "D:\quelle".
Ich muss aber auch prüfen, ob in den Verzeichnissen D:\Quelle\Abc\123 Dateien neuer als 30 Tage sind.
Das Where Object checkt alle Dateien des jeweiligen Verzeichnisses rekursiv, wenn da nur eine Datei jünger wie 30 Tage ist dann wird das Verzeichnis nicht angetastet, weil das Ergebnis durch das "!" ja negiert wird.
Geht hier einwandfrei ...
Hier mal die Ausage. Die 1 und letzte Zeile dürften nach der Regel nicht da sein ...
Du verwechselst hier das Datum des Ordners und mit dem der Dateien . Ich checke ja die Datumswerte der im jeweiligen Ordner enthaltenen Dateien nicht die der Ordner der Ordner könnte sein Datum auch ändern ohne das darin tatsächlich Dateien geändert werden.Willst du die Ordner-Datumswerte zusätzlich und nicht nur die der Dateien mit einbeziehen dann
ls $quelle -Directory | ?{!(ls $_.Fullname -Recurse | ?{$_.LastWriteTime -gt (get-date).AddDays(-30)})} | move-item -Destination $ziel -Force