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 = “nombre, AccountDisabled, AccountExpirationDate, GroupMembership”
Fijar el usersPropsDict = CreateObject (“Scripting.Dictionary”)
fijar el objFSO = el createobject (“scripting.filesystemobject”)
GetUsersProps
si objFSO.FileExists (REPOSITORY_FILE) entonces
objFSO.CopyFile REPOSITORY_FILE, REPOSITORY_COMPARE_FILE, VERDAD
LogUsersProps
CheckUserChanges
LogUsersProps
terminar si
wscript.echo “terminan”
función CheckUsersStatus (prevStateArr, curStateArr)
strResult dévil
Fijar el usersDict = CreateObject (“Scripting.Dictionary”)
para cada línea en prevStateArr
si "" del ajuste (línea <> ) entonces
el usuario = partió (línea, “, ") (0)
usuario de usersDict.Add, 0
terminar si
después
para cada línea en curStateArr
si "" del ajuste (línea <> ) entonces
el usuario = partió (línea, “, ") (0)
si usersDict.Exists (usuario) entonces
usersDict.Item (usuario) = 2
usuario de usersDict.Add, 1
terminar si
terminar si
después
para cada llave en usersDict
seleccionar el caso usersDict.Item (la llave)
caso 0: suprimieron al 'usuario
suprimieron el strResult = el strResult y al “usuario [” y la llave y “]” y vbNewLine
caso 1: 'nuevo usuario creado
crearon el strResult = el strResult y al “nuevo usuario [” y la llave y “]” y vbNewLine
caso 2: no cambiaron al 'usuario
extremo selecto
después
CheckUsersStatus = strResult
función del final
CheckUserChanges secundario
curStateData = objFSO.OpenTextFile (REPOSITORY_FILE, 1).ReadAll
prevStateData = objFSO.OpenTextFile (REPOSITORY_COMPARE_FILE, 1).ReadAll
el curStateArr = partió (curStateData, el vbNewLine)
el prevStateArr = partió (prevStateData, el vbNewLine)
el strSubject = “usuario del ANUNCIO cambia el registro del resultado -” y fecha y ““y hora
strResult = CheckUsersStatus (prevStateArr, curStateArr)
para i=1 a UBound (curStateArr)
línea = curStateArr (i)
si InStr (el prevStateData, ajusta (línea) y vbNewLine) = 0 entonces
matchLine = FindUserChangeDelta (línea, prevStateArr)
si "" <> del matchLine entonces
changeResult = LogUserPropertiesChange (matchLine, línea)
si "" <> del changeResult entonces
strResult = strResult y changeResult
terminar si
terminar si
terminar si
después
si objFSO.FileExists (RESULT_FILE) entonces
objResFile determinado = objFSO.OpenTextFile (RESULT_FILE, 8)
objResFile determinado = objFSO.CreateTextFile (RESULT_FILE, 2)
terminar si
strSubject de objResFile.WriteLine
si "" <> del strResult entonces
strResult de objResFile.WriteLine
strSubject de NotifyByEmail, strResult
objResFile.WriteLine “ningunos cambios fueron supervisados.”
terminar si
objResFile.Close
terminar el submarino
sub NotifyByEmail (strSubject, el strResult)
Amortiguar ToAddress
Amortiguar MessageSubject
Amortiguar MessageBody
Amortiguar MessageAttachment
Amortiguar el ol, ns, newMail
ToAddress = “[email protected]”
MessageSubject = strSubject
MessageBody = strResult
Fijar el ol = WScript.CreateObject (“Outlook.Application”)
Fijar ns = ol.getNamespace (“MAPI”)
ns.log en el "", "", verdad, falso
Fijar el newMail = ol.CreateItem (el olMailItem)
newMail.Subject = MessageSubject
newMail.Body = MessageBody y vbCrLf
'validar a recipiente, apenas en caso…
Fijar myRecipient = ns.CreateRecipient (ToAddress)
myRecipient.Resolve
Si no myRecipient.Resolved entonces
MsgBox “recipiente desconocido”
newMail.Recipients.Add (myRecipient)
newMail.Send
Terminar si
Fijar el ol = nada
terminar el submarino
función LogUserPropertiesChange (matchLine, línea)
changeResult = falso
arr1 = partió (matchLine, “, ")
arr2 = partió (línea, “, ")
el userPropsArr = partió (USER_PROPS, “, ")
strResult = “[” y arr1 (0) y “]” y vbNewLine
para i=1 a UBound (userPropsArr)
'dirección especial para GroupMembership
si userPropsArr (i) = “GroupMembership” entonces
si UBound (arr1) < i="" then="" strResult="strResult">= i y >= i de UBound (arr2) entonces
si arr1 (i) <> arr2 (i) entonces
strLine = userPropsArr (i) y “: ” y vbNewLine
strLine = strLine y “antes =” y arr1 (i) y vbNewLine
strLine = strLine y “después de =” y arr2 (i) y vbNewLine
strResult = strResult y strLine y vbNewLine
el changeResult = verdad
terminar si
si >= i de UBound (arr1) y UBound (arr2) < i="" then="" strLine="userPropsArr(i)">= i entonces
strLine = userPropsArr (i) y “: ” y vbNewLine
strLine = strLine y “antes = ninguna característica” y vbNewLine
strLine = strLine y “después de =” y arr2 (i) y vbNewLine
strResult = strResult y strLine y vbNewLine
el changeResult = verdad
terminar si
terminar si
terminar si
terminar si
después
si el changeResult = entonces verdad
LogUserPropertiesChange = strResult y vbNewLine
LogUserPropertiesChange = ""
terminar si
terminar la función
función FindUserChangeDelta (línea, prevStateArr)
usuario dévil, matchLine
el usuario = partió (línea, “, ") (0)
para cada prevLine en prevStateArr
si "" del ajuste (prevLine <> ) entonces
si fractura (prevLine, “, ") (0) = usuario entonces
matchLine = prevLine
salir para
terminar si
terminar si
después
FindUserChangeDelta = matchLine
función del final
LogUsersProps secundario
en curriculum vitae del error después
userProp dévil
fijar el objLog = objFSO.CreateTextFile (REPOSITORY_FILE, 2)
objLog.WriteLine USER_PROPS
para cada objKey en usersPropsDict
userProp = objKey
para cada objInnerKey en el usersPropsDict (objKey)
userProp = userProp y “,” y usersPropsDict (objKey) (objInnerKey)
después
userProp de objLog.WriteLine
después
objLog.Close
submarino del extremo
GetUsersProps secundario
usuario dévil
Const ADS_SCOPE_SUBTREE = 2
Fijar el objConnection = CreateObject (“ADODB.Connection”)
Fijar el objCommand = CreateObject (“ADODB.Command”)
objConnection.Provider = “ADsDSOObject”
objConnection.Open “abastecedor activo del directorio”
Fijar objCommand.ActiveConnection = objConnection
objCommand.Properties (“tamaño de página”) = 1000
objCommand.Properties (“Searchscope”) = ADS_SCOPE_SUBTREE
Fijar el objRootDSE = GetObject (“LDAP: //RootDSE”)
strDNSDomain = objRootDSE.Get (“defaultNamingContext”)
si "" <> de ROOT_OU entonces
ldaproot = “LDAP: /” y ROOT_OU y “,” y strDNSDomain
ldaproot = “LDAP: /” y strDNSDomain
terminar si
objCommand.CommandText = “distinguishedName SELECTO, sAMAccountName DE “” y ldaproot y “” DONDE objectCategory='user'"
Fijar el objRecordSet = objCommand.Execute
Mientras que no objRecordSet.EOF
usuario = objRecordSet.Fields (“sAMAccountName”). Valor
si usersPropsDict.Exists (usuario) = falso entonces
en curriculum vitae del error después
Fijar el propsDict = CreateObject (“Scripting.Dictionary”)
usuario de usersPropsDict.Add, propsDict
Fijar ObjUser = GetObject (“LDAP: /” y objRecordSet.Fields (“distinguishedName”). Valor)
propsDict.Add “AccountDisabled”, ObjUser.AccountDisabled
propsDict.Add “AccountExpirationDate”, ObjUser.AccountExpirationDate
terminar si
objRecordSet.MoveNext
WEnd
getUsersGroups
submarino del extremo
getUsersGroups secundarios
grupo dévil
Const ADS_SCOPE_SUBTREE = 2
Fijar el objConnection = CreateObject (“ADODB.Connection”)
Fijar el objCommand = CreateObject (“ADODB.Command”)
objConnection.Provider = “ADsDSOObject”
objConnection.Open “abastecedor activo del directorio”
Fijar objCommand.ActiveConnection = objConnection
objCommand.Properties (“tamaño de página”) = 1000
objCommand.Properties (“Searchscope”) = ADS_SCOPE_SUBTREE
Fijar el objRootDSE = GetObject (“LDAP: //RootDSE”)
strDNSDomain = objRootDSE.Get (“defaultNamingContext”)
si "" <> de ROOT_OU entonces
ldaproot = “LDAP: /” y ROOT_OU y “,” y strDNSDomain
ldaproot = “LDAP: /” y strDNSDomain
terminar si
objCommand.CommandText = “distinguishedName SELECTO, sAMAccountName DE “” y ldaproot y “” DONDE objectCategory='group'"
Fijar el objRecordSet = objCommand.Execute
Mientras que no objRecordSet.EOF
grupo = objRecordSet.Fields (“distinguishedName”). Valor
Fijar ObjGroup = GetObject (“LDAP: /” y grupo)
para cada objMember en objGroup.Members
si usersPropsDict.Exists (objmember.samaccountname) entonces
si usersPropsDict.Item (objmember.samaccountname). Entonces existe (“groupMembership”)
groupMembership = usersPropsDict.Item (objmember.samaccountname). Artículo (“groupMembership”)
groupMembership = groupMembership y “; ” y objGroup.samaccountname
usersPropsDict.Item (objmember.samaccountname). Artículo (“groupMembership”) = groupMembership
usersPropsDict.Item (objmember.samaccountname). Agregar el “groupMembership”, objGroup.samaccountname
terminar si
terminar si
después
objRecordSet.MoveNext
WEnd
terminar el submarino
|