Frage : Index, zum der ANZEIGE zu revidieren.

Hallo, wünschen das

Script, zum von AD.

zu revidieren zurzeit, das diese captured

Group membership
Disabled
Created new
Deleted

I sind, diese additions.
Capture Managername change
capture OU verschobenen Status von und muss/>Email geschickt werden OU


Regards
Sharath

Antwort : Index, zum der ANZEIGE zu revidieren.

ich reparierte auch eine Wanze im groupMembership, so hier, das es ist:
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:
6:
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 = „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 = „Name, Elternteil OU, AccountDisabled, AccountExpirationDate, Manager, GroupMembership“

usersPropsDict = CreateObject („Scripting.Dictionary“) einstellen
objFSO = createobject („scripting.filesystemobject“) einstellen

GetUsersProps

wenn objFSO.FileExists (REPOSITORY_FILE) dann
	objFSO.CopyFile REPOSITORY_FILE, REPOSITORY_COMPARE_FILE, ZUTREFFEND

	LogUsersProps
	CheckUserChanges
sonst
	LogUsersProps
beenden wenn

wscript.echo „schließen“ ab

Funktion CheckUsersStatus (prevStateArr, curStateArr)

	schwaches strResult
	usersDict = CreateObject („Scripting.Dictionary“) einstellen
	
	für jede Linie im prevStateArr
		wenn Ordnung (Linie) <> "" dann
			Benutzer = spaltete auf sich (Linie, „, ") (0)
			usersDict.Add Benutzer, 0
		beenden wenn
	zunächst
	
	für jede Linie im curStateArr
		wenn Ordnung (Linie) <> "" dann
			Benutzer = spaltete auf sich (Linie, „, ") (0)
			wenn usersDict.Exists (Benutzer) dann
				usersDict.Item (Benutzer) = 2
			sonst
				usersDict.Add Benutzer, 1
			beenden wenn
		beenden wenn
	zunächst
	
	für jeden Schlüssel im usersDict
		Fall usersDict.Item (Schlüssel) vorwählen 
			Rechtssache 0: 'Benutzer wurde gelöscht
				strResult = strResult u. „Benutzer [“ u. Schlüssel u. „] wurden“ u. vbNewLine gelöscht
			Rechtssache 1: 'neuer hergestellter Benutzer
				strResult = strResult u. „neuer Benutzer [“ u. Schlüssel u. „] wurden“ u. vbNewLine verursacht
			Rechtssache 2: 'überprüfen, ob Benutzer befördert wurde
		auserwähltes beenden
	zunächst
	CheckUsersStatus = strResult
Endenfunktion

VorCheckUserChanges

	curStateData = objFSO.OpenTextFile (REPOSITORY_FILE, 1).ReadAll
	prevStateData = objFSO.OpenTextFile (REPOSITORY_COMPARE_FILE, 1).ReadAll
	curStateArr = spaltete auf sich (curStateData, vbNewLine)
	prevStateArr = spaltete auf sich (prevStateData, vbNewLine)
	
	strSubject = „ANZEIGE Benutzer ändert Resultats-Maschinenbordbuch -“ u. Datum u. „„u. Zeit
	
	strResult = CheckUsersStatus (prevStateArr, curStateArr)
	für i=1 zu UBound (curStateArr)
		Linie = curStateArr (i)
		wenn InStr (prevStateData, trimmen (Linie) u. vbNewLine), = 0 dann
			matchLine = FindUserChangeDelta (Linie, prevStateArr)
			wenn matchLine <> "" dann				
				changeResult = LogUserPropertiesChange (matchLine, Linie)
				wenn changeResult <> "" dann
					strResult = strResult u. changeResult
				beenden wenn
			beenden wenn
		beenden wenn
	zunächst
	
	wenn objFSO.FileExists (RESULT_FILE) dann
		gesetztes objResFile = objFSO.OpenTextFile (RESULT_FILE, 8)
	sonst
		gesetztes objResFile = objFSO.CreateTextFile (RESULT_FILE, 2)
	beenden wenn
	
	objResFile.WriteLine strSubject
	
	wenn strResult <> "" dann
		objResFile.WriteLine strResult
		NotifyByEmail strSubject, strResult
	sonst
		objResFile.WriteLine „keine Änderungen wurden überwacht.“
	beenden wenn
	objResFile.Close
	
Unterseeboot beenden

sub NotifyByEmail (strSubject, strResult)
	ToAddress verdunkeln
	MessageSubject verdunkeln
	MessageBody verdunkeln
	MessageAttachment verdunkeln

	Ol, ns, newMail verdunkeln

	ToAddress = „[email protected]“
	MessageSubject = strSubject
	MessageBody = strResult

	Ol = WScript.CreateObject („Outlook.Application“) einstellen
	Einstellen ns = ol.getNamespace („MAPI“)
	ns.log auf "", "", zutreffend, falsch
	newMail = ol.CreateItem (olMailItem) einstellen
	newMail.Subject = MessageSubject
	newMail.Body = MessageBody u. vbCrLf

	'die Empfänger, gerade im Fall validieren…
	myRecipient einstellen = ns.CreateRecipient (ToAddress)
	myRecipient.Resolve
	Wenn nicht myRecipient.Resolved dann
	   MsgBox „unbekannte Empfänger“
	Sonst
	   newMail.Recipients.Add (myRecipient)
	   newMail.Send
	Beenden wenn

	Ol einstellen = nichts

Unterseeboot beenden

Funktion GetGroupMembershipChanges (i, arr1, arr2)
	changeResult = falsch
	strResult = „GroupMembership: “ u. vbNewLine
	
	wenn UBound (arr1) < i="" then="" if="" UBound="">= i dann
			strResult = strResult u. „Gruppen [“ u. ersetzen (arr2 (i), „; “, „, ") u. „] wurden“ u. vbNewLine hinzugefügt
			changeResult = richten aus
		beenden wenn
	sonst
		wenn UBound (arr2) < i="" then="" if="" UBound="">= i dann
				strResult = strResult u. „Gruppen [“ u. ersetzen (arr1 (i), „; “, „, ") u. „] wurden“ u. vbNewLine entfernt
				changeResult = richten aus
			beenden wenn
		sonst
			arrMembers1 = spaltete auf sich (arr1 (i), „; ")
			arrMembers2 = spaltete auf sich (arr2 (i), „; ")
			
			Einstellen dictmembers2 = CreateObject („Scripting.Dictionary“)
			Einstellen dictmembers1 = CreateObject („Scripting.Dictionary“)

			für jedes mem2 in arrMembers2
				dictmembers2.Add mem2, nichts
			zunächst
			
			für jedes mem1 in arrMembers1
				wenn dictmembers2.Exists (mem1) = falsch dann 	
					strResult = strResult u. „Gruppe [“ u. mem1 u. „] wurden“ u. vbNewLine entfernt
					changeResult = richten aus
				beenden wenn
				
				dictmembers1.Add mem1, nichts
			zunächst
			
			für jedes mem2 in arrMembers2
				wenn dictmembers1.Exists (mem2) = falsch dann 	
					strResult = strResult u. „Gruppe [“ u. mem2 u. „] wurden“ u. vbNewLine addiert
					changeResult = richten aus
				beenden wenn
			zunächst
			
		beenden wenn
	beenden wenn
	
	wenn changeResult = dann ausrichten
		GetGroupMembershipChanges = strResult
	sonst
		GetGroupMembershipChanges = ""
	beenden wenn	
Funktion beenden

Funktion LogUserPropertiesChange (matchLine, Linie)

	changeResult = falsch
	arr1 = spaltete auf sich (matchLine, „, ")
	arr2 = spaltete auf sich (Linie, „, ")
	
	userPropsArr = spaltete auf sich (USER_PROPS, „, ")
	strResult = „[“ u. arr1 (0) u. „]“ u. vbNewLine
	
	für i=1 zu UBound (userPropsArr)
		'spezielle Behandlung für GroupMembership
		wenn userPropsArr (i) = „GroupMembership“ dann
			strGroupResult = GetGroupMembershipChanges (i, arr1, arr2)
			wenn strGroupResult <> "" dann
				strResult = strResult u. strGroupResult u. vbNewLine
			beenden wenn
		sonst
			wenn UBound (arr1) >= I und UBound (arr2) >= I dann
				wenn arr1 (i) <> arr2 (i) dann
					strLine = userPropsArr (i) u. „: “ u. vbNewLine
					strLine = strLine u. „vor =“ u. arr1 (i) u. vbNewLine
					strLine = strLine u. „nach =“ u. arr2 (i) u. vbNewLine
					
					strResult = strResult u. strLine u. vbNewLine
					changeResult = richten aus
				beenden wenn
			sonst
				wenn UBound (arr1) >= I und UBound (arr2) < i="" then="" strLine="userPropsArr(i)">= i dann
						strLine = userPropsArr (i) u. „: “ u. vbNewLine
						strLine = strLine u. „vor = kein Eigentum“ u. vbNewLine
						strLine = strLine u. „nach =“ u. arr2 (i) u. vbNewLine
						
						strResult = strResult u. strLine u. vbNewLine
						changeResult = richten aus
					beenden wenn
				beenden wenn
			beenden wenn
		beenden wenn
	zunächst 
	wenn changeResult = dann ausrichten
		LogUserPropertiesChange = strResult u. vbNewLine
	sonst
		LogUserPropertiesChange = ""
	beenden wenn
	
Funktion beenden

Funktion FindUserChangeDelta (Linie, prevStateArr)

	schwacher Benutzer, matchLine
	Benutzer = spaltete auf sich (Linie, „, ") (0)
	
	für jedes prevLine im prevStateArr
		wenn Ordnung (prevLine) <> "" dann
			wenn Spalte (prevLine, „, ") (0) = Benutzer dann
				matchLine = prevLine
				für herausnehmen
			beenden wenn
		beenden wenn
	zunächst

	FindUserChangeDelta = matchLine
Endenfunktion

VorLogUsersProps
	auf Störungszusammenfassung zunächst
	schwaches userProp
	objLog = objFSO.CreateTextFile (REPOSITORY_FILE, 2) einstellen
	
	objLog.WriteLine USER_PROPS
	
	für jedes objKey im usersPropsDict
		userProp = objKey
		für jedes objInnerKey im usersPropsDict (objKey)
			userProp = userProp u. „,“ u. usersPropsDict (objKey) (objInnerKey)
		zunächst
		
		objLog.WriteLine userProp
	zunächst
	
	objLog.Close
Endenunterseeboot

VorGetUsersProps
	schwacher Benutzer
	Const ADS_SCOPE_SUBTREE = 2

	objConnection = CreateObject („ADODB.Connection“) einstellen
	objCommand = CreateObject   („ADODB.Command“) einstellen
	objConnection.Provider = „ADsDSOObject“
	objConnection.Open „aktiver Verzeichnis-Versorger“
	Einstellen objCommand.ActiveConnection = objConnection

	objCommand.Properties („Seiten-Größe“) = 1000
	objCommand.Properties („Searchscope“) = ADS_SCOPE_SUBTREE
	
	objRootDSE = GetObject einstellen („LDAP: //RootDSE“)
	strDNSDomain = objRootDSE.Get („defaultNamingContext“)

	wenn ROOT_OU <> "" dann
		ldaproot = „LDAP: /“ u. ROOT_OU u. „,“ u. strDNSDomain
	sonst
		ldaproot = „LDAP: /“ u. strDNSDomain
	beenden wenn
		
	objCommand.CommandText = „AUSERWÄHLTES distinguishedName, sAMAccountName VON „“ u. ldaproot u. „“ WO objectCategory='user'"
	
	objRecordSet = objCommand.Execute einstellen

	Während nicht objRecordSet.EOF
		Benutzer = objRecordSet.Fields („sAMAccountName“). Wert
		
		wenn usersPropsDict.Exists (Benutzer) = falsch dann
			auf Störungszusammenfassung zunächst
			propsDict = CreateObject („Scripting.Dictionary“) einstellen
			usersPropsDict.Add Benutzer, propsDict
			
			distName = objRecordSet.Fields („distinguishedName“). Wert
			ObjUser = GetObject einstellen („LDAP: /“ u. distName)
			arrPath = spaltete auf sich (distName, „, ")
			intLength = Len (arrPath (1))
			intNameLength = intLength - 3
			parentOU = recht (arrPath (1), intNameLength)
			propsDict.Add „Elternteil OU“, parentOU
			propsDict.Add „AccountDisabled“, ObjUser.AccountDisabled
			
			wenn ObjUser.AccountExpirationDate <> "" dann
				propsDict.Add „AccountExpirationDate“, ObjUser.AccountExpirationDate
			sonst
				propsDict.Add „AccountExpirationDate“, ""
			beenden wenn
			
			wenn ObjUser.Manager <> "" dann
			objManager = GetObject einstellen („LDAP: /“ u. ObjUser.Manager)
				propsDict.Add „Manager“, ersetzen (objManager.Name, „CN=“, "")
			sonst
				propsDict.Add „Manager“, ""
			beenden wenn
		beenden wenn
		
		objRecordSet.MoveNext
	WEnd 
	
	getUsersGroups	
Endenunterseeboot

VorgetUsersGroups

	schwache Gruppe
	Const ADS_SCOPE_SUBTREE = 2

	objConnection = CreateObject („ADODB.Connection“) einstellen
	objCommand = CreateObject   („ADODB.Command“) einstellen
	objConnection.Provider = „ADsDSOObject“
	objConnection.Open „aktiver Verzeichnis-Versorger“
	Einstellen objCommand.ActiveConnection = objConnection

	objCommand.Properties („Seiten-Größe“) = 1000
	objCommand.Properties („Searchscope“) = ADS_SCOPE_SUBTREE
	
	objRootDSE = GetObject einstellen („LDAP: //RootDSE“)
	strDNSDomain = objRootDSE.Get („defaultNamingContext“)

	wenn ROOT_OU <> "" dann
		ldaproot = „LDAP: /“ u. ROOT_OU u. „,“ u. strDNSDomain
	sonst
		ldaproot = „LDAP: /“ u. strDNSDomain
	beenden wenn

	objCommand.CommandText = „AUSERWÄHLTES distinguishedName, sAMAccountName VON „“ u. ldaproot u. „“ WO objectCategory='group'"
	
	objRecordSet = objCommand.Execute einstellen
	
	Während nicht objRecordSet.EOF
		Gruppe = objRecordSet.Fields („distinguishedName“). Wert
		
		ObjGroup = GetObject einstellen („LDAP: /“ u. Gruppe)
		für jedes objMember in objGroup.Members
			wenn usersPropsDict.Exists (objmember.samaccountname) dann
				wenn usersPropsDict.Item (objmember.samaccountname). Existiert („groupMembership“) dann
					groupMembership = usersPropsDict.Item (objmember.samaccountname). Einzelteil („groupMembership“)
					groupMembership = groupMembership u. „; “ u. objGroup.samaccountname
					usersPropsDict.Item (objmember.samaccountname). Einzelteil („groupMembership“) = groupMembership
				sonst
					usersPropsDict.Item (objmember.samaccountname). „groupMembership“ addieren, objGroup.samaccountname
				beenden wenn
				
			beenden wenn			
		zunächst
		objRecordSet.MoveNext
	WEnd 
Unterseeboot beenden
Weitere Lösungen  
 
programming4us programming4us