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:
|
const ROOT_OU = „cn=users“
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 = „Naam, AccountDisabled, AccountExpirationDate, GroupMembership“
Reeks usersPropsDict = CreateObject („Scripting.Dictionary“)
reeks objFSO = createobject („scripting.filesystemobject“)
GetUsersProps
als objFSO.FileExists (REPOSITORY_FILE) toen
objFSO.CopyFile REPOSITORY_FILE, WARE REPOSITORY_COMPARE_FILE,
LogUsersProps
CheckUserChanges
anders
LogUsersProps
beëindig als
wscript.echo „Volledig“
functie CheckUsersStatus (prevStateArr, curStateArr)
schemerige strResult
Reeks usersDict = CreateObject („Scripting.Dictionary“)
voor elke lijn in prevStateArr
als Versiering (lijn) <> "" toen
de gebruiker = verdeelde (lijn, „,“) (0)
usersDict.Add gebruiker, 0
beëindig als
daarna
voor elke lijn in curStateArr
als Versiering (lijn) <> "" toen
de gebruiker = verdeelde (lijn, „,“) (0)
als usersDict.Exists (gebruiker) toen
usersDict.Item (gebruiker) = 2
anders
usersDict.Add gebruiker, 1
beëindig als
beëindig als
daarna
voor elke sleutel in usersDict
selecteer (zeer belangrijk) geval usersDict.Item
geval 0: de 'gebruiker werd geschrapt
strResult = strResult & de „Gebruiker [“ & de sleutel & „] werden geschrapt“ & vbNewLine
geval 1: 'nieuwe gecre�ërde gebruiker
strResult = strResult & de „Nieuwe gebruiker [“ & de sleutel & „] werden gecre�ërd“ & vbNewLine
geval 2: de 'gebruiker werd niet veranderd
uitgezocht eind
daarna
CheckUsersStatus = strResult
eind functie
sub CheckUserChanges
curStateData = objFSO.OpenTextFile (REPOSITORY_FILE, 1) .ReadAll
prevStateData = objFSO.OpenTextFile (REPOSITORY_COMPARE_FILE, 1) .ReadAll
curStateArr = verdeel (curStateData, vbNewLine)
prevStateArr = verdeel (prevStateData, vbNewLine)
strSubject = „het Logboek van het Resultaat van de Veranderingen van de Gebruiker van de ADVERTENTIE -“ & Datum & „„& Tijd
strResult = CheckUsersStatus (prevStateArr, curStateArr)
voor i=1 aan UBound (curStateArr)
lijn = curStateArr (I)
als InStr (prevStateData, Versiering (lijn) & vbNewLine) = 0 toen
matchLine = FindUserChangeDelta (lijn, prevStateArr)
als matchLine <> "" toen
changeResult = LogUserPropertiesChange (matchLine, lijn)
als changeResult <> "" toen
strResult = strResult & changeResult
beëindig als
beëindig als
beëindig als
daarna
als objFSO.FileExists (RESULT_FILE) toen
vastgestelde objResFile = objFSO.OpenTextFile (RESULT_FILE, 8)
anders
vastgestelde objResFile = objFSO.CreateTextFile (RESULT_FILE, 2)
beëindig als
objResFile.WriteLine strSubject
als strResult <> "" toen
objResFile.WriteLine strResult
NotifyByEmail strSubject, strResult
anders
objResFile.WriteLine „Geen veranderingen werden gecontroleerd.“
beëindig als
objResFile.Close
beëindig sub
sub NotifyByEmail (strSubject, strResult)
Schemerige ToAddress
Schemerige MessageSubject
Schemerige MessageBody
Schemerige MessageAttachment
Schemerige ol, NS, newMail
ToAddress = „[email protected]“
MessageSubject = strSubject
MessageBody = strResult
Reeks ol = WScript.CreateObject („Outlook.Application“)
Vastgesteld NS = ol.getNamespace („MAPI“)
ns.log op "", valse "", waar,
Reeks newMail = ol.CreateItem (olMailItem)
newMail.Subject = MessageSubject
newMail.Body = MessageBody & vbCrLf
'bevestig de ontvanger, enkel desgevallend…
Plaats myRecipient = ns.CreateRecipient (ToAddress)
myRecipient.Resolve
Als niet myRecipient.Resolved toen
MsgBox „onbekende ontvanger“
Anders
(myRecipient) newMail.Recipients.Add
newMail.Send
Eind als
Reeks ol = niets
eind sub
functie LogUserPropertiesChange (matchLine, lijn)
changeResult = vals
arr1 = verdeel (matchLine, „,“)
arr2 = verdeel (lijn, „,“)
userPropsArr = verdeel (USER_PROPS, „,“)
strResult = „[“ & arr1 (0) & „]“ & vbNewLine
voor i=1 aan UBound (userPropsArr)
'speciale behandeling voor GroupMembership
als userPropsArr (I) = „GroupMembership“ toen
als UBound (arr1) < i="" then="" strResult="strResult">= I en UBound (arr2) >= i toen
als arr1 (I) <> arr2 (I) toen
strLine = userPropsArr (I) & „: “ & vbNewLine
strLine = strLine & „vóór =“ & arr1 (I) & vbNewLine
strLine = strLine & „na =“ & arr2 (I) & vbNewLine
strResult = strResult & strLine & vbNewLine
changeResult = waar
beëindig als
anders
als UBound (arr1) >= i en UBound (arr2) < i="" then="" strLine="userPropsArr(i)">= I toen
strLine = userPropsArr (I) & „: “ & vbNewLine
strLine = strLine & „vóór = Geen Bezit“ & vbNewLine
strLine = strLine & „na =“ & arr2 (I) & vbNewLine
strResult = strResult & strLine & vbNewLine
changeResult = waar
beëindig als
beëindig als
beëindig als
beëindig als
daarna
als changeResult = waar toen
LogUserPropertiesChange = strResult & vbNewLine
anders
LogUserPropertiesChange = ""
beëindig als
beëindig functie
functie FindUserChangeDelta (lijn, prevStateArr)
schemerige gebruiker, matchLine
de gebruiker = verdeelde (lijn, „,“) (0)
voor elke prevLine in prevStateArr
als Versiering (prevLine) <> "" toen
als Spleet (prevLine, „,“) (0) = gebruiker toen
matchLine = prevLine
uitgang voor
beëindig als
beëindig als
daarna
FindUserChangeDelta = matchLine
eind functie
sub LogUsersProps
op fout hervat daarna
verduister userProp
plaats objLog = objFSO.CreateTextFile (REPOSITORY_FILE, 2)
objLog.WriteLine USER_PROPS
voor elke objKey in usersPropsDict
userProp = objKey
voor elke objInnerKey in usersPropsDict (objKey)
userProp = userProp & „,“ & usersPropsDict (objKey) (objInnerKey)
daarna
objLog.WriteLine userProp
daarna
objLog.Close
eind sub
sub GetUsersProps
schemerige gebruiker
Const ADS_SCOPE_SUBTREE = 2
Vastgestelde objConnection = CreateObject („ADODB.Connection“)
Reeks objCommand = CreateObject („ADODB.Command“)
objConnection.Provider = „ADsDSOObject“
objConnection.Open de „Actieve Leverancier van de Folder“
Vastgesteld objCommand.ActiveConnection = objConnection
objCommand.Properties (de „Grootte van de Pagina“) = 1000
objCommand.Properties („Searchscope“) = ADS_SCOPE_SUBTREE
Reeks objRootDSE = GetObject („LDAP: //RootDSE“)
strDNSDomain = objRootDSE.Get („defaultNamingContext“)
als ROOT_OU <> "" toen
ldaproot = „LDAP: /“ & ROOT_OU & „,“ & strDNSDomain
anders
ldaproot = „LDAP: /“ & strDNSDomain
beëindig als
objCommand.CommandText = „SELECTEER distinguishedName, sAMAccountName VAN „“ & ldaproot & „“ WAAR objectCategory='user'"
Plaats objRecordSet = objCommand.Execute
Terwijl niet objRecordSet.EOF
gebruiker = objRecordSet.Fields („sAMAccountName“). Waarde
als usersPropsDict.Exists (gebruiker) = vals toen
op fout hervat daarna
Plaats propsDict = CreateObject („Scripting.Dictionary“)
usersPropsDict.Add gebruiker, propsDict
Vastgestelde ObjUser = GetObject („LDAP: /“ & objRecordSet.Fields („distinguishedName“). Waarde)
propsDict.Add „AccountDisabled“, ObjUser.AccountDisabled
propsDict.Add „AccountExpirationDate“, ObjUser.AccountExpirationDate
beëindig als
objRecordSet.MoveNext
WEnd
getUsersGroups
eind sub
sub getUsersGroups
schemerige groep
Const ADS_SCOPE_SUBTREE = 2
Vastgestelde objConnection = CreateObject („ADODB.Connection“)
Reeks objCommand = CreateObject („ADODB.Command“)
objConnection.Provider = „ADsDSOObject“
objConnection.Open de „Actieve Leverancier van de Folder“
Vastgesteld objCommand.ActiveConnection = objConnection
objCommand.Properties (de „Grootte van de Pagina“) = 1000
objCommand.Properties („Searchscope“) = ADS_SCOPE_SUBTREE
Reeks objRootDSE = GetObject („LDAP: //RootDSE“)
strDNSDomain = objRootDSE.Get („defaultNamingContext“)
als ROOT_OU <> "" toen
ldaproot = „LDAP: /“ & ROOT_OU & „,“ & strDNSDomain
anders
ldaproot = „LDAP: /“ & strDNSDomain
beëindig als
objCommand.CommandText = „SELECTEER distinguishedName, sAMAccountName VAN „“ & ldaproot & „“ WAAR objectCategory='group'"
Plaats objRecordSet = objCommand.Execute
Terwijl niet objRecordSet.EOF
groep = objRecordSet.Fields („distinguishedName“). Waarde
Vastgestelde ObjGroup = GetObject („LDAP: /“ & groep)
voor elke objMember in objGroup.Members
als usersPropsDict.Exists (objmember.samaccountname) toen
als usersPropsDict.Item (objmember.samaccountname). Bestaat dan („groupMembership“)
groupMembership = usersPropsDict.Item (objmember.samaccountname). Punt („groupMembership“)
groupMembership = groupMembership & „; “ & objGroup.samaccountname
usersPropsDict.Item (objmember.samaccountname). Punt („groupMembership“) = groupMembership
anders
usersPropsDict.Item (objmember.samaccountname). Voeg „groupMembership toe“, objGroup.samaccountname
beëindig als
beëindig als
daarna
objRecordSet.MoveNext
WEnd
eind sub
|