cs_helpme51
Messages postés9Date d'inscriptionmardi 15 mai 2007StatutMembreDernière intervention 5 juin 2007
-
15 mai 2007 à 09:41
cs_helpme51
Messages postés9Date d'inscriptionmardi 15 mai 2007StatutMembreDernière intervention 5 juin 2007
-
5 juin 2007 à 09:41
Bonjour, voici mon problème
J'ai un soft qui me crée automatiquement mes comptes Users dans le CN=Users par défaut (et pas moyen de modifier ce soft...).
Le soft est installé sur les postes clients et lorsqu'un user se connecte (va sur le serveur ldap-> vérifie login/pwd -> créér ce compte dans l'AD)
Voulant appliquer des GPOs assez restrictives pour mes utilisateurs, je dois les appliquer sur des OUs.
Je viens de trouver un bout de script pour déplacer un compte utilisateur vers une OU (Microsoft)
Cela marche manuellement sur mon serveur de test :
Set objOU = GetObject("LDAP://ou=user-test,ou=TEST,dc=dom2000,dc=local" )
objOU.MoveHere _
"LDAP://cn=toto,cn=users,dc=dom2000,dc=local", vbNullString
Ma question est la suivante :
N'étant pas un spécialiste du scripting ou de la prog en général, comment faire pour récupérer automatiquement mes comptes qui sont créés automatiquement dans le conteneur 'Users' et les déplacer automatiquement vers une OU désirée.
Certainement une histoire de boucle dès qu'un nouvel User est créé ???
Sachant que le script ci-dessus marche bien mais en manuel, or mon problème le soft va chercher dans l'annuaire LDAP du taf (25000comptes) hors de question de les déplacer à la main.
J'espère avoir clairement expliquer mon problème.
Merci par avance
Mon script quand je le lance, marche c'est à dire que mes comptes User changent automatiquement d'OU, mais celà ne marche que pour des utilisateurs déjà créés.
Une nouvelle personne qui se créé dans l'AD aura un message d'erreur et bougera finalement quand même dans la bonne OU mais avec un compte désactivé par défaut.
2 problèmes se posent, n'étant pas spécialiste en programmation, on m'a dit qu'il fallait éviter de faire un Do ... Loop (ok mais quoi faire à la place ???)
Si je lances mon script en permanence, le serveur monte à 80% en ressources utilisées, si je lances mon script via une tâche planifiée, je ne peux pas descendre en dessous de la minute pour répéter mon script.....
Donc, je pensais plutôt à lancer le script dès qu'il y a un changement dans l'AD (création d'un compte User).... serait-ce du WMI ???
Si qq peut m'aider là dessus (au niveau de la gestion d'évenement), merci encore.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 18 mai 2007 à 09:05
Bonjour;
je ne sais pas l'écrire en VBS, mais ce devrait être l'équivalent de quelque chose comme ce qui suit, pour toutes 2es 5 secondes :
Private Sub Command1_Click()
depart = Timer
Do
If Timer > depart + 5 Then
MsgBox "j'exécute mes instructions"
depart = Timer
End If
Loop
End Sub
Si tu n'as pas de fonction Timer avec VBS, tu peux utiliser l'heure elle-même (Time, Now...)
cs_helpme51
Messages postés9Date d'inscriptionmardi 15 mai 2007StatutMembreDernière intervention 5 juin 2007 18 mai 2007 à 13:42
Oui en vbs les 2 fonctions Time() et Dateadd() éxistent aussi.
DateAdd([ interval], [ number], [ date])
Par contre, quand je lance ta fonction :
depart = Time
Do
If Time > DateAdd("s", 5, depart) Then
(ma fonction à moi)
depart = Time
End If
Loop
J'ai un problème, dans l'ajout de mes utilisateurs nouveaux.
Message d'erreurs (malgrès le déplacement et la désactivation du compte)
Le message d'erreur vient du fait que le script tourne en permanence...
Vous n’avez pas trouvé la réponse que vous recherchez ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 18 mai 2007 à 13:47
Je sais...
Mais il s'agit là d'un problème différent de celui du rythme à donner à l'exécution d'instructions (je n'ai réponsu qu'en ce qui concerne cet aspect de cadence pour libérer ton processeur)
Je te remercie encore pour la fonction Time (les nouveaux utilisateurs sont bien déplacés automatiquement sans bug)
Mais malheureusement le script est executé en permance en lançant un exe sur le serveur windows (cscript.exe) et le processeur tourne à 100%
Donc, il faut que je me tourne vers une autre solution ...
cs_helpme51
Messages postés9Date d'inscriptionmardi 15 mai 2007StatutMembreDernière intervention 5 juin 2007 22 mai 2007 à 11:05
En continuant à chercher; je vois que mon problème est plus compliqué que prévu, il fait appel à du VBS et du WMI :
premier script qui permet de bouger les Users d'un conteneur à un autre :
-------------------------------------------------------------------------
Set objConfiguration = GetObject _
("[ldap://cn=Users,dc=dom2000,dc=local LDAP://cn=Users,dc=dom2000,dc=local]")
objConfiguration.Filter= Array("user")
For Each objUser in objConfiguration
If objUser.cn="Administrateur" Then
ElseIf objUser.cn="Invité" Then
ElseIf objUser.cn="krbtgt" Then
ElseIf objUser.cn="IUSR_SERVTEST" Then
ElseIf objUser.cn="IWAM_SERVTEST" Then
ElseIf objUser.cn="TsInternetUser" Then
et le second script qui analyse l'observateur d'événement ('sécurité') à la recherche d'une création de compte :
-------------------------------------
' CAPTURE données de l'Observateur d'évènements : requête WQL
TComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate,(Security)}!\" & TComputer & "\root\cimv2")
Set colLoggedEvents = objWMIService.ExecQuery _
("Select * FROM Win32_NTLogEvent WHERE Logfile = 'Security'")
For Each objEvent in colLoggedEvents ' -> Parcourt les objEvent de la collection
If objEvent.EventIdentifier = "624" Then
'Wscript.Echo "EventIdentifier: " & objEvent.EventIdentifier
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run "cscript c:\scripts\moveuser.vbs"
End If
Next
----------------------------------------------------
Donc dans ce script dès qu'il détecte une création de compte , il lance le premier script qui bouge mes Users.
Or si je lance ce script en permanence le processeur monte à 100%.
Connaissez-vous un peu WMI et la détection d'événement ? Qui lancerait un script suite à un événement détecté ????
Set objShell = WScript.CreateObject("WScript.Shell")
Set objEventObject = objEventSource.NextEvent()
Select Case objEventObject.Path_.Class
Case "__InstanceCreationEvent"
Wscript.Echo "An instance of calc.exe was just started."
Case "__InstanceDeletionEvent"
Wscript.Echo "An instance of calc.exe was just stopped."
Case "__InstanceModificationEvent"
Wscript.Echo "An instance of calc.exe was just modified."
'objShell.AppActivate "objEventObject"
End Select
Set objSWbemServices = Nothing
Set objEventSource = Nothing
Set objEventObject = Nothing
Set objShell = Nothing
WScript.Echo "script terminé"
within = fréquence du lancement de la requête en secondes
Set objWMIService = GetObject("winmgmts:{(Security)}\" & strComputer & "\root\cimv2")
Set colMonitoredEvents objWMIService.ExecNotificationQuery("Select * from __InstanceCreationEvent Where " & "TargetInstance ISA 'Win32_NTLogEvent' " & "and TargetInstance.EventCode '624' ")
Do
Set objLatestEvent = colMonitoredEvents.NextEvent
' Wscript.Echo objLatestEvent.TargetInstance.User
' Wscript.Echo objLatestEvent.TargetInstance.TimeWritten
' Wscript.Echo objLatestEvent.TargetInstance.Message
' Wscript.Echo
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run "cscript c:\scripts\moveuser.vbs"
Ce qui est bizarre, c'est que mon script fonctionnait la semaine dernière. Mais depuis que j'ai redémarré le serveur de test (que ce soit en automatique ou lançer à la main) le script ne veux plus rien savoir, en gros il ne rentre jamais ds la boucle du Do...Loop puisqu'il ne me lance pas mon autre script !!!
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("Select * from __InstanceCreationEvent Where " & "TargetInstance ISA 'Win32_NTLogEvent' " &_
"and TargetInstance.EventCode = '20159' ")
'
' 20159 = numéro d'évenement généré à ma déconnexion réseau (activée manuellement pour tester)
'
Do
MsgBox "test entrée boucle - le script va attendre l'évenement"
Set objLatestEvent = colMonitoredEvents.NextEvent
Msgbox objLatestEvent.TargetInstance.Message
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run "D:\Mes_scripts_VBFrance\JMO.vbs" 'contient un msgbox
Loop
cs_helpme51
Messages postés9Date d'inscriptionmardi 15 mai 2007StatutMembreDernière intervention 5 juin 2007 4 juin 2007 à 16:34
Bonjour JMO,
En effet, le script ne 'marche plus' , depuis le reboot de mon serveur de test.
Quand je lances le script, grâce au messagebox, je vois qu'on rentre bien ds la boucle (Do...Loop). Mais dès qu'un utilisateur se loggue, l'événement 624 (création d'user) ne semble plus être détecter, et donc le compte nvellement créer n'est pas déplacé automatiquement vers l'OU désiré grâce à l'appel du second script (voir msg précédent).
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 4 juin 2007 à 17:42
Bonjour,
Je viens de tester les 2 scripts ci-dessous:
'___________________________________________
'1er script
strComputer = "."
Set objWMIService = GetObject("winmgmts:{(Security)}\" & strComputer & "\root\cimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("Select * from __InstanceCreationEvent Where " & "TargetInstance ISA 'Win32_NTLogEvent' " &_
"and TargetInstance.EventCode = '0' ")
'
' 0 = numéro d'évenement généré par l'activation du 2ème script
'
Dim cpt : cpt=1
Do
MsgBox "test entrée boucle - le script va attendre l'évenement",,"Boucle n° " & cpt
Set objLatestEvent = colMonitoredEvents.NextEvent
Msgbox objLatestEvent.TargetInstance.Message
cpt=cpt+1
Loop
Set objWMIService = Nothing
Set colMonitoredEvents = Nothing
Set objLatestEvent = Nothing
'___________________________________________
'2ème script
'Ecriture dans le journal d'évènement LogEvent Application
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.LogEvent 0, "test_helpme51" &vbTab& Now
Set WshShell = Nothing
'___________________________________________
1) Activation du 1er script, donc du msgbox "Boucle n°1"
2) Activation du 2ème script, donc du msgbox "test_helpme51" &vbTab& Now
(message qui va être écrit dans la LogEvent - Application)
+ msgbox "Boucle n°2"