Powershell Script zum ausgeben von neuster Datei?
Hallo Leute,
Hoffe ihr könnt mir helfen.
Das ist der Auftrag
____
- Script soll Ordner mit allen Unterordnern durchsuchen und die Datei mit dem aktuellsten Änderungsdatum ausgeben (am besten "PAUSE" am Ende schreiben, um die Ausgabe auch zu sehen)
- powershell
- Script soll jetzt für jeden Unterordner die zuletzt geänderte Datei mit Datum anzeigen, also es gibt z.B.:
Ordner1
Ordner2
Ordner3
Darin noch mehr Unterordner Beispieldateien erstellen.
Im Script soll nur der Überordner angegeben werden und pro Ordner nur die neuste Datei ausgegeben werden.
Ausgabe z.B.
Ordner1 datei1.txt 11.09 10:30
Ordner2 datei4.txt 10.09 10:40
Ordner2 datei8.txt 12.09 10:30
___
Danke im Vorraus
1 Antwort
Die neuste Datei in einem ganzen Verzeichnisbaum zu finden ist recht simpel:
- Ordner Rekursive nach Dateien durchsuchen
- alle gefundenen Dateien für die Property LastWriteTime absteigend durchsuchen (höchter Wert zuerst)
- der erste wert hat das Neueste Datum
$Folder = "$Env:Userprofile\Desktop" #zur Demo aktueller Desktop
#Erroraction setzen , es gibt Pfade, af welche man mit Userprivilegien nicht zugreifen kann!
$NewestFile = Get-ChildItem -Path $Folder -File -Recurse -Erroraction SilentlyContinue |
Sort-Object -Property LastWriteTime -Descending |
Select-Object -First 1
'NewestFile in FolderTree: "{0}" is: "{1}" from {2:g}'-f $Folder, $NewestFile.FullName, $NewestFile.LastWriteTime
pause
Um für jeden Ordner im Tree die neuste Datei zu ermitteln, müssen wir etwas anders vorgehen
- Erstmal speichern wir den Startordner in ein Liste
- fügen auch noch alle übrigen Folder hinzu
- führen wir obiges Prozetere für jeden Ordner in unserer Liste aus (...aber ohne Rekursion)
$StartFolder = "$Env:Userprofile\Desktop"
#erstmal das StartOrdner-Objekt in die Liste schreiben.
#Achtung Explizit festlegen, das die Variable ein Array ist
[Array]$FolderList = get-Item $StartFolder
# Alle übrigen Ordner im Tree "merken"
$FolderList += Get-ChildItem -Path $StartFolder -Directory -Recurse -Erroraction SilentlyContinue
# aus jedem einzelnen Ordner in der Liste die Neueste Datei ermitteln
$NewestFilesList = $FolderList|
ForEach-Object {
#wie gehabt, nur ohne Recursion , die haben wir ja schon in der Ordnerliste
$currentPath = $_.FullName
$NewestFile = Get-ChildItem -Path $currentPath -File -Filter *.* -Erroraction SilentlyContinue|
Sort-Object -Property LastWriteTime -Descending |
Select-Object -First 1
#manche Ordner haben keine Dateien...
if ($NewestFile) {
Write-Host ('NewestFile in Folder: "{0}" is: "{1}" from {2:g}'-f $currentPath, $NewestFile.Name, $NewestFile.LastWriteTime)
$NewestFile #in Pipe schreiben
}
else {
Write-Host ('Folder: "{0}" have no File'-f $currentPath ) -fo red
}
}
pause
$NewestFilesList |fl * #optional mal alle Details der Dateien
pause