Nettoyer des machines automatiquement
Le temps du nettoyage des machines est arrivé ! Mais que faire lorsqu’un nombre incalculable de machine est à nettoyer ?
Un script déployé par le serveur est largement envisageable… Pour ma part j’ai choisi de déployer mon script de nettoyage.
Je voulais aussi que les sorties de certaines opérations soit enregistrées sur un log. Regardons ensemble comment nettoyer des machines de fàçon automatique.
Tout d’abord il faut créer un dossier partagé sur le serveur (Nettoyage dans l’exemple) qui servira, de dossier de base pour les scripts et, de cible pour les logs.
Maintenant il faut se poser la question de ce qu’il y à a nettoyer (nous y reviendrons pendant le script). Un logiciel fourni par Microsoft du nom de « Delprof » qui permet d’effacer à distance les profils utilisateurs locaux sera utilisé. Il ne s’utilise que dans les cas où les architectures utilisant les profils itinérants, on soulagera ainsi le dossier « documents and settings ».
Examinons les scripts ensemble. Le premier script est celui qui va être déployé et permettra la copie et l’exécution des scripts et utilitaires nécessaire au nettoyage.
Script.bat
| @Echo off net use y: \\IPSERVEUR\Nettoyage y: md c:\netoyage copy netoyage.bat c:\netoyage\ copy delprof*.* c:\netoyage\ c: cd\netoyage start /wait netoyage.bat cd\netoyage del /s /q /f *.* cd\ rd netoyage net use /delete y: shutdown -m \\127.0.0.1 -s -t 30 |
Désactive l’affichage du script à l’écran |
Puis voici le script de néttoyage en lui même. nettoyage.bat
| @Echo off c: cd\ del /s /q /f *.old del /s /q /f *.bak del /s /q /f *.tmp del /s /q /f *._ld del /s /q /f *.pif del /s /q /f *.chk del /s /q /f *.bad del /s /q /f *.gid if exist %systemroot%\temp del /s /q /f %systemroot%\temp\*.* >> y:\logs\%computername%.txt if exist %systemroot%\prefetch del /s /q /f /a %systemroot%\prefetch\*.* >> y:\logs\%computername%.txt if exist %systemroot%\system32\dllcache\tourstrt.exe (attrib -h -r -s %systemroot%\system32\dllcache\tourstrt.exe) & (del /s /q /f /a %systemroot%\system32\dllcache\tourstrt.exe) >> y:\logs\%computername%.txt if exist %systemroot%\system32\dllcache\tourw.exe (attrib -h -r -s %systemroot%\system32\dllcache\tourw.exe) & (del /s /q /f /a %systemroot%\system32\dllcache\tourw.exe) >> y:\logs\%computername%.txt if exist %systemroot%\system32\tourstart.exe del /s /q %systemroot%\system32\tourstart.exe >> y:\logs\%computername%.txt if exist %systemroot%\minidump del /s /q /a %systemroot%\minidump\*.* >> y:\logs\%computername%.txt if exist %systemroot%\system32\spool\printers del /s /q %systemroot%\system32\spool\printers\*.* >> y:\logs\%computername%.txt if exist %systemroot%\downlo~1 del /s /q /f /a %systemroot%\downlo~1\*.* >> y:\logs\%computername%.txt if exist %systemroot%\pchealth\helpctr\datacoll del /s /q /f /a %systemroot%\pchealth\helpctr\datacoll\*.* >> y:\logs\%computername%.txt if exist %systemroot%\system32\wbem\logs del /s /q /f /a %systemroot%\system32\wbem\logs\*.* >> y:\logs\%computername%.txt if exist « %systemroot%\debug » del /s /q /f /a « %systemroot%\debug »\*.log >> y:\logs\%computername%.txt if exist %systemroot%\security\logs del /s /q /f /a %systemroot%\security\logs\*.log >> y:\logs\%computername%.txt if exist %systemroot%\system32\logfiles del /s /q /f /a %systemroot%\system32\logfiles\*.* >> y:\logs\%computername%.txt cd\netoyage delprof /q /i /c:\\127.0.0.1 >> y:\logs\%computername%.txt chkdsk >> y:\logs\%computername%.txt defrag c: -v >> y:\logs\%computername%.txt exit |
Mais reprenons un petite peu le détail de ce script
del /s /q /f *.old
del /s /q /f *.bak
Celà supprime toutes les extensions jugées ancienne…
/s supprime dans tout les sous répertoire
/q pas de confirmation avant suppression avec caractères génériques de type * ? etc…
/f supprime les fichiers en lecture seule.
if exist %systemroot%\temp del /s /q /f %systemroot%\temp\*.*
if exist %systemroot%\prefetch del /s /q /f /a %systemroot%\prefetch\*.*
Supprime certains dossier. Cette commande s’execute seulement si le dossier est présent sur le disque.
>> y:\logs\%computername%.txt
Cette partie que l’on retrouve souvent à la suite d’une commande permet d’écrire la sortie dans un fichier sur le serveur portant le nom de la machine (%computername%) en train d’être nettoyage. Celà nous permettra de verifier postérieurement le bon déroulement des nettoyages des machines…
1 – delprof /q /i /c:\\127.0.0.1 >> y:\logs\%computername%.txt
2 – chkdsk >> y:\logs\%computername%.txt
3 – defrag c: -v >> y:\logs\%computername%.txt
1 – /!\ Cet utilitaire va supprimer tout les profils d’utilisateurs locaux /!\ /q ne demande aucun confirmation /i ignore les erreurs et continue la suppression /c précise l’ordinateur cible \\127.0.0.1 correspond au localhost donc à la machine elle même.
2 – chkdsk vérifie le disque et affiche un rapport d’état. Si des erreurs sont retrouvées dans les logs il faudra ré-intervenir sur la machine
3 – Defragmente le disque
/v créé une sortie détaillée.
Voilà nous avons à présent notre script prêt à être déployé. Je l’ai conçu et utilisé pour des machines Xp pro et 2000 Pro et est non testé sur les autres système d’exploitation microsoft. Je ne serai nullement responsable d’une mauvaise utilisation de ce script ou de pertes de données éventuelle.








12 août 2010 - 13 h 05 min
Merci pour ce script et pour le temps que vous consacrez à l’édition de tous ces tutoriaux.
ma question concerne le déploiement de ce script, en ce qui me concerne j’ai crée une GPO (nettoyage) et je l’ai liée sur l’OU regroupant tout les users de mon domaine et j’ai mis le script dans les paramètres: computer configuration>>windows settings>>scripts (startup/shutdown) dans le dossier sysvol.
le problème cv’est que le script ne s’exécute pas correctement, je veux dir par la quand un user se logue quand le script veut allez supprimer les fichiers .old ou .bak le message access denied est lisible dans la fenêtre dos
le message path not find est affiché dans la fenêtre dos quand le script essaye d’effacer le contenu du dossier prefetch ou le dossier temp.
pourriez vous donnez plus de détail sur le déploiement de ce script et la manière de le faire est-ce par GPO ou une tâche planifié
merci
15 janvier 2011 - 12 h 27 min
Sympa le script !
Je viens de découvrir votre site, bien agréable et rempli de petites astuces bien sympa. Merci pour tout et bonne continuation !