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 = “nome, AccountDisabled, AccountExpirationDate, GroupMembership„
Regolare il usersPropsDict = CreateObject (“Scripting.Dictionary„)
regolare il objFSO = il createobject (“scripting.filesystemobject„)
GetUsersProps
se objFSO.FileExists (REPOSITORY_FILE) allora
objFSO.CopyFile REPOSITORY_FILE, REPOSITORY_COMPARE_FILE, ALLINEARE
LogUsersProps
CheckUserChanges
altrimenti
LogUsersProps
concluder se
wscript.echo “completano„
funzione CheckUsersStatus (prevStateArr, curStateArr)
strResult fioco
Regolare il usersDict = CreateObject (“Scripting.Dictionary„)
per ogni linea nel prevStateArr
se "" della disposizione (linea <> ) allora
l'utente = ha spaccato (linea, “, ") (0)
utente di usersDict.Add, 0
concluder se
dopo
per ogni linea nel curStateArr
se "" della disposizione (linea <> ) allora
l'utente = ha spaccato (linea, “, ") (0)
se usersDict.Exists (utente) allora
usersDict.Item (utente) = 2
altrimenti
utente di usersDict.Add, 1
concluder se
concluder se
dopo
per ogni chiave nel usersDict
selezionare il caso usersDict.Item (chiave)
caso 0: 'l'utente è stato cancellato
lo strResult = lo strResult & “l'utente [„ & chiave & “] sono stati cancellati„ & vbNewLine
caso 1: 'nuovo utente generato
lo strResult = lo strResult & “il nuovo utente [„ & chiave & “] sono stati generati„ & vbNewLine
caso 2: 'l'utente non è stato cambiato
estremità prescelta
dopo
CheckUsersStatus = strResult
funzione di conclusione
CheckUserChanges secondario
curStateData = objFSO.OpenTextFile (REPOSITORY_FILE, 1).ReadAll
prevStateData = objFSO.OpenTextFile (REPOSITORY_COMPARE_FILE, 1).ReadAll
il curStateArr = ha spaccato (curStateData, vbNewLine)
il prevStateArr = ha spaccato (prevStateData, vbNewLine)
lo strSubject = “utente dell'ANNUNCIO cambia il ceppo di risultato -„ & data & ““& ora
strResult = CheckUsersStatus (prevStateArr, curStateArr)
per i=1 a UBound (curStateArr)
linea = curStateArr (i)
se InStr (prevStateData, assetta (linea) & vbNewLine) = 0 allora
matchLine = FindUserChangeDelta (linea, prevStateArr)
se "" <> di matchLine allora
changeResult = LogUserPropertiesChange (matchLine, linea)
se "" <> del changeResult allora
strResult = strResult & changeResult
concluder se
concluder se
concluder se
dopo
se objFSO.FileExists (RESULT_FILE) allora
objResFile stabilito = objFSO.OpenTextFile (RESULT_FILE, 8)
altrimenti
objResFile stabilito = objFSO.CreateTextFile (RESULT_FILE, 2)
concluder se
strSubject di objResFile.WriteLine
se "" <> dello strResult allora
strResult di objResFile.WriteLine
strSubject di NotifyByEmail, strResult
altrimenti
objResFile.WriteLine “nessun cambiamenti sono stati controllati.„
concluder se
objResFile.Close
concludere il sommergibile
sub NotifyByEmail (strSubject, strResult)
Oscurare ToAddress
Oscurare MessageSubject
Oscurare MessageBody
Oscurare MessageAttachment
Oscurare il ol, il NS, newMail
ToAddress = “[email protected]„
MessageSubject = strSubject
MessageBody = strResult
Regolare il ol = WScript.CreateObject (“Outlook.Application„)
Regolar NS = ol.getNamespace (“MAPI„)
ns.log su "", "", allineare, falso
Regolare il newMail = ol.CreateItem (olMailItem)
newMail.Subject = MessageSubject
newMail.Body = MessageBody & vbCrLf
'convalidare il destinatario, appena nel caso…
Regolar myRecipient = ns.CreateRecipient (ToAddress)
myRecipient.Resolve
Se non myRecipient.Resolved allora
MsgBox “destinatario sconosciuto„
Altrimenti
newMail.Recipients.Add (myRecipient)
newMail.Send
Concluder se
Regolare il ol = niente
concludere il sommergibile
funzione LogUserPropertiesChange (matchLine, linea)
changeResult = falso
arr1 = ha spaccato (matchLine, “, ")
arr2 = ha spaccato (linea, “, ")
il userPropsArr = ha spaccato (USER_PROPS, “, ")
strResult = “[„ & arr1 (0) & “]„ & vbNewLine
per i=1 a UBound (userPropsArr)
'trattamento speciale per GroupMembership
se userPropsArr (i) = “GroupMembership„ allora
se UBound (arr1) < i="" then="" strResult="strResult">= i e >= i di UBound (arr2) allora
se arr1 (i) <> arr2 (i) allora
strLine = userPropsArr (i) & “: „ & vbNewLine
strLine = strLine & “prima =„ & arr1 (i) & vbNewLine
strLine = strLine & “dopo =„ & arr2 (i) & vbNewLine
strResult = strResult & strLine & vbNewLine
il changeResult = allinea
concluder se
altrimenti
se >= i di UBound (arr1) e UBound (arr2) < i="" then="" strLine="userPropsArr(i)">= i allora
strLine = userPropsArr (i) & “: „ & vbNewLine
strLine = strLine & “prima = nessuna proprietà„ & vbNewLine
strLine = strLine & “dopo =„ & arr2 (i) & vbNewLine
strResult = strResult & strLine & vbNewLine
il changeResult = allinea
concluder se
concluder se
concluder se
concluder se
dopo
se il changeResult = allora allinea
LogUserPropertiesChange = strResult & vbNewLine
altrimenti
LogUserPropertiesChange = ""
concluder se
concludere la funzione
funzione FindUserChangeDelta (linea, prevStateArr)
utente fioco, matchLine
l'utente = ha spaccato (linea, “, ") (0)
per ogni prevLine nel prevStateArr
se "" della disposizione (prevLine <> ) allora
se spaccatura (prevLine, “, ") (0) = utente allora
matchLine = prevLine
uscire per
concluder se
concluder se
dopo
FindUserChangeDelta = matchLine
funzione di conclusione
LogUsersProps secondario
sul riassunto di errore dopo
userProp fioco
regolare il objLog = objFSO.CreateTextFile (REPOSITORY_FILE, 2)
objLog.WriteLine USER_PROPS
per ogni objKey nel usersPropsDict
userProp = objKey
per ogni objInnerKey nel usersPropsDict (objKey)
userProp = userProp & “,„ & usersPropsDict (objKey) (objInnerKey)
dopo
userProp di objLog.WriteLine
dopo
objLog.Close
sommergibile dell'estremità
GetUsersProps secondario
utente fioco
Const ADS_SCOPE_SUBTREE = 2
Regolare il objConnection = CreateObject (“ADODB.Connection„)
Regolare il objCommand = CreateObject (“ADODB.Command„)
objConnection.Provider = “ADsDSOObject„
objConnection.Open “fornitore attivo dell'indice„
Regolar objCommand.ActiveConnection = objConnection
objCommand.Properties (“formato di pagina„) = 1000
objCommand.Properties (“Searchscope„) = ADS_SCOPE_SUBTREE
Regolare il objRootDSE = GetObject (“LDAP: //RootDSE„)
strDNSDomain = objRootDSE.Get (“defaultNamingContext„)
se "" <> di ROOT_OU allora
ldaproot = “LDAP: /„ & ROOT_OU & “,„ & strDNSDomain
altrimenti
ldaproot = “LDAP: /„ & strDNSDomain
concluder se
objCommand.CommandText = “distinguishedName PRESCELTO, sAMAccountName DA “„ & ldaproot & “„ DOVE objectCategory='user'"
Regolare il objRecordSet = objCommand.Execute
Mentre non objRecordSet.EOF
utente = objRecordSet.Fields (“sAMAccountName„). Valore
se usersPropsDict.Exists (utente) = falso allora
sul riassunto di errore dopo
Regolare il propsDict = CreateObject (“Scripting.Dictionary„)
utente di usersPropsDict.Add, propsDict
Regolare ObjUser = GetObject (“LDAP: /„ & objRecordSet.Fields (“distinguishedName„). Valore)
propsDict.Add “AccountDisabled„, ObjUser.AccountDisabled
propsDict.Add “AccountExpirationDate„, ObjUser.AccountExpirationDate
concluder se
objRecordSet.MoveNext
WEnd
getUsersGroups
sommergibile dell'estremità
getUsersGroups secondari
gruppo fioco
Const ADS_SCOPE_SUBTREE = 2
Regolare il objConnection = CreateObject (“ADODB.Connection„)
Regolare il objCommand = CreateObject (“ADODB.Command„)
objConnection.Provider = “ADsDSOObject„
objConnection.Open “fornitore attivo dell'indice„
Regolar objCommand.ActiveConnection = objConnection
objCommand.Properties (“formato di pagina„) = 1000
objCommand.Properties (“Searchscope„) = ADS_SCOPE_SUBTREE
Regolare il objRootDSE = GetObject (“LDAP: //RootDSE„)
strDNSDomain = objRootDSE.Get (“defaultNamingContext„)
se "" <> di ROOT_OU allora
ldaproot = “LDAP: /„ & ROOT_OU & “,„ & strDNSDomain
altrimenti
ldaproot = “LDAP: /„ & strDNSDomain
concluder se
objCommand.CommandText = “distinguishedName PRESCELTO, sAMAccountName DA “„ & ldaproot & “„ DOVE objectCategory='group'"
Regolare il objRecordSet = objCommand.Execute
Mentre non objRecordSet.EOF
gruppo = objRecordSet.Fields (“distinguishedName„). Valore
Regolare ObjGroup = GetObject (“LDAP: /„ & gruppo)
per ogni objMember in objGroup.Members
se usersPropsDict.Exists (objmember.samaccountname) allora
se usersPropsDict.Item (objmember.samaccountname). Allora esiste (“groupMembership„)
groupMembership = usersPropsDict.Item (objmember.samaccountname). Articolo (“groupMembership„)
groupMembership = groupMembership & “; „ & objGroup.samaccountname
usersPropsDict.Item (objmember.samaccountname). Articolo (“groupMembership„) = groupMembership
altrimenti
usersPropsDict.Item (objmember.samaccountname). Aggiungere “il groupMembership„, objGroup.samaccountname
concluder se
concluder se
dopo
objRecordSet.MoveNext
WEnd
concludere il sommergibile
|