Script VBS qui ne s'execute pas sur un a cause de permissions refusées !!!

Le
toon
Bonjour.

J'essai d'executer un programme vbs afin que celui-ci me supprime les
fichiers datant de plus de 30 jours. En effet, sur mon reseau, j'ai mis en
place un espace temporaire d'echange de fichier, mais etant donne que
personne ne fait le menage apres, et bien je suis oblige de le faire moi
meme, d'ou le script ci-dessous de nettoyage automatique.
Ca marche, mais lorsque je le planifie dans une tache planifie avec un
compte administrateur en plus, ca ne marche pas car il me dit que je n'ai
pas les droits.

Ou je dois chercher ???


Script
'
' clean_space.vbs - v1.0
'
' Programme de nettoyage automatique d'un repertoire.
' Initialement prévu pour la zone d'échange temporaire de la ressource de
cluster COMMUN1.
'
' ***
' Ce programme supprime tous les répertoires vides et tous les fichiers avec
plus de 30 jours par rapport à leur dernière modofication.
' La variable "DELAI" définie le nombre la période de validité des fichiers.
' La variable "pfad" définie le chemin du réperoire traité.
' ***

Option Explicit

' Répertoire de traitement
Const pfad = "d:test_clean_spaceapres"
Const DELAI = 30

' Variables
Dim Text, Title, index, Txt()
Dim fso, wsh, i

index = 1

Set wsh = WScript.CreateObject ("WScript.Shell") ' Creation d'un nouveau
script VBS

Set fso = WScript.CreateObject("Scripting.FileSystemObject") ' Creation
d'un nouveau FileSystemObject-Object utilise pour l'acces aux fichiers

RecFolder index, wsh.ExpandEnvironmentStrings(pfad) ' Acquisition de la
collection de repertoires

Function RecFolder (idx, pfad) ' Fonction principale du programme

Dim fo, fc, i, colFiles, file ' Definition des variables locales

Set fo = fso.GetFolder(pfad) ' Definition des objets system
Set fc = fo.SubFolders
Set colFiles = fo.Files

For Each file in colFiles ' Test chaque fichier du repertoire cible
If DateDiff("d", file.DateLastModified, Now)>DELAI Then ' afin de
savoir si celui-ci a sa date de validite
file.delete(True) ' expiree
End if
Next

For Each i in fc ' Boucle de recherche de sous-repertoires
Call RecFolder (idx+1, pfad + "" + i.name) ' Re-indexation de l'objet
system "fo"

If i.Files.Count = 0 And i.SubFolders.Count = 0 Then ' Test si le
repertoire est vide afin de le supprimer
fso.DeleteFolder(pfad + "" + i.name)
End if
Next

Set fo = Nothing ' release objects
Set fc = Nothing
Set colFiles = Nothing

End Function
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
toon
Le #470615
Sur le message d'erreur j'ai une erreur sur la ligne 51 caractere 4.
Ca doit correspondre a "fso.DeleteFolder(pfad + "" + i.name)"

Je ne sais vraiment pas trop ou chercher, si quelqu'un a une idee je suis
preneur !!!

Bonjour.

J'essai d'executer un programme vbs afin que celui-ci me supprime les
fichiers datant de plus de 30 jours. En effet, sur mon reseau, j'ai mis en
place un espace temporaire d'echange de fichier, mais etant donne que
personne ne fait le menage apres, et bien je suis oblige de le faire moi
meme, d'ou le script ci-dessous de nettoyage automatique.
Ca marche, mais lorsque je le planifie dans une tache planifie avec un
compte administrateur en plus, ca ne marche pas car il me dit que je n'ai
pas les droits.

Ou je dois chercher ???


Script ...
'
' clean_space.vbs - v1.0
'
' Programme de nettoyage automatique d'un repertoire.
' Initialement prévu pour la zone d'échange temporaire de la ressource de
cluster COMMUN1.
'
' ***
' Ce programme supprime tous les répertoires vides et tous les fichiers
avec

plus de 30 jours par rapport à leur dernière modofication.
' La variable "DELAI" définie le nombre la période de validité des
fichiers.

' La variable "pfad" définie le chemin du réperoire traité.
' ***

Option Explicit

' Répertoire de traitement
Const pfad = "d:test_clean_spaceapres"
Const DELAI = 30

' Variables
Dim Text, Title, index, Txt()
Dim fso, wsh, i

index = 1

Set wsh = WScript.CreateObject ("WScript.Shell") ' Creation d'un
nouveau

script VBS

Set fso = WScript.CreateObject("Scripting.FileSystemObject") ' Creation
d'un nouveau FileSystemObject-Object utilise pour l'acces aux fichiers

RecFolder index, wsh.ExpandEnvironmentStrings(pfad) ' Acquisition de
la

collection de repertoires

Function RecFolder (idx, pfad) ' Fonction principale du programme

Dim fo, fc, i, colFiles, file ' Definition des variables locales

Set fo = fso.GetFolder(pfad) ' Definition des objets system
Set fc = fo.SubFolders
Set colFiles = fo.Files

For Each file in colFiles ' Test chaque fichier du repertoire cible
If DateDiff("d", file.DateLastModified, Now)>DELAI Then ' afin de
savoir si celui-ci a sa date de validite
file.delete(True) ' expiree
End if
Next

For Each i in fc ' Boucle de recherche de sous-repertoires
Call RecFolder (idx+1, pfad + "" + i.name) ' Re-indexation de
l'objet

system "fo"

If i.Files.Count = 0 And i.SubFolders.Count = 0 Then ' Test si le
repertoire est vide afin de le supprimer
fso.DeleteFolder(pfad + "" + i.name)
End if
Next

Set fo = Nothing ' release objects
Set fc = Nothing
Set colFiles = Nothing

End Function




toon
Le #470614
Je me suis trompe de ligne desole. Message d'erreur exact:

Script : C:batchclean_space.vbs
Ligne : 53
Caract. : 4
Erreur : Permission refusée
Code : 800A0046
Source : Erreur d'execution Microsoft VBScript

Sur le message d'erreur j'ai une erreur sur la ligne 51 caractere 4.
Ca doit correspondre a "fso.DeleteFolder(pfad + "" + i.name)"

Je ne sais vraiment pas trop ou chercher, si quelqu'un a une idee je suis
preneur !!!

Bonjour.

J'essai d'executer un programme vbs afin que celui-ci me supprime les
fichiers datant de plus de 30 jours. En effet, sur mon reseau, j'ai mis
en


place un espace temporaire d'echange de fichier, mais etant donne que
personne ne fait le menage apres, et bien je suis oblige de le faire moi
meme, d'ou le script ci-dessous de nettoyage automatique.
Ca marche, mais lorsque je le planifie dans une tache planifie avec un
compte administrateur en plus, ca ne marche pas car il me dit que je
n'ai


pas les droits.

Ou je dois chercher ???


Script ...
'
' clean_space.vbs - v1.0
'
' Programme de nettoyage automatique d'un repertoire.
' Initialement prévu pour la zone d'échange temporaire de la ressource
de


cluster COMMUN1.
'
' ***
' Ce programme supprime tous les répertoires vides et tous les fichiers
avec

plus de 30 jours par rapport à leur dernière modofication.
' La variable "DELAI" définie le nombre la période de validité des
fichiers.

' La variable "pfad" définie le chemin du réperoire traité.
' ***

Option Explicit

' Répertoire de traitement
Const pfad = "d:test_clean_spaceapres"
Const DELAI = 30

' Variables
Dim Text, Title, index, Txt()
Dim fso, wsh, i

index = 1

Set wsh = WScript.CreateObject ("WScript.Shell") ' Creation d'un
nouveau

script VBS

Set fso = WScript.CreateObject("Scripting.FileSystemObject") '
Creation


d'un nouveau FileSystemObject-Object utilise pour l'acces aux fichiers

RecFolder index, wsh.ExpandEnvironmentStrings(pfad) ' Acquisition
de


la
collection de repertoires

Function RecFolder (idx, pfad) ' Fonction principale du programme

Dim fo, fc, i, colFiles, file ' Definition des variables locales

Set fo = fso.GetFolder(pfad) ' Definition des objets system
Set fc = fo.SubFolders
Set colFiles = fo.Files

For Each file in colFiles ' Test chaque fichier du repertoire
cible


If DateDiff("d", file.DateLastModified, Now)>DELAI Then ' afin de
savoir si celui-ci a sa date de validite
file.delete(True) ' expiree
End if
Next

For Each i in fc ' Boucle de recherche de
sous-repertoires


Call RecFolder (idx+1, pfad + "" + i.name) ' Re-indexation de
l'objet

system "fo"

If i.Files.Count = 0 And i.SubFolders.Count = 0 Then ' Test si le
repertoire est vide afin de le supprimer
fso.DeleteFolder(pfad + "" + i.name)
End if
Next

Set fo = Nothing ' release objects
Set fc = Nothing
Set colFiles = Nothing

End Function








Julien Malghem [MVP]
Le #470420
Bonjour,

As-tu vérifié que ton compte administrateur avait le droits (NTFS) de
supprimer le fichier sur lequel il plante ?

A+
Julien

"toon"
Je me suis trompe de ligne desole. Message d'erreur exact:

Script : C:batchclean_space.vbs
Ligne : 53
Caract. : 4
Erreur : Permission refusée
Code : 800A0046
Source : Erreur d'execution Microsoft VBScript


toon
Le #470419
Oui !!!

J'ai meme mis l'administrateur sur le repertoire parent avec "control total"
avec "appliquer a tout les sous repertoires".

"Julien Malghem [MVP]" news: uzlv2#
Bonjour,

As-tu vérifié que ton compte administrateur avait le droits (NTFS) de
supprimer le fichier sur lequel il plante ?

A+
Julien

"toon"
Je me suis trompe de ligne desole. Message d'erreur exact:

Script : C:batchclean_space.vbs
Ligne : 53
Caract. : 4
Erreur : Permission refusée
Code : 800A0046
Source : Erreur d'execution Microsoft VBScript






Julien Malghem [MVP]
Le #470418
Le fichier ne serait-il pas ouvert ?

On va chercher partout ;-)

"toon" %
Oui !!!

J'ai meme mis l'administrateur sur le repertoire parent avec "control
total"
avec "appliquer a tout les sous repertoires".

"Julien Malghem [MVP]" de
news: uzlv2#
Bonjour,

As-tu vérifié que ton compte administrateur avait le droits (NTFS) de
supprimer le fichier sur lequel il plante ?

A+
Julien

"toon"
Je me suis trompe de ligne desole. Message d'erreur exact:

Script : C:batchclean_space.vbs
Ligne : 53
Caract. : 4
Erreur : Permission refusée
Code : 800A0046
Source : Erreur d'execution Microsoft VBScript










toon
Le #470417
Non, j'ai rien d'ouvert !!!
J'ai deja regarde dans ce sens ;- )

Merci d'avance pour vos recherches ;- )

"Julien Malghem [MVP]" news:
Le fichier ne serait-il pas ouvert ?

On va chercher partout ;-)

"toon" %
Oui !!!

J'ai meme mis l'administrateur sur le repertoire parent avec "control
total"
avec "appliquer a tout les sous repertoires".

"Julien Malghem [MVP]" de
news: uzlv2#
Bonjour,

As-tu vérifié que ton compte administrateur avait le droits (NTFS) de
supprimer le fichier sur lequel il plante ?

A+
Julien

"toon"
Je me suis trompe de ligne desole. Message d'erreur exact:

Script : C:batchclean_space.vbs
Ligne : 53
Caract. : 4
Erreur : Permission refusée
Code : 800A0046
Source : Erreur d'execution Microsoft VBScript














~Jean-Marc~ [MVP]
Le #470416
Salutations *toon* !
Dans tu nous disais :
Sur le message d'erreur j'ai une erreur sur la ligne 51 caractere 4.
Ca doit correspondre a "fso.DeleteFolder(pfad + "" + i.name)"


Pour concaténer, je préfère utiliser "&".

Je suppose que tu as essayé un :
fso.DeleteFolder(pfad & "" & i.name, true)

Tu devrais essayer de voir en ajoutant du code de deboguage
(a l'arrache dans le mail, sans test :-P )

On error resume next
fso.DeleteFolder(pfad & "" & i.name, true)
if err then MsgBox "Erreur " & err.number & " ==> " & pfad & "" & i.name & _
VbCrLf & err.description
err.clear
[bla bla bla]
on error goto 0

@+

--
~Jean-Marc~ MSAE & MVP Windows XP Fr
M'écrire : http://msmvps.com/docxp/contact.aspx
- http://docxp.mvps.org - http://msmvps.com/docxp/ -
Aide en DIRECT sur Internet : http://communautes-ms.akro-net.org/

toon
Le #469800
Salutations *toon* !
Dans tu nous disais :
Sur le message d'erreur j'ai une erreur sur la ligne 51 caractere 4.
Ca doit correspondre a "fso.DeleteFolder(pfad + "" + i.name)"



Exact !!!

Pour concaténer, je préfère utiliser "&".


Oui, ben je crois que je vais l'utiliser aussi desormais !!!

Je suppose que tu as essayé un :
fso.DeleteFolder(pfad & "" & i.name, true)


",true" ne fonctionne pas. J'ai un message d'erreur qui me parle de
parenthese et de fonction "sub".

Tu devrais essayer de voir en ajoutant du code de deboguage
(a l'arrache dans le mail, sans test :-P )


Oui, je vais ca.
Mais c'est marrant quand meme, parce que mon script plante toujours sur le
meme repertoire.
J'ai mis un wscript.echo juste avant la commande delete, et j'observe bin
qu'il commence a supprimer des repertoires + fichiers jusqu'a un certain
endroit, puis il s'arrete. J'ai verifier les proprietes NTFS, normal. Le nom
du repertoire comporte plusieur espaces, je ne sais pas si ca peut jouer.

Si j'utilise mon programme sans faire la recherche de repertoire vide a
supprimer, le programme s'execute tres bien (sauf que j'ai une arborescence
vide qui reste presente).

On error resume next
fso.DeleteFolder(pfad & "" & i.name, true)
if err then MsgBox "Erreur " & err.number & " ==> " & pfad & "" & i.name
& _

VbCrLf & err.description
err.clear
[bla bla bla]
on error goto 0

@+

--
~Jean-Marc~ MSAE & MVP Windows XP Fr
M'écrire : http://msmvps.com/docxp/contact.aspx
- http://docxp.mvps.org - http://msmvps.com/docxp/ -
Aide en DIRECT sur Internet : http://communautes-ms.akro-net.org/




~Jean-Marc~ [MVP]
Le #469797
Salutations *toon* !
Dans tu nous disais :
Je suppose que tu as essayé un :
fso.DeleteFolder(pfad & "" & i.name, true)


",true" ne fonctionne pas. J'ai un message d'erreur qui me parle de
parenthese et de fonction "sub".


Ah oui, exact. Fais plutôt :
fso.DeleteFolder pfad & "" & i.name, true

Le nom du repertoire comporte plusieur espaces, je ne sais
pas si ca peut jouer.


ça devrait pas...

Pas d'autre idée pour le moment...

@+

--
~Jean-Marc~ MSAE & MVP Windows XP Fr
M'écrire : http://msmvps.com/docxp/contact.aspx
- http://docxp.mvps.org - http://msmvps.com/docxp/ -
Aide en DIRECT sur Internet : http://communautes-ms.akro-net.org/


toon
Le #482119
Exact ca marche mieux !!!
Faut que je fasse des tests plus approfondis avec beaucoup plus de data dans
le repertoire nettoye, mais j'ai pas super le temps aujourd'hui.
Je regarde de mon cote, et je tiens au courant !!!

"~Jean-Marc~ [MVP]" news: eLg8j#
Salutations *toon* !
Dans tu nous disais :
Je suppose que tu as essayé un :
fso.DeleteFolder(pfad & "" & i.name, true)


",true" ne fonctionne pas. J'ai un message d'erreur qui me parle de
parenthese et de fonction "sub".


Ah oui, exact. Fais plutôt :
fso.DeleteFolder pfad & "" & i.name, true

Le nom du repertoire comporte plusieur espaces, je ne sais
pas si ca peut jouer.


ça devrait pas...

Pas d'autre idée pour le moment...

@+

--
~Jean-Marc~ MSAE & MVP Windows XP Fr
M'écrire : http://msmvps.com/docxp/contact.aspx
- http://docxp.mvps.org - http://msmvps.com/docxp/ -
Aide en DIRECT sur Internet : http://communautes-ms.akro-net.org/





Poster une réponse
Anonyme