Cuestión : Escritura para revisar el ANUNCIO.

Hola, el

Script para revisar AD.

que éstos son actualmente el

I del new
Deleted del membership
Disabled
Created del captured

Group quiere estos estado movido OU del change
capture del nombre del encargado de additions.
Capture de y a OU

Email tiene que ser enviado incluso cuando la perspectiva closed.

Regards
Sharath
class= > " claro " del
soluciones >Related class= ¿el href= " /Programming/Languages/Q_26409483.html " title= " cualquier persona del Anyone " qRelatedParent " puede darme una escritura que compruebe a cada grupo de la distribución cada día una vez y consiga el th…

Respuesta : Escritura para revisar el ANUNCIO.

también fijé un insecto en groupMembership tan aquí que está:
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 = “el más 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 = “nombre, OU del padre, AccountDisabled, AccountExpirationDate, encargado, 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: 'comprobar si movieron al usuario
		terminar 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 GetGroupMembershipChanges (i, arr1, arr2)
	changeResult = falso
	strResult = “GroupMembership: ” y vbNewLine
	
	si UBound (arr1) < i="" then="" if="" UBound="">= i entonces
			strResult = strResult y “grupos [” y substituir (arr2 (i), “; ”, “, ") y “] fueron agregados” y vbNewLine
			el changeResult = verdad
		terminar si
	
		si UBound (arr2) < i="" then="" if="" UBound="">= i entonces
				strResult = strResult y “grupos [” y substituir (arr1 (i), “; ”, “, ") y “] fueron quitados” y vbNewLine
				el changeResult = verdad
			terminar si
		
			arrMembers1 = partió (arr1 (i), “; ")
			arrMembers2 = partió (arr2 (i), “; ")
			
			Fijar dictmembers2 = CreateObject (“Scripting.Dictionary”)
			Fijar dictmembers1 = CreateObject (“Scripting.Dictionary”)

			para cada mem2 en arrMembers2
				dictmembers2.Add mem2, nada
			después
			
			para cada mem1 en arrMembers1
				si dictmembers2.Exists (mem1) = falso entonces 	
					quitaron el strResult = el strResult y al “grupo [” y mem1 y “]” y vbNewLine
					el changeResult = verdad
				terminar si
				
				dictmembers1.Add mem1, nada
			después
			
			para cada mem2 en arrMembers2
				si dictmembers1.Exists (mem2) = falso entonces 	
					agregaron el strResult = el strResult y al “grupo [” y mem2 y “]” y vbNewLine
					el changeResult = verdad
				terminar si
			después
			
		terminar si
	terminar si
	
	si el changeResult = entonces verdad
		GetGroupMembershipChanges = strResult
	
		GetGroupMembershipChanges = ""
	terminar si	
terminar la función

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
			strGroupResult = GetGroupMembershipChanges (i, arr1, arr2)
			si "" <> del strGroupResult entonces
				strResult = strResult y strGroupResult y vbNewLine
			terminar si
		
			si >= i de UBound (arr1) 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
			
			distName = objRecordSet.Fields (“distinguishedName”). Valor
			Fijar ObjUser = GetObject (“LDAP: /” y distName)
			el arrPath = partió (distName, “, ")
			intLength = Len (arrPath (1))
			intNameLength = intLength - 3
			parentOU = derecho (arrPath (1), intNameLength)
			propsDict.Add “OU del padre”, parentOU
			propsDict.Add “AccountDisabled”, ObjUser.AccountDisabled
			
			si "" <> de ObjUser.AccountExpirationDate entonces
				propsDict.Add “AccountExpirationDate”, ObjUser.AccountExpirationDate
			
				propsDict.Add “AccountExpirationDate”, ""
			terminar si
			
			si "" <> de ObjUser.Manager entonces
			fijar el objManager = GetObject (“LDAP: /” y ObjUser.Manager)
				propsDict.Add “encargado”, substituyen (objManager.Name, “CN=”, el "")
			
				propsDict.Add “encargado”, ""
			terminar si
		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
Otras soluciones  
 
programming4us programming4us