Sto provando a scrivere uno script che guarderà attraverso una serie di cartelle e manterrà solo gli ultimi 10 file. I file in ogni cartella possono essere creati giornalmente, settimanalmente o mensilmente. Ho bisogno che lo script tenga le 10 copie più recenti indipendentemente dalla data di creazione o dalla data di modifica.Mantenere x il numero di file e cancellare tutti gli altri - Powershell
Utilizzando un altro post ho creato lo script seguente che funziona ma non mantiene 10 copie mantiene qualsiasi file che non è più vecchio di 10 giorni.
$ftppath = "C:\Reports"
Get-ChildItem $ftppath -recurse *_Report_*.zip -force|where {$_.lastwritetime -lt (get-date).adddays(-10)} |Remove-Item -force
Qualche idea su come posso modificare questo per funzionare? Se uso lo script qui sotto funziona ma solo se non ho impostato -Recurse. Se si utilizza l'opzione -Recurse, si ottiene un errore che ho elencato sotto lo script.
# Keeps latest 10 files from a directory based on Creation Time
#Declaration variables
$path = "C:\Reports" # For example $path= C:\log\*.tmp
$total= (ls $path).count - 10 # Change number 5 to whatever number of objects you want to keep
# Script
ls $path |sort-object -Property {$_.CreationTime} | Select-Object -first $total | Remove-Item -force
Error: Select-Object : Cannot validate argument on parameter 'First'. The -7 argument is less than the minimum allowed range of 0. Supply an argument that is greater than 0 and then try the command again.
Ah '-Skip'. Bello e conciso :-) +1 –
Stavo testando questo e ottenuto alcuni risultati strani, non sono sicuro di cosa stava succedendo lì ... Riscontrato e funziona come mi aspetterei. Nizza 1 fodera. –
@Andy - sì, ho provato il tuo codice per creare file, e la seconda volta che l'ho eseguito, The creationTime non è stato aggiornato per tutti i file. Non so esattamente perché però: -/ – Rynant