Vraag : Manuscript aan controleADVERTENTIE.

Hallo, wil

Script aan controle AD.

momenteel dit captured

Group membership
Disabled
Created new
Deleted

I zijn deze additions.
Capture de bewogen status/>capture van de managernaam change

Email worden verzonden zelfs wanneer vooruitzichten closed.

Regards
Sharath

Antwoord : Manuscript aan controleADVERTENTIE.

ik bevestigde ook een insect in groupMembership zo hier het is:
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 = „het meest 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 = „Naam, OU van de Ouder, AccountDisabled, AccountExpirationDate, Manager, 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: 'controleer als de gebruiker werd bewogen
		beëindig uitgezocht
	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 GetGroupMembershipChanges (I, arr1, arr2)
	changeResult = vals
	strResult = „GroupMembership: “ & vbNewLine
	
	als UBound (arr1) < i="" then="" if="" UBound="">= I toen
			strResult = strResult & „Groepen [“ & vervang (arr2 (I), „; “, „,“) & „] werden toegevoegd“ & vbNewLine
			changeResult = waar
		beëindig als
	anders
		als UBound (arr2) < i="" then="" if="" UBound="">= I toen
				strResult = strResult & „Groepen [“ & vervang (arr1 (I), „; “, „,“) & „] werden verwijderd“ & vbNewLine
				changeResult = waar
			beëindig als
		anders
			arrMembers1 = verdeel (arr1 (I), „; “)
			arrMembers2 = verdeel (arr2 (I), „; “)
			
			Vastgesteld dictmembers2 = CreateObject („Scripting.Dictionary“)
			Vastgesteld dictmembers1 = CreateObject („Scripting.Dictionary“)

			voor elke mem2 in arrMembers2
				dictmembers2.Add mem2, niets
			daarna
			
			voor elke mem1 in arrMembers1
				als dictmembers2.Exists (mem1) = vals toen 	
					strResult = strResult & de „Groep [“ & mem1 & „] werden verwijderd“ & vbNewLine
					changeResult = waar
				beëindig als
				
				dictmembers1.Add mem1, niets
			daarna
			
			voor elke mem2 in arrMembers2
				als dictmembers1.Exists (mem2) = vals toen 	
					strResult = strResult & de „Groep [“ & mem2 & „] werden toegevoegd“ & vbNewLine
					changeResult = waar
				beëindig als
			daarna
			
		beëindig als
	beëindig als
	
	als changeResult = waar toen
		GetGroupMembershipChanges = strResult
	anders
		GetGroupMembershipChanges = ""
	beëindig als	
beëindig functie

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
			strGroupResult = GetGroupMembershipChanges (I, arr1, arr2)
			als strGroupResult <> "" toen
				strResult = strResult & strGroupResult & vbNewLine
			beëindig als
		anders
			als UBound (arr1) >= 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
			
			distName = objRecordSet.Fields („distinguishedName“). Waarde
			Vastgestelde ObjUser = GetObject („LDAP: /“ & distName)
			arrPath = verdeel (distName, „,“)
			intLength = Len (arrPath (1))
			intNameLength = intLength - 3
			parentOU = Juist (arrPath (1), intNameLength)
			propsDict.Add „OU van de Ouder“, parentOU
			propsDict.Add „AccountDisabled“, ObjUser.AccountDisabled
			
			als ObjUser.AccountExpirationDate <> "" toen
				propsDict.Add „AccountExpirationDate“, ObjUser.AccountExpirationDate
			anders
				propsDict.Add „AccountExpirationDate“, ""
			beëindig als
			
			als ObjUser.Manager <> "" toen
			reeks objManager = GetObject („LDAP: /“ & ObjUser.Manager)
				propsDict.Add de „Manager“, vervangt (objManager.Name, „CN=“, "")
			anders
				propsDict.Add „Manager“, ""
			beëindig als
		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
Andere oplossingen  
 
programming4us programming4us