Suppression de fichiers en Powershell

De BlaxWiki
Aller à la navigationAller à la recherche

Procédure[modifier]

Notice utilisation du script SuppressionAnciensFichiers.ps1

1/ Exécuter le script

2/ Il va prompter une demande pour renseigner le chemin du dossier parent dans lequel il doit faire sa recherche
Par exemple, renseigner : 'C:\Dossier\DossierParent'

3/ Il va prompter une demande pour la date. Le script supprimera les fichiers antérieurs à cette date. Elle doit être fournie au format jj-mm-AAAA.

4/ Le script promptera une demande pour savoir s'il y a des dossiers à ignorer pour la recherche dans le dossier parent. Valider sans rien entrer s'il n'y a pas de dossiers à ignorer.

5/ Si le dossier parent ou la date ne sont pas renseignés, un message d'erreur s'affichera et le script s'arrêtera là.

6/ Si la date n'est pas au bon format, un message d'erreur s'affichera et le script s'arrêtera là.

7/ Si tout est bon, le script ira supprimer tous les fichiers antérieurs à la date fournie.

/!\ INFO IMPORTANTE : Le script supprime les fichiers antérieurs à la date fournie sans les lister avant. Il faut donc être sûr avant de lancer le script qu'il n'y a pas de fichier que l'on souhaite garder qui serait antérieurs à cette date et présent dans les dossiers sondés.
/!\ Attention : La variable d'ignore ne permet pas d'ignorer des fichiers, juste des dossiers.

Script[modifier]

#Script de suppression de fichiers plus anciens que $Date

#On demande à l'utilisateur de renseinger les variables nécessaires pour l'exécution du script
$Dossier = Read-Host -Prompt 'Chemin du dossier Parent'
$Date = Read-Host -Prompt 'Date avant laquelle on peut supprimer les fichiers (au format jj-mm-AAAA)'
$Ignore = Read-Host -Prompt 'Nom des dossiers à ignorer (Ne rien mettre si aucun dossier à ignorer)'
#echo $Dossier
#Get-Date $Date
#echo $Ignore

#On vérifie que le Dossier Parent et la Date on bien été renseignés
If (!$Dossier -Or !$Date){
    echo "Le Chemin du dossier Parent ou la Date n'ont pas été renseignés"
}
else{
    #On vérifie que la Date est au bon format
    if ($date -as [DateTime]){
        #On cherche récursivement dans le dossier Parent le dossier voulu, et dedans les fichiers plus anciens que $Date, puis on les supprime
        Get-ChildItem -Recurse -Path $Dossier -Exclude $Ignore -name "1 - Réception données Clients"  | Get-ChildItem -Recurse -File   | Where-Object {$_.LastWriteTime -Lt (Get-Date $Date)} | Remove-Item -Force
        Get-ChildItem -Recurse -Path $Dossier -Exclude $Ignore -name "4 - Envois mensuels" | Get-ChildItem -Recurse -File   | Where-Object {$_.LastWriteTime -Lt (Get-Date $Date)} | Remove-Item -Force
        Get-ChildItem -Recurse -Path $Dossier -Exclude $Ignore -name "2- Fiches navettes" | Get-ChildItem -Recurse -File   | Where-Object {$_.LastWriteTime -Lt (Get-Date $Date)} | Remove-Item -Force
        Get-ChildItem -Recurse -Path $Dossier -Exclude $Ignore -name "3- Prépas" | Get-ChildItem -Recurse -File   | Where-Object {$_.LastWriteTime -Lt (Get-Date $Date)} | Remove-Item -Force
        Get-ChildItem -Recurse -Path $Dossier -Exclude $Ignore -name "4- Masques" | Get-ChildItem -Recurse -File   | Where-Object {$_.LastWriteTime -Lt (Get-Date $Date)} | Remove-Item -Force
        Get-ChildItem -Recurse -Path $Dossier -Exclude $Ignore -name "2- Journaux salaires - Tableaux charges" | Get-ChildItem -Recurse -File   | Where-Object {$_.LastWriteTime -Lt (Get-Date $Date)} | Remove-Item -Force
        Get-ChildItem -Recurse -Path $Dossier -Exclude $Ignore -name "3- OD - Provisions CP" | Get-ChildItem -Recurse -File   | Where-Object {$_.LastWriteTime -Lt (Get-Date $Date)} | Remove-Item -Force
        Get-ChildItem -Recurse -Path $Dossier -Exclude $Ignore -name "4- Virements" | Get-ChildItem -Recurse -File   | Where-Object {$_.LastWriteTime -Lt (Get-Date $Date)} | Remove-Item -Force
        
        echo "Tous les fichiers antérieurs au $Date ont été supprimés"
    }
    else{
        echo "La date fournie n'est pas au bon format. Pour rappel, elle doit être au format jj-mm-AAAA"
    }
}