Vraag : Iedereen kan me een manuscript geven dat eens elke groep van de Distributie elke dag controleert en de verschillen aan een dossier. krijgt?

Hallo, kan

Anyone me met een manuscript alstublieft helpen dat kan worden gepland om OU te controleren waar ik 100's van distributiegroepen heb en de telling en lidnamen controleer en met een ouder dossier aanpas en dan de veranderingen alleen in een nieuw dossier plaats. Al groep en het lidmaatschap veranderen in een file.

Like die groepeert welke gebruiker werd verwijderd en welke groep die de gebruiker werd toegevoegd. als geen veranderings toen vermelding probeerde nothing.

I vele manieren maar kon niet succed via één of andere vrije hulpmiddelen en Gebeurtenis logs.

Can iedereen me met een powershell of vbs een script.

regards
Sharath



helpt
Related Oplossingen: Script aan controle AD.

Antwoord : Iedereen kan me een manuscript geven dat eens elke groep van de Distributie elke dag controleert en de verschillen aan een dossier. krijgt?

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 = „Naam, AccountDisabled, AccountExpirationDate, 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: de 'gebruiker werd niet veranderd
		uitgezocht eind
	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 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
			als UBound (arr1) < i="" then="" strResult="strResult">= 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
			Vastgestelde ObjUser = GetObject („LDAP: /“ & objRecordSet.Fields („distinguishedName“). Waarde)
			propsDict.Add „AccountDisabled“, ObjUser.AccountDisabled
			propsDict.Add „AccountExpirationDate“, ObjUser.AccountExpirationDate
		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