Script VBS pas trop compliqué...

Résolu
alexfoo Messages postés 12 Date d'inscription mercredi 27 août 2003 Statut Membre Dernière intervention 29 septembre 2005 - 19 sept. 2005 à 16:30
alexfoo Messages postés 12 Date d'inscription mercredi 27 août 2003 Statut Membre Dernière intervention 29 septembre 2005 - 28 sept. 2005 à 11:55
Bonjour voila je suis admin réseau (he oui ca arrive!!!), la je m'occupe d'un parc de 50 postes ou 400 à 500 personnes se loguent. Bref il arrive parfois que les profils en cache restent sur les disques des postes lorsque il y a un problème de synchronissation avec le serveur, et la longue ca sature les disques...

Là ou il y à un rapport avec le développement, c'est que je ne vais pas passer sur chaque poste supprimer les dossiers à la mano...
C'est pourquoi je voudrais faire un petit script en VBS pour supprimer tout les dossiers qui se trouvent dans un répertoire donné, a quelques exceptions prêts (rep admin, all users, defaut user, etc…)


Je l’avou je ne connais pas trop la syntaxe pour les scripts VB,en plus la ou je suis je n'ai pas d'accès à VB, donc pour l'aide ou le dobogage..., je sais juste que ca commence par quelque chose comme ca :





On Error Resume Next


« la il faudrait qu’il y ait une boucle mais avec quelle syntaxe… »


Set objFSO = CreateObject("Scripting.FileSystemObject")


objFSO.DeleteFolder("C:\Profils\xxx")




Il fautaussi gérer les exceptions (avec If xxx = administrateur or defaut user then next, etc…) j’imagine quelque chose dans le genre vous moquez pas de moi j’suis pas développeur moa


D’avance merci à ceux qui auront eu le courage de lire ce post jusqu’au bout!

10 réponses

cs_jeanmarc Messages postés 34 Date d'inscription mardi 18 juin 2002 Statut Membre Dernière intervention 22 novembre 2005
25 sept. 2005 à 23:20
Bonsoir,[javascript:Insert_Emoticon('/imgs2/smile.gif'); ]

Je viens de rentrer de mon week prolongé et de pondre ton script.
Le ' signifie un commentaire. J'ai donc protégé la commande deletefolder.
De même, les msgbox servent de test.
Attention, il y a des profils cachés.
J'ai créé des dossiers "bidon" sur "c:\Documents and Settings" + test du script ok.

Dim Path, fso, f, f1, User, Users, Sup
Path = "c:\Documents and Settings"


Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(Path)
Set Users = f.SubFolders
For Each f1 in Users
User = User & vbCrLf & vbCrLf & f1.Name


Select Case f1.Name
Case "Administrateur" 'profil à ne pas supprimer
MsgBox "Le user Administrateur ne sera supprimé"
Case "All Users" 'profil à ne pas supprimer
Case "Default User" 'profil à ne pas supprimer
Case "LocalService" 'profil à ne pas supprimer
Case "NetworkService" 'profil à ne pas supprimer
Case "jeanmarc" 'profil à ne pas supprimer
Case Else
msgbox "Ce profil sera supprimé : " & f1.Name
Sup = Sup & vbCrLf & vbCrLf & f1.Name
'fso.DeleteFolder(f1.ShortPath) 'ATTENTION: ordre protégé car dangerous !!!
End Select
Next
msgbox "Liste de tous les profils (visibles et cachés)" & vbCrLf & vbCrLf & User
msgbox "Liste des profils supprimés" & vbCrLf & vbCrLf & Sup
Set fso = Nothing
3
cs_jeanmarc Messages postés 34 Date d'inscription mardi 18 juin 2002 Statut Membre Dernière intervention 22 novembre 2005
19 sept. 2005 à 21:39
Bonsoir,

ce n'est pas aussi simple que cela !!!
faire un script générique qu'il faut installer et inclure, sur chaque poste, dans les taches planifiées , à une heure x, pour chaque session "user" possible. c'est presque irréalisable.
Le user change de password et la tache planifiée du script vbs ne marche plus.
Miracle, si un serveur "admin" a droit de partage/visu sur tous les serveurs et disques.
Ci-dessous 2 exemples pour visu domaine/users d'un serveur.

Set WshNetwork = WScript.CreateObject("WScript.Network")
WScript.Echo "Domaine = " & WshNetwork.UserDomain
WScript.Echo "Nom ordinateur = " & WshNetwork.ComputerName
WScript.Echo "Nom utilisateur = " & WshNetwork.UserName
'-----------------------
' Liste des utilisateurs
'-----------------------
Dim network, computer, SAM, Item
Set network = Wscript.CreateObject("WScript.Network")
computer=network.ComputerName
wscript.echo "#Liste des utilisateurs et groupes de " & computer
set SAM=GetObject("WinNT://" & computer & ",computer")
for each Item in SAM
Classe=Item.Class
If Classe = "User" then
wscript.echo Classe & chr(9) & Item.name
End if
next

.
0
alexfoo Messages postés 12 Date d'inscription mercredi 27 août 2003 Statut Membre Dernière intervention 29 septembre 2005
20 sept. 2005 à 09:51
Merci Jean Marc

Sisi ca peut etre simple... en fait je possède un compte administrateur du domaine, je peut executer n'importe quelle tache sur n'importe quel poste avec celui-ci...Donc pas besoin de se casser la tete avec les comptes utilisateurs...
De plus je peux tres bien déployer le scripts VBS sur chaque poste (de facon automatisé ou manuel), et donc la encore je n'ai pas besoin de gérer les adresses de postes, il suffit de le configurer pour qu'il s'execute en localhost

Donc comme je le dis sur plus haut, ce sera plutot sur la partie de code qui dans un dossier donné, efface tout les dossiers presents sauf certains que j'aurais défini.
0
cs_jeanmarc Messages postés 34 Date d'inscription mardi 18 juin 2002 Statut Membre Dernière intervention 22 novembre 2005
20 sept. 2005 à 21:56
Bonsoir,

J'ai....presque solutionné la demande...
Le script ci-dessous marche pour un user seulement.
J'ai donc un pb de boucle.

Dim Fso, Path, Fic, i, WshShell
Dim ObjTextStream, strtmp, Entree, Sortie, Result
Dim network, computer, SAM, Item


'dans le fichier users.txt, j'ai créé 3 lignes pour les tests
'1ère ligne: Administrateur => le ComputerName existe
'2ème ligne: Unknow => le ComputerName n existe pas
'3ème ligne: jeanmarc => le ComputerName existe
Path = "d:"
Fic = "\users.txt" 'profil à ne pas supprimer / ligne à ligne


Set Fso = CreateObject("Scripting.FileSystemObject")
Set ObjTextStream = Fso.OpenTextFile(Path & Fic)


Set network = Wscript.CreateObject("WScript.Network")
computer=network.ComputerName
Set SAM=GetObject("WinNT://" & computer & ",computer")


'for each Item in SAM 'vérification de tous les users d'un serveur
' Classe=Item.Class
' If Classe = "User" then
' wscript.echo Classe & chr(9) & Item.name
' End if
' next


for each Item in SAM
Classe=Item.Class
If Classe = "User" then
Do While Not ObjTextStream.AtEndOfStream
strtmp = split(ObjTextStream.readline," ")
For i = 0 to Ubound(strtmp)
MsgBox "début: item_name=" & Item.name & " lecture ligne courante du fichier user= " & strtmp(i)
If strtmp(i) = Item.name Then
MsgBox "Item.name:" & Item.name & " = lecture ligne courante du fichier user= " & strtmp(i)
Else
MsgBox "Item.name:" & Item.name & " # lecture ligne courante du fichier user= " & strtmp(i)
End If
MsgBox "fin : item_name=" & Item.name & " lecture ligne courante du fichier user= " & strtmp(i)
Next
Loop
End if
next


msgbox "fin du script"
ObjTextStream.Close
Set fso = Nothing
Set network = Nothing
wscript.quit

Merci de m'avertir quand script ok.........
jeanmarc
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
alexfoo Messages postés 12 Date d'inscription mercredi 27 août 2003 Statut Membre Dernière intervention 29 septembre 2005
21 sept. 2005 à 11:17
Bonjour Jean Marc, et bin dis donc t'as pas chômé!!!, enfin je me suis peut etre fait mal comprendre, mais ce que j'ai cherche à faire est bien plus simple que ce que tu as fait !!!

Alors pour dans la transparence la plus totale: dans un domaine windows, ou les profils utilisateurs sont itinérants, à chaque connexion sur un poste client un profil temporaire est crée dans "c:\documents and settings\%username%". Si lors de la deconnexion du client il y a un problème de désynchronisation, alors le profil temporaire va rester en local sur le poste clent en gardant le nom du profil qui s'est connecté ( dans "c:\documents and settings").
A la longue ces dossiers contenant des profils dont je me contrefou royalement, s'accumulent sur les disques des postes clients et les satures... les pôvres...
Et la, c'est le drame...

Nan sérieusement pour faire de la place sur ces disques je veux justes supprimer tous les dossiers contenus dans le dossier "c:\documents and settings" SAUF les dossiers suivant : "administrateur", "all users", "default user", car ils sont nécessaires au bon fonctionnement des profils...

Tu peux aller faire un tour dans ce dossier si tu as un 2K, XP ou 2K3, meme si je pense que tu connais déjà...
Enfin comme tu peut le constater c'est beaucoup plus simple que ce que tu as pondu, tu t'es déjà bien creuser en tout cas merci et bravo
0
cs_jeanmarc Messages postés 34 Date d'inscription mardi 18 juin 2002 Statut Membre Dernière intervention 22 novembre 2005
21 sept. 2005 à 13:21
Bonjour,
Effectivement, vu sous cet angle....c'est simple...
1) Une boucle "For Each" pour récupérer tous les noms de répertoires (profils)
existant sur la racine setting..;
2) Utilise "Select CASE et Other( ou else)" pour supprimer les folders indésirables.

Malheureusement pour toi...heureusement pour moi...
je pars, now, en week prolongé jusqu'à dimanche soir...
donc si tu n'as pas la solution d'ici là, il faudra patienter !!!

jean-marc
0
alexfoo Messages postés 12 Date d'inscription mercredi 27 août 2003 Statut Membre Dernière intervention 29 septembre 2005
21 sept. 2005 à 17:42
OK Jean Mimi bon WE et merci!
0
alexfoo Messages postés 12 Date d'inscription mercredi 27 août 2003 Statut Membre Dernière intervention 29 septembre 2005
28 sept. 2005 à 09:52
Merci Jean Mimi !!! , je vais le tester mais je le sens bien (t'inkiet, je débute en script en VBS, mais ce qui ne change pas par rapport à d'autres langages, ce sont les guillemets pour les commentaires, les déclarations de variables, etc...)

Je te tiens au courant de mes résultats !!!
0
alexfoo Messages postés 12 Date d'inscription mercredi 27 août 2003 Statut Membre Dernière intervention 29 septembre 2005
28 sept. 2005 à 10:27
Alors la chapeau Jean Mimi , il marche nickel ton script!!! bravo et merci!
Je l'ai très légèrement modifié pour qu'il soit disons plus direct dans son execution:

Dim Path, fso, f, f1, User, Users, Sup
Path = "c:\test"


Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(Path)
Set Users = f.SubFolders
For Each f1 in Users
User = User & vbCrLf & vbCrLf & f1.Name


Select Case f1.Name
Case "Administrateur" 'profil à ne pas supprimer
'MsgBox "Le user Administrateur ne sera supprimé"
Case "All Users" 'profil à ne pas supprimer
Case "Default User" 'profil à ne pas supprimer
Case "LocalService" 'profil à ne pas supprimer
Case "NetworkService" 'profil à ne pas supprimer
Case Else
'msgbox "Ce profil sera supprimé : " & f1.Name
Sup = Sup & vbCrLf & vbCrLf & f1.Name
fso.DeleteFolder(f1.ShortPath) 'ATTENTION: ordre protégé car dangerous !!!
End Select
Next
'msgbox "Liste de tous les profils (visibles et cachés)" & vbCrLf & vbCrLf & User
msgbox "Liste des profils supprimés" & vbCrLf & vbCrLf & Sup
Set fso = Nothing

En tout cas tu m'a beaucoups aidé alors si tu tu trouves sur la région parisienne ou que tu as l'intention d'y passer, mail moi et je te paierais un verre!!! , car tu l'as bien mérité
0
alexfoo Messages postés 12 Date d'inscription mercredi 27 août 2003 Statut Membre Dernière intervention 29 septembre 2005
28 sept. 2005 à 11:55
Re bonjour Jean Marc je post ici la meme question que sur un autre nouveau post car l'edition de ce cript je l'ai réalisé a parttir de ce que tu m'as donné

Voici ce dont j'ai besoin: Sur un disque C, chaques users à un dossier à son nom (dans docs and settings), la plupart d'entre eux (mais pas tous) ont dans leur dossier un dossier qui s'appel "Documents de %username%" (avec plein de fichier dedans quoi...)
Chacuns de ces users a aussi un dossier à son nom sur le 2ème disque D (mais pas tous !), et dans ce dossier un dossier qui s'appel "Mes documents"
Le but est que TOUS les fichiers qui se trouves dans C:\documents and settings\%username%\Documents de %username% soit DEPLACER (ou copier) dans le dossier correspondant au meme utilisateur sur D:\etudiants\%username%\Mes documents.

Voici une ébauche:

Dim Path,fso,objFSO, f, f1, User, Users, Sup
Path = "c:\test"
'DPath = "D:\etudiant"
Const OverwriteExisting = FALSE


Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(Path)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFSO = objFSO.GetFile
Set Users = f.SubFolders
For Each f1 in Users
User = User & vbCrLf & vbCrLf & f1.Name


Select Case f1.Name
Case "Administrateur" 'profil à ne pas à ne pas modifier
'MsgBox "Le user Administrateur ne sera supprimé"
Case "All Users" 'profil à ne pas modifier
Case "Default User" 'profil à ne pas modifier
Case "LocalService" 'profil à ne pas modifier
Case "NetworkService" 'profil à ne pas modifier
Case Else
'msgbox "Ce profil sera modifier : " & f1.Name
Sup = Sup & vbCrLf & vbCrLf & f1.Name
objFSO.MoveFile "C:\test & f1.name\Documents de f1.name" , "D:\etudiants\ & f1.name\Mes documents" , OverwriteExisting
End Select
Next
'msgbox "Liste de tous les profils (visibles et cachés)" & vbCrLf & vbCrLf & User
msgbox "Liste des profils ayant le dossier mes docs déplacé" & vbCrLf & vbCrLf & Sup
Set fso = Nothing
Set objFSO = Nothing

Le probleme est que je ne sais pas définir les bonnes variables, ainsi que la bonne boucle ou serie de boucle qui permettra de déplacer les fichiers qui se trouves dans C:\documents and settings\%username%\Documents de %username% dans le dossier correspondant au meme utilisateur sur D:\etudiants\%username%\Mes documents.

HELP!!!

PS: (une girafe à la clé !!!)
0
Rejoignez-nous