Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Nettoyage automatique des répertoires utilisateurs

10 réponses
Avatar
Pierre-Yves
Bonjour à tous,

Je désire automatiser le nettoyage de tous les répertoires utilisateurs.
L'idée est d'exécuter un script vbs périodiquement via le gestionnaire de
tâche.
Le script doit supprimer tous les fichiers comportant les extention *.tmp,
et ~*.* qui se trouvent dans tous les répertoires et sous-répertoires de
chaque utilisateur.
Quelqu'un aurait-il un d'un tel script à proposer ?

Merci d'avance de votre aide

10 réponses

Avatar
Gilles LAURENT [MVP]
"Pierre-Yves" wrote:

Bonjour à tous,



Bonjour,

Je désire automatiser le nettoyage de tous les répertoires utilisateurs.
L'idée est d'exécuter un script vbs périodiquement via le gestionnaire de
tâche.
Le script doit supprimer tous les fichiers comportant les extention *.tmp,
et ~*.* qui se trouvent dans tous les répertoires et sous-répertoires de
chaque utilisateur.
Quelqu'un aurait-il un d'un tel script à proposer ?



Cette action peut facilement être réalisée en batch. Le script ci-dessous
permet de supprimer les fichiers spécifiés du répertoire (profil) de
l'utilisateur courant. Ce script pourrait être exécuté, par exemple, à chaque
ouverture / fermeture de session via un script de logon / GPO.

--- Coupez ici : CleanUp.cmd ---
@echo off
pushd %userprofile%
del /f /q /s *.tmp,~*.*
popd
--- Coupez ici : CleanUp.cmd ---

En espérant que cela réponde à votre besoin.

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
Pierre-Yves
Bonjour Gilles,

La solution est intéressante du point de vue simplicité. Je la garde bien au
chaud si besoin mais dans le cas qui m'intéresse, je ne souhaite pas le
faire via logon script, en effet les répertoires utilisateurs sont sur un
serveur et je souhaite limiter le trafic réseau entre les stations de
travail et ce serveur.

Auriez-vous une solution avec un script VBS qui tournerait sur le serveur ?

Merci beaucoup
Pierre-Yves


"Gilles LAURENT [MVP]" a écrit dans le message de news:

"Pierre-Yves" wrote:

Bonjour à tous,



Bonjour,

Je désire automatiser le nettoyage de tous les répertoires utilisateurs.
L'idée est d'exécuter un script vbs périodiquement via le gestionnaire de
tâche.
Le script doit supprimer tous les fichiers comportant les extention
*.tmp,
et ~*.* qui se trouvent dans tous les répertoires et sous-répertoires de
chaque utilisateur.
Quelqu'un aurait-il un d'un tel script à proposer ?



Cette action peut facilement être réalisée en batch. Le script ci-dessous
permet de supprimer les fichiers spécifiés du répertoire (profil) de
l'utilisateur courant. Ce script pourrait être exécuté, par exemple, à
chaque
ouverture / fermeture de session via un script de logon / GPO.

--- Coupez ici : CleanUp.cmd ---
@echo off
pushd %userprofile%
del /f /q /s *.tmp,~*.*
popd
--- Coupez ici : CleanUp.cmd ---

En espérant que cela réponde à votre besoin.

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr



Avatar
Gilles LAURENT [MVP]
"Pierre-Yves" wrote:

Bonjour Gilles,



Pierre-Yves,

La solution est intéressante du point de vue simplicité. Je la garde bien au
chaud si besoin mais dans le cas qui m'intéresse, je ne souhaite pas le
faire via logon script, en effet les répertoires utilisateurs sont sur un
serveur et je souhaite limiter le trafic réseau entre les stations de
travail et ce serveur.

Auriez-vous une solution avec un script VBS qui tournerait sur le serveur ?



Ci-dessous le script VBScript CleanUp.vbs permettant de supprimer les
fichiers vérifiant les critères spécifiés dans la variable de type tableau
arrPattern. Je suppose ici que les répertoires utilisateurs se situent tous
au même niveau dans la structrure de répertoires du serveur de fichiers. Le
script doit donc être déposé dans le dossier racine contenant tous les
dossiers utilisateurs.

Usage :
CleanUp.vbs /whatif:<True|False>

Note: l'argument /whatif permet de simuler la suppression des fichiers si
celui-ci est fixé à True, sinon les fichiers sont effectivement supprimés.
Pour la génération d'un fichier log, il suffira de rediriger le flux stdout
vers un fichier via l'opérateur de redirection ">"

Exemples :
cscript //nologo CleanUp.vbs /whatif:True
cscript //nologo CleanUp.vbs /whatif:False > d:logCleanUp.log

--- Coupez ici : CleanUp.vbs ---
arrPattern=Array("*.tmp", "~*.*")

Set m_oFs=CreateObject("Scripting.FileSystemObject")
Set m_oRe=New RegExp: m_oRe.IgnoreCase=True
For nIdx=0 To UBound(arrPattern)
m_oRe.Pattern=m_oRe.Pattern & "^" & arrPattern(nIdx) & "$"
m_oRe.Pattern=m_oRe.Pattern & "|"
Next
m_oRe.Pattern=Replace(m_oRe.Pattern, ".",".")
m_oRe.Pattern=Replace(m_oRe.Pattern, "*",".*")
m_oRe.Pattern=Left(m_oRe.Pattern, Len(m_oRe.Pattern) - 1)

sCurrentDirectory=m_oFs.GetParentFolderName(WScript.ScriptFullName)
Set oRootFolder=m_oFs.GetFolder(sCurrentDirectory)
CleanUp oRootFolder, CBool(WScript.Arguments.Named("whatif"))

Sub CleanUp(oFolder, bWhatIf)
On Error Resume Next
For Each oSubFolder In oFolder.SubFolders
For Each oFile In oSubFolder.Files
If Err.Number=0 Then
If m_oRe.Test(oFile.Name) Then
WScript.Echo _
oFile.Path & " deleted ..." & _
" (" & CStr(Not bWhatIf) & ")"
If Not bWhatIf Then oFile.Delete(True)
End If
End If
Next
CleanUp oSubFolder, bWhatIf
Next
On Error Goto 0
End Sub
--- Coupez ici : CleanUp.vbs ---

Tenez-nous au courant.

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
moi
Bonsoir,


Un exemple d'utilisation d'Expressions Régulières
est toujours bon à regarder ... donc j'ai ausculté ce script
et fait qq tests.


Je me suis rendu compte à mes dépend que certains caractères
valides pour un nom de fichier
sont invalides dans une "expression régulière" ...

donc, j'ai tenté une modif ...(voir plus loin)
Est-ce utile ?
Est-ce bon ?

Par ailleurs
CleanUp ne traite pas les fichiers
situés à la racine du répertoire traité...
c'est volontaire je présume ...

Merci ,

HB

Gilles LAURENT [MVP] wrote:
(...)
(...)
For nIdx=0 To UBound(arrPattern)



Là j'ajoute ça "d'abord" :

arrPattern(nIdx) = Replace(arrPattern(nIdx), "^" , "x5E")
arrPattern(nIdx) = Replace(arrPattern(nIdx), "$" , "x24")

m_oRe.Pattern=m_oRe.Pattern & "^" & arrPattern(nIdx) & "$"
m_oRe.Pattern=m_oRe.Pattern & "|"
Next




m_oRe.Pattern=Replace(m_oRe.Pattern, "." , ".")
m_oRe.Pattern=Replace(m_oRe.Pattern, "*" , ".*")



Ces deux lignes sont magistrales,
pour moi qui découvre lentement l'objet RegExp !

Là, j'ajoute ça aussi :

m_oRe.Pattern = Replace(m_oRe.Pattern, "(" , "x28")
m_oRe.Pattern = Replace(m_oRe.Pattern, ")" , "x29")
m_oRe.Pattern = Replace(m_oRe.Pattern, "[" , "x5B")
m_oRe.Pattern = Replace(m_oRe.Pattern, "]" , "x5D")
m_oRe.Pattern = Replace(m_oRe.Pattern, "[" , "x5B")
m_oRe.Pattern = Replace(m_oRe.Pattern, "]" , "x5D")

m_oRe.Pattern=Left(m_oRe.Pattern, Len(m_oRe.Pattern) - 1)
(...)


Avatar
Gilles LAURENT [MVP]
"moi" a écrit dans le message de
news:OAMHPiL$
| Bonsoir,

Bonjour,

| Un exemple d'utilisation d'Expressions Régulières
| est toujours bon à regarder ... donc j'ai ausculté ce script
| et fait qq tests.

Bon début ;-)

| Je me suis rendu compte à mes dépend que certains caractères
| valides pour un nom de fichier
| sont invalides dans une "expression régulière" ...

Tout à fait !

| donc, j'ai tenté une modif ...(voir plus loin)
| Est-ce utile ?

Oui uniquement si un pattern spécifié dans la variable de type tableau
arrPattern contient des caractères spéciaux rentrant en conflit avec la
syntaxe des expressions régulières.

| Est-ce bon ?

Oui !
Soit utiliser les codes ASCII ou alors le caractère d'échappement "" :
x5E = ^
x24 = $
...

| Par ailleurs
| CleanUp ne traite pas les fichiers
| situés à la racine du répertoire traité...
| c'est volontaire je présume ...

Tout à fait. Je suis parti du principe que les répertoires utilisateurs
se situent tous dans des sous-répertoires. Il y a donc une racine
commune qui ne doit pas être traitée. C'est ce design que j'ai mis en
oeuvre chez mes clients pour les répertoires personnels. J'espère qu'il
en est de même chez Pierre-Yves !

Merci.

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
moi
Bonjour,


Gilles LAURENT [MVP] wrote:
"moi" a écrit dans le message de
news:OAMHPiL$



(...)
Bon début ;-) (...)


(...)
Tout à fait !(...)


(...)

Oui(...)


(...)
Oui !(...)


(...)
Tout à fait. (...)



me voilà très fier de moi :o))))

A+

HB
Avatar
Gilles LAURENT [MVP]
"moi" a écrit dans le message de
news:ek%23JI5S$
| Bonjour,

Bonjour,

[...]
| me voilà très fier de moi :o))))

Je suis également fier de *moi*, euh ! de vous *moi* :-)
Bref, *moi*, vous m'avez compris :-)

Bravo !

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
Pierre-Yves
Bonjour à Gilles et à moi,

La solution proposée correspond bien à ce que je cherche et j'aimerai la
tester ces prochains jours.

les répertoires utilisateurs sont tous (à plat) sous la racine d'un disque
réseau comme l'exemple suivant

servernamesharenameuser1
servernamesharenameuser2
... etc

Y a-t-il une modification à apporter au script pour que cela fonctionne dans
ce cas ?

Merci encore beaucoup de votre aide
Pierre-Yves

Cela me semble
"Gilles LAURENT [MVP]" a écrit dans le message de news:
OFaTWlU$
"moi" a écrit dans le message de
news:ek%23JI5S$
| Bonjour,

Bonjour,

[...]
| me voilà très fier de moi :o))))

Je suis également fier de *moi*, euh ! de vous *moi* :-)
Bref, *moi*, vous m'avez compris :-)

Bravo !

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr




Avatar
Gilles LAURENT [MVP]
"Pierre-Yves" a écrit dans le
message de
news:
| Bonjour à Gilles et à moi,

Bonjour,

| La solution proposée correspond bien à ce que je cherche et j'aimerai
| la tester ces prochains jours.
|
| les répertoires utilisateurs sont tous (à plat) sous la racine d'un
| disque réseau comme l'exemple suivant
|
| servernamesharenameuser1
| servernamesharenameuser2
| ... etc
|
| Y a-t-il une modification à apporter au script pour que cela
| fonctionne dans ce cas ?

Aucune modification à apporter. Il vous suffit de déposer le script
VBScript CleanUp.vbs en local sur le serveur de fichiers dans le dossier
pointé par le partage servernamesharename puis à planifier son
exécution avec un compte utilisateur autorisé à parcourir les
répertoires. Je vous invite dans un premier temps à réaliser vos tests
de manière interactive en fixant le paramètre /whatif:True pour simuler
les opérations et s'assurer que tout fonctionne correctement.

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
Gilles LAURENT [MVP]
"Mascaret" wrote:

Tu peux petit scarabée. Tu as affaire au Maître ! :-) :-)



Une nouvelle fois merci pour cette appréciation !

Note: Le petit scarabée deviendra grand !

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr