dfritz
Goto Top

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.


$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    
}

Content-ID: 576698

Url: https://administrator.de/forum/verprogrammiert-in-powershell-576698.html

Ausgedruckt am: 23.12.2024 um 17:12 Uhr

144260
144260 04.06.2020 aktualisiert um 14:21:17 Uhr
Goto Top
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 face-sad.
dfritz
dfritz 04.06.2020 aktualisiert um 15:14:43 Uhr
Goto Top
Schläuche da sagste was face-wink

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. Aber irgendwas anderes stimmt auch nicht. Hier mal die Ausage. Die 1 und letzte Zeile dürften nach der Regel nicht da sein ...


PS C:\Users\dfritz> $quelle = 'P:\xxxr'  
$ziel = $quelle+'\backuptemp'  

ls $quelle -Directory | ?{!(ls $_.Fullname -Recurse -File | ?{$_.LastWriteTime -gt (get-date).AddDays(-180)})}


    Verzeichnis: P:\xxxxr


Mode                LastWriteTime         Length Name                                                                                                                                         
----                -------------         ------ ----                                                                                                                                         
da----       04.06.2020     14:12                xxx_G5_CE_V0                                                                                            
da----       18.06.2019     10:33                xxx_in_27_S                                                                                            
da----       08.08.2019     14:31                xxx_G5_CE_V0                                                                                            
da----       17.09.2019     09:48                xxx_W_HM_i                                                                                            
da----       19.09.2019     14:43               xxx_CE_V0                                                                                            
da----       20.09.2019     09:47                xxxG5_CE_V0                                                                                            
da----       07.11.2019     12:20               xxx_CE_V0                                                                                            
da----       04.06.2020     14:25                temp
144260
144260 04.06.2020 aktualisiert um 17:33:29 Uhr
Goto Top
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 face-wink, das hatte ich nur deinem Code entnommen und dachte das war von dir so gewollt.....
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 face-smile. 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