[Catégorie modifiée .Net --> VBS] problème d'execution par GPO /STARTUP

Signaler
Messages postés
18
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
13 septembre 2010
-
Messages postés
18
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
13 septembre 2010
-
bonjour,
il est impossible d'executer ce script par GPO. J'ai l'erreur suivante:
ligne:6
caract:1
ereur: chemin d'accès introuvable
code:800A004C
source:erreur d'execution Microsoft VBScript.

merci de m'apporter votre aide.


Dim fso, ws, AppData, Dossier,rep
Set ws = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
AppData = ws.ExpandEnvironmentStrings("%AppData%")
Dossier = AppData & "\Microsoft\Outlook"
Set rep = fso.GetFolder(Dossier)
effaceNK2(rep) 
function effaceNK2(rep) 
For Each AFile In rep.Files  
If UCase(FSO.GetExtensionName(AFile.Path)) = "NK2" then 
if (AFile.datecreated >= "#25/08/2010#") Then
Msgbox " Le fichier va être supprimer !",64,"Fichier à Supprimer"
AFile.Delete
ELSE 
Msgbox " RIEN à SUPPRIMER "
end if
else
WScript.Quit
end if
next 
end function 

10 réponses

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Voilà le code que je t'avais posté, mais en mieux. Il fait la même chose que le tien mais ne se plante pas, donc pas besoin de le modifier.
Option Explicit

Function findFile(FSO, Folder, Ext)
'Returns Nothing if the file with the `Ext` extension wasn't found in the `Folder` directory.
'Ext must be lower-case
'Usage: FindFile(objFSO,"C:\WINDOWS","exe")

Dim FSO_Folder, FSO_File
Do
On Error Resume Next
Set FSO_Folder = FSO.GetFolder(Folder)
If Err.Number = 0 Then Exit Do
On Error Goto 0
Set findFile = Nothing : Exit Function
Loop While 0
On Error Goto 0
For Each FSO_File In FSO_Folder.Files
MsgBox FSO_File.Path
If LCase(FSO.GetExtensionName(FSO_File.Path)) = Ext Then
Set FindFile = FSO_File : Exit Function
End If
Next
Set FSO_Folder = Nothing
Set findFile = Nothing
End Function


Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")
Dim WSH : Set WSH = CreateObject("WScript.Shell")
Dim NK2 : Set NK2 = FindFile(FSO, WSH.ExpandEnvironmentStrings("%APPDATA%") & "\Microsoft\Outlook", "nk2")

If NK2 Is Nothing Then
MsgBox "Le fichier NK2 ou répertoire contenant ce dernier est introuvable.", vbExclamation, "Erreur"
Else
If NK2.DateCreated < "#20/07/2010#" Then
MsgBox "Le fichier """ & NK2.Path & """ va être supprimé !", vbInformation, "Suppression du NK2"
NK2.Delete
Else
MsgBox "Rien à supprimer.", vbInformation, "Info"
End If
Set NK2 = Nothing
End If


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
18
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
13 septembre 2010

c'est bon mais moi je comprends pas très bien ton script. tu peux essayer de m'expliquer? merci
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Code hyper-commenté : ça devrait être compréhensible
Option Explicit 'évite de passer une demi-heure sur une connerie de variable non déclarée.

Function findFile(FSO, Folder, Ext)
'Returns Nothing if the file with the `Ext` extension wasn't found in the `Folder` directory.
'Ext must be lower-case
'Usage: FindFile(objFSO,"C:\WINDOWS","exe")

Dim FSO_Folder, FSO_File
Do 'pas de On Error Goto en VBS, donc obligé de tricher un peu
On Error Resume Next 'passe à la ligne suivante si erreur
Set FSO_Folder = FSO.GetFolder(Folder)
If Err.Number = 0 Then Exit Do 'si pas d'erreur, on quitte la boucle bidon
On Error Goto 0 'mode normal pour les erreurs
Set findFile = Nothing : Exit Function 'vu qu'il y a eu une erreur, on retourne Nothing
Loop While 0 'la boucle s'exécutera une fois vu que la condition est fausse (0<>1)
On Error Goto 0 'mode normal pour les erreurs (on est sorti de la boucle)
For Each FSO_File In FSO_Folder.Files 'pour chaque fichier
If LCase(FSO.GetExtensionName(FSO_File.Path)) = Ext Then 'si c'est la même extension
Set FindFile = FSO_File : Exit Function 'on retourne l'objet fichier
End If
Next
Set FSO_Folder = Nothing 'on détruit l'objet fichier
Set findFile = Nothing 'on retourne Nothing (rien trouvé)
End Function


Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject") 'on crée une instance de FSO
Dim WSH : Set WSH = CreateObject("WScript.Shell") 'on crée une instance de WSH
Dim NK2 : Set NK2 = FindFile(FSO, WSH.ExpandEnvironmentStrings("%APPDATA%") & "\Microsoft\Outlook", "nk2") 'on récupère un objet fichier correspondant au NK2


If NK2 Is Nothing Then '//si l'objet est nul
MsgBox "Le fichier NK2 ou répertoire contenant ce dernier est introuvable.", vbExclamation, "Erreur"
Else '//sinon
If NK2.DateCreated < "#20/07/2010#" Then '//si le fichier porte la date qu'on veut
MsgBox "Le fichier """ & NK2.Path & """ va être supprimé !", vbInformation, "Suppression du NK2"
NK2.Delete 'on supprime le fichier
Else '//sinon
MsgBox "Rien à supprimer.", vbInformation, "Info"
End If '//fin si
Set NK2 = Nothing 'on détruit l'objet fichier
End If '//fin si


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
18
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
13 septembre 2010

bonjour,
je suis vraiment un novice en VBS, excuse pour les questions que je pose qui te paraissent evidentes.
je ne comprends pas l'usage et l'utilité de On Error GoTo 0.
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
On Error Goto 0 'mode normal pour les erreurs : s'il y en a une, l'interpréteur affichera un message d'erreur et quittera.


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
18
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
13 septembre 2010

Bonjour Ghuysmans99,
le script fonctionne en local mais par GPO il y'a des problèmes. l'execution par GPoO affiche toujours le message suivant :"Le fichier NK2 ou répertoire contenant ce dernier est introuvable.", quand bien même que le fichier existe.
je pense que le problème se situe à ce niveau
Set findFile = Nothing : Exit Function 'vu qu'il y a eu une erreur, on retourne Nothing

En fait parce qu'il des erreurs il retourne toujours Nothing d'où le message.
Jai fais un test en mettant cette ligne en commantaire et ça donne l'erreur suivante:

ligne 15
carac 2
Erreur : objet requis: FSO_Folder
Source : erreur d'execution Microsoft VBScript
code: 800A01A8

merci d'avance
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Ma ligne est correcte, le problème c'est qu'il ne trouve simplement pas le dossier. Fais un MsgBox de son paramètre Folder et regarde si c'est bon ...

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
18
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
13 septembre 2010

Bonjour,
je voudrais passer en batch, peux-tu m'aider à réecrire ce code en batch? merci encore une fois.
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
'suis une bulle en batch, sorry ...

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
18
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
13 septembre 2010

c'est dommage! mais une question au passage peux-tu m'aider à recuperer la date de création d'un fichier en batch (ou dos)? merci