Gardez x nombre de fichiers et supprimer tous les autres - Powershell
Je suis en train d'écrire un script qui va chercher dans un ensemble de dossiers et de ne garder que les 10 dernières des fichiers. Les fichiers dans chaque dossier peut être créé quotidienne, hebdomadaire ou mensuelle. J'ai besoin d'un script pour garder les 10 derniers exemplaires indépendamment de la date de création ou date de modification.
L'aide d'un autre post, j'ai créé le script ci-dessous qui fonctionne mais il ne marche pas garder 10 exemplaires il garde tout fichier qui n'est pas plus de 10 jours.
$ftppath = "C:\Reports"
Get-ChildItem $ftppath -recurse *_Report_*.zip -force|where {$_.lastwritetime -lt (get-date).adddays(-10)} |Remove-Item -force
Aucune idée sur comment je peux modifier cela fonctionne? Si j'utilise le script ci-dessous, il fonctionne, mais seulement si je n'ai pas de set-Recurse. Si vous utilisez le-Recurse interrupteur, vous obtenez un message d'erreur que j'ai énuméré ci-dessous le 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
Erreur: Sélectionnez-Objet : Ne peut pas valider l'argument sur le paramètre 'Premier'.
-7 argument est moins que le minimum de la plage autorisée de 0. La fourniture d'un
l'argument qui est supérieur à 0, puis réessayez la commande.
OriginalL'auteur mpowmap | 2012-01-10
Vous devez vous connecter pour publier un commentaire.
Vous pouvez trier les résultats par
CreationTime
de descendre et d'ignorer les 10 premiers. Si il y a moins de 10 fichiers, il ne sera pas en supprimer.-Skip
. Belle et concise 🙂 +1A tester ce et a obtenu quelques résultats bizarres, pas sûr de ce qui s'y passe... Re-testé et ça fonctionne comme je l'avais espérer. Nice 1 liner.
oui, j'ai essayé votre code pour créer des fichiers, et la deuxième fois j'ai couru, Les creationTime n'ai pas mis à jour pour tous les fichiers. Je ne sais pas exactement pourquoi mais :-/
J'ai l'impression que c'est une meilleure solution que l'on a accepté. Appris à propos de
-Skip
. +1Utilisation LastWriteTime au lieu de CreationTime. J'ai fait les opérations suivantes: créer un zip de sauvegarde, puis de copier certains fichiers inutiles dans ce répertoire pour obtenir plus de 10 fichiers pour les tests. Lorsque j'ai exécuté le script, la zip de sauvegarde a été supprimé parce que le temps de création des fichiers indésirables était plus jeune. LastWriteTime est l'heure de la dernière modification du fichier (c'est à dire, un réel moment de la création), pas quand il a été copié.
OriginalL'auteur Rynant
Mis à jour
Supprimer la
-WhatIf
paramètreRemove-Item
lorsque vous êtes prêt à supprimer pour de vrai.Ah merci yep l'ancienne version de. Permet de tester plus 😉 j'ai mis à jour avec une testé la version de travail.
Merci pour l'aide. C'est maintenant en cours d'exécution comme prévu. Merci encore.
génial........
OriginalL'auteur Andy Arismendi
@Andy: Mon rep est trop faible pour le commentaire, donc de poster une réponse. Si vous obtenez des résultats étranges, il peut être parce que vous êtes à la recherche dans l'Explorateur Windows, qui est par défaut affiche la date de Dernière modification, au lieu de la Date de Création. Pour obtenir des résultats conformes à celles présentées dans l'Explorateur Windows, swap LastWriteTime pour CreationTime comme suit:
gci C:\temp\ -Recurse| where{ -pas $_.PsIsContainer}| tri LastWriteTime -desc
| sélectionnez -les Sauter 10| Remove-Item -Force
OriginalL'auteur user189271