1 :
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
13 :
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 :
22 :
23 :
24 :
25 :
26 :
27 :
28 :
29 :
30 :
31 :
32 :
33 :
34 :
35 :
36 :
37 :
38 :
39 :
40 :
41 :
42 :
43 :
44 :
45 :
46 :
47 :
48 :
49 :
50 :
51 :
52 :
53 :
54 :
55 :
56 :
57 :
58 :
59 :
60 :
61 :
62 :
63 :
64 :
65 :
66 :
67 :
68 :
69 :
70 :
71 :
72 :
73 :
74 :
75 :
76 :
77 :
78 :
79 :
80 :
81 :
82 :
83 :
84 :
85 :
86 :
87 :
88 :
89 :
90 :
91 :
92 :
93 :
94 :
95 :
96 :
97 :
98 :
99 :
100 :
101 :
102 :
103 :
104 :
105 :
106 :
107 :
108 :
109 :
110 :
111 :
112 :
113 :
114 :
115 :
116 :
117 :
118 :
119 :
120 :
121 :
122 :
123 :
124 :
125 :
126 :
127 :
128 :
129 :
130 :
131 :
132 :
133 :
134 :
135 :
136 :
137 :
138 :
139 :
140 :
141 :
142 :
143 :
144 :
145 :
146 :
147 :
148 :
149 :
150 :
151 :
152 :
153 :
154 :
155 :
156 :
157 :
158 :
159 :
160 :
161 :
162 :
163 :
164 :
165 :
166 :
167 :
168 :
169 :
170 :
171 :
172 :
173 :
174 :
175 :
176 :
177 :
178 :
179 :
180 :
181 :
182 :
183 :
184 :
185 :
186 :
187 :
188 :
189 :
190 :
191 :
192 :
193 :
194 :
195 :
196 :
197 :
198 :
199 :
200 :
201 :
202 :
203 :
204 :
205 :
206 :
207 :
208 :
209 :
210 :
211 :
212 :
213 :
214 :
215 :
216 :
217 :
218 :
219 :
220 :
221 :
222 :
223 :
224 :
225 :
226 :
227 :
228 :
229 :
230 :
231 :
232 :
233 :
234 :
235 :
236 :
237 :
238 :
239 :
240 :
241 :
242 :
243 :
244 :
245 :
246 :
247 :
248 :
249 :
250 :
251 :
252 :
253 :
254 :
255 :
256 :
257 :
258 :
259 :
260 :
261 :
262 :
263 :
264 :
265 :
266 :
267 :
268 :
269 :
270 :
271 :
272 :
273 :
274 :
275 :
276 :
277 :
278 :
279 :
280 :
281 :
282 :
283 :
284 :
285 :
286 :
287 :
288 :
289 :
290 :
291 :
292 :
293 :
294 :
295 :
296 :
297 :
298 :
299 :
300 :
301 :
302 :
303 :
304 :
305 :
306 :
307 :
308 :
309 :
310 :
311 :
312 :
313 :
314 :
315 :
316 :
317 :
318 :
319 :
320 :
321 :
322 :
323 :
324 :
325 :
326 :
327 :
328 :
329 :
330 :
331 :
332 :
333 :
334 :
335 :
336 :
337 :
338 :
339 :
340 :
341 :
342 :
343 :
344 :
345 :
346 :
347 :
348 :
349 :
350 :
351 :
352 :
353 :
354 :
355 :
356 :
357 :
358 :
359 :
360 :
361 :
362 :
363 :
364 :
365 :
366 :
367 :
368 :
369 :
370 :
371 :
372 :
373 :
374 :
375 :
376 :
377 :
378 :
379 :
380 :
381 :
382 :
383 :
|
const ROOT_OU = « ou=test »
const REPOSITORY_FILE = « c:\temp\repository.log »
const REPOSITORY_COMPARE_FILE = « c:\temp\repository _comp.log »
const RESULT_FILE = « c:\temp\result.log »
const USER_PROPS = « nom, OU de parent, AccountDisabled, AccountExpirationDate, directeur, GroupMembership »
Placer l'usersPropsDict = le CreateObject (« Scripting.Dictionary »)
placer l'objFSO = le createobject (« scripting.filesystemobject »)
GetUsersProps
si objFSO.FileExists (REPOSITORY_FILE) puis
objFSO.CopyFile REPOSITORY_FILE, REPOSITORY_COMPARE_FILE, VRAI
LogUsersProps
CheckUserChanges
autrement
LogUsersProps
finir si
wscript.echo « accomplissent »
fonction CheckUsersStatus (prevStateArr, curStateArr)
faible strResult
Placer l'usersDict = le CreateObject (« Scripting.Dictionary »)
pour chaque ligne dans le prevStateArr
si "" d'équilibre (ligne <> ) alors
l'utilisateur = s'est dédoublé (ligne, « , ") (0)
utilisateur d'usersDict.Add, 0
finir si
après
pour chaque ligne dans le curStateArr
si "" d'équilibre (ligne <> ) alors
l'utilisateur = s'est dédoublé (ligne, « , ") (0)
si usersDict.Exists (utilisateur) puis
usersDict.Item (utilisateur) = 2
autrement
utilisateur d'usersDict.Add, 1
finir si
finir si
après
pour chaque clef dans l'usersDict
choisir le cas usersDict.Item (la clef)
affaire 0 : le 'utilisateur a été supprimé
le strResult = le strResult et le « utilisateur [ » et la clef et « ] ont été supprimés » et vbNewLine
affaire 1 : 'nouvel utilisateur créé
le strResult = le strResult et le « nouvel utilisateur [ » et la clef et « ] ont été créés » et vbNewLine
affaire 2 : 'vérifier si l'utilisateur était déplacé
finir choisi
après
CheckUsersStatus = strResult
fonction de fin
CheckUserChanges secondaire
curStateData = objFSO.OpenTextFile (REPOSITORY_FILE, 1).ReadAll
prevStateData = objFSO.OpenTextFile (REPOSITORY_COMPARE_FILE, 1).ReadAll
le curStateArr = s'est dédoublé (curStateData, vbNewLine)
le prevStateArr = s'est dédoublé (prevStateData, vbNewLine)
le strSubject = « utilisateur d'ANNONCE change la notation de résultat - » et la date et « « et l'heure
strResult = CheckUsersStatus (prevStateArr, curStateArr)
pour i=1 à UBound (curStateArr)
ligne = curStateArr (i)
s'InStr (le prevStateData, équilibrent (ligne) et vbNewLine) = 0 puis
matchLine = FindUserChangeDelta (ligne, prevStateArr)
si "" <> de matchLine alors
changeResult = LogUserPropertiesChange (matchLine, ligne)
si "" <> de changeResult alors
strResult = strResult et changeResult
finir si
finir si
finir si
après
si objFSO.FileExists (RESULT_FILE) puis
objResFile réglé = objFSO.OpenTextFile (RESULT_FILE, 8)
autrement
objResFile réglé = objFSO.CreateTextFile (RESULT_FILE, 2)
finir si
strSubject d'objResFile.WriteLine
si "" <> de strResult alors
strResult d'objResFile.WriteLine
strSubject de NotifyByEmail, strResult
autrement
objResFile.WriteLine « aucuns changements ont été surveillés. »
finir si
objResFile.Close
finir le sous-marin
substrater NotifyByEmail (strSubject, strResult)
Obscurcir ToAddress
Obscurcir MessageSubject
Obscurcir MessageBody
Obscurcir MessageAttachment
Obscurcir l'ol, NS, newMail
ToAddress = « [email protected] »
MessageSubject = strSubject
MessageBody = strResult
Placer l'ol = le WScript.CreateObject (« Outlook.Application »)
Placer NS = ol.getNamespace (« MAPI »)
ns.log sur le "", "", vrai, faux
Placer le newMail = l'ol.CreateItem (l'olMailItem)
newMail.Subject = MessageSubject
newMail.Body = MessageBody et vbCrLf
'valider le destinataire, juste dans le cas…
Placer myRecipient = ns.CreateRecipient (ToAddress)
myRecipient.Resolve
Sinon myRecipient.Resolved alors
MsgBox « destinataire inconnu »
Autrement
newMail.Recipients.Add (myRecipient)
newMail.Send
Finir si
Placer l'ol = rien
finir le sous-marin
fonction GetGroupMembershipChanges (I, arr1, arr2)
changeResult = faux
strResult = « GroupMembership : » et vbNewLine
si UBound (arr1) < i="" then="" if="" UBound="">= I alors
strResult = strResult et « groupes [ » et remplacer (arr2 (i), « ; », « , ") et « ] ont été ajoutés » et vbNewLine
le changeResult = rectifient
finir si
autrement
si UBound (arr2) < i="" then="" if="" UBound="">= I alors
strResult = strResult et « groupes [ » et remplacer (arr1 (i), « ; », « , ") et « ] ont été enlevés » et vbNewLine
le changeResult = rectifient
finir si
autrement
arrMembers1 = s'est dédoublé (arr1 (i), « ; ")
arrMembers2 = s'est dédoublé (arr2 (i), « ; ")
Placer dictmembers2 = CreateObject (« Scripting.Dictionary »)
Placer dictmembers1 = CreateObject (« Scripting.Dictionary »)
pour chaque mem2 dans arrMembers2
dictmembers2.Add mem2, rien
après
pour chaque mem1 dans arrMembers1
si dictmembers2.Exists (mem1) = faux puis
le strResult = le strResult et le « groupe [ » et les mem1 et « ] ont été enlevés » et vbNewLine
le changeResult = rectifient
finir si
dictmembers1.Add mem1, rien
après
pour chaque mem2 dans arrMembers2
si dictmembers1.Exists (mem2) = faux puis
le strResult = le strResult et le « groupe [ » et les mem2 et « ] ont été ajoutés » et vbNewLine
le changeResult = rectifient
finir si
après
finir si
finir si
si le changeResult = rectifient alors
GetGroupMembershipChanges = strResult
autrement
GetGroupMembershipChanges = ""
finir si
finir la fonction
fonction LogUserPropertiesChange (matchLine, ligne)
changeResult = faux
arr1 = s'est dédoublé (matchLine, « , ")
arr2 = s'est dédoublé (ligne, « , ")
l'userPropsArr = s'est dédoublé (USER_PROPS, « , ")
strResult = « [ » et arr1 (0) et « ] » et vbNewLine
pour i=1 à UBound (userPropsArr)
'manipulation spéciale pour GroupMembership
si userPropsArr (i) = « GroupMembership » puis
strGroupResult = GetGroupMembershipChanges (I, arr1, arr2)
si "" <> de strGroupResult alors
strResult = strResult et strGroupResult et vbNewLine
finir si
autrement
si >= i d'UBound (arr1) et >= i d'UBound (arr2) puis
si arr1 (i) <> arr2 (i) alors
strLine = userPropsArr (i) et « : » et vbNewLine
strLine = strLine et « avant = » et arr1 (i) et vbNewLine
strLine = strLine et « après = » et arr2 (i) et vbNewLine
strResult = strResult et strLine et vbNewLine
le changeResult = rectifient
finir si
autrement
si >= i d'UBound (arr1) et UBound (arr2) < i="" then="" strLine="userPropsArr(i)">= I alors
strLine = userPropsArr (i) et « : » et vbNewLine
strLine = strLine et « avant = aucune propriété » et vbNewLine
strLine = strLine et « après = » et arr2 (i) et vbNewLine
strResult = strResult et strLine et vbNewLine
le changeResult = rectifient
finir si
finir si
finir si
finir si
après
si le changeResult = rectifient alors
LogUserPropertiesChange = strResult et vbNewLine
autrement
LogUserPropertiesChange = ""
finir si
finir la fonction
fonction FindUserChangeDelta (ligne, prevStateArr)
faible utilisateur, matchLine
l'utilisateur = s'est dédoublé (ligne, « , ") (0)
pour chaque prevLine dans le prevStateArr
si "" d'équilibre (prevLine <> ) alors
si fente (prevLine, « , ") (0) = utilisateur alors
matchLine = prevLine
sortir pour
finir si
finir si
après
FindUserChangeDelta = matchLine
fonction de fin
LogUsersProps secondaire
sur le résumé d'erreur après
faible userProp
placer l'objLog = l'objFSO.CreateTextFile (REPOSITORY_FILE, 2)
objLog.WriteLine USER_PROPS
pour chaque objKey dans l'usersPropsDict
userProp = objKey
pour chaque objInnerKey dans l'usersPropsDict (objKey)
userProp = userProp et « , » et usersPropsDict (objKey) (objInnerKey)
après
userProp d'objLog.WriteLine
après
objLog.Close
sous-marin d'extrémité
GetUsersProps secondaire
faible utilisateur
Const ADS_SCOPE_SUBTREE = 2
Placer l'objConnection = le CreateObject (« ADODB.Connection »)
Placer l'objCommand = le CreateObject (« ADODB.Command »)
objConnection.Provider = « ADsDSOObject »
objConnection.Open « fournisseur actif d'annuaire »
Placer objCommand.ActiveConnection = objConnection
objCommand.Properties (« taille de page ») = 1000
objCommand.Properties (« Searchscope ») = ADS_SCOPE_SUBTREE
Placer l'objRootDSE = le GetObject (« LDAP : //RootDSE »)
strDNSDomain = objRootDSE.Get (« defaultNamingContext »)
si "" <> de ROOT_OU alors
ldaproot = « LDAP : / » et ROOT_OU et « , » et strDNSDomain
autrement
ldaproot = « LDAP : / » et strDNSDomain
finir si
objCommand.CommandText = « distinguishedName CHOISI, sAMAccountName DE « » et ldaproot et « » OÙ objectCategory='user'"
Placer l'objRecordSet = l'objCommand.Execute
Tandis que pas objRecordSet.EOF
utilisateur = objRecordSet.Fields (« sAMAccountName »). Valeur
si usersPropsDict.Exists (utilisateur) = faux puis
sur le résumé d'erreur après
Placer le propsDict = le CreateObject (« Scripting.Dictionary »)
utilisateur d'usersPropsDict.Add, propsDict
distName = objRecordSet.Fields (« distinguishedName »). Valeur
Placer ObjUser = GetObject (« LDAP : / » et distName)
l'arrPath = s'est dédoublé (distName, « , ")
intLength = Len (arrPath (1))
intNameLength = intLength - 3
parentOU = droit (arrPath (1), intNameLength)
propsDict.Add « OU de parent », parentOU
propsDict.Add « AccountDisabled », ObjUser.AccountDisabled
si "" <> d'ObjUser.AccountExpirationDate alors
propsDict.Add « AccountExpirationDate », ObjUser.AccountExpirationDate
autrement
propsDict.Add « AccountExpirationDate », ""
finir si
si "" <> d'ObjUser.Manager alors
placer l'objManager = le GetObject (« LDAP : / » et ObjUser.Manager)
propsDict.Add « directeur », remplacent (objManager.Name, « CN= », le "")
autrement
propsDict.Add « directeur », ""
finir si
finir si
objRecordSet.MoveNext
WEnd
getUsersGroups
sous-marin d'extrémité
getUsersGroups secondaires
faible groupe
Const ADS_SCOPE_SUBTREE = 2
Placer l'objConnection = le CreateObject (« ADODB.Connection »)
Placer l'objCommand = le CreateObject (« ADODB.Command »)
objConnection.Provider = « ADsDSOObject »
objConnection.Open « fournisseur actif d'annuaire »
Placer objCommand.ActiveConnection = objConnection
objCommand.Properties (« taille de page ») = 1000
objCommand.Properties (« Searchscope ») = ADS_SCOPE_SUBTREE
Placer l'objRootDSE = le GetObject (« LDAP : //RootDSE »)
strDNSDomain = objRootDSE.Get (« defaultNamingContext »)
si "" <> de ROOT_OU alors
ldaproot = « LDAP : / » et ROOT_OU et « , » et strDNSDomain
autrement
ldaproot = « LDAP : / » et strDNSDomain
finir si
objCommand.CommandText = « distinguishedName CHOISI, sAMAccountName DE « » et ldaproot et « » OÙ objectCategory='group'"
Placer l'objRecordSet = l'objCommand.Execute
Tandis que pas objRecordSet.EOF
groupe = objRecordSet.Fields (« distinguishedName »). Valeur
Placer ObjGroup = GetObject (« LDAP : / » et groupe)
pour chaque objMember dans objGroup.Members
si usersPropsDict.Exists (objmember.samaccountname) puis
si usersPropsDict.Item (objmember.samaccountname). Existe (« groupMembership ») alors
groupMembership = usersPropsDict.Item (objmember.samaccountname). Article (« groupMembership »)
groupMembership = groupMembership et « ; » et objGroup.samaccountname
usersPropsDict.Item (objmember.samaccountname). Article (« groupMembership ») = groupMembership
autrement
usersPropsDict.Item (objmember.samaccountname). Ajouter le « groupMembership », objGroup.samaccountname
finir si
finir si
après
objRecordSet.MoveNext
WEnd
finir le sous-marin
|