Questione : Chiunque può darmi uno scritto che controlla una volta ogni gruppo di distribuzione ogni giorno ed ottiene le differenze ad una lima.?

Ciao, il

Anyone può aiutarlo prego con uno scritto che può essere preveduto per controllare un OU in cui ho 100 dei gruppi di distribuzione e per controllare il conteggio ed i nomi ed il fiammifero del membro con una più vecchia lima ed allora per disporre i cambiamenti da solo ad una nuova lima. Tutti i cambiamenti di insieme dei membri e del gruppo ad un file.

Like che raggruppano quale utente è stato rimosso e quale gruppo che l'utente si è aggiunto. se nessun cambiamento allora accenna che nothing.

I ha provato molti sensi ma non potrebbe succed via i certi attrezzi ed evento liberi logs.

Can chiunque per aiutarlo con un powershell o i vbs script.

regards
Sharath



class= > " libero " del
soluzioni >Related class= scritto " del title= " " di /Programming/Languages/Q_26414412.html del href= di Script " del qRelatedChild " “del class= per verificare AD.

Risposta : Chiunque può darmi uno scritto che controlla una volta ogni gruppo di distribuzione ogni giorno ed ottiene le differenze ad una lima.?

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 = “nome, AccountDisabled, AccountExpirationDate, GroupMembership„

Regolare il usersPropsDict = CreateObject (“Scripting.Dictionary„)
regolare il objFSO = il createobject (“scripting.filesystemobject„)

GetUsersProps

se objFSO.FileExists (REPOSITORY_FILE) allora
	objFSO.CopyFile REPOSITORY_FILE, REPOSITORY_COMPARE_FILE, ALLINEARE

	LogUsersProps
	CheckUserChanges
altrimenti
	LogUsersProps
concluder se

wscript.echo “completano„

funzione CheckUsersStatus (prevStateArr, curStateArr)

	strResult fioco
	Regolare il usersDict = CreateObject (“Scripting.Dictionary„)
	
	per ogni linea nel prevStateArr
		se "" della disposizione (linea <> ) allora
			l'utente = ha spaccato (linea, “, ") (0)
			utente di usersDict.Add, 0
		concluder se
	dopo
	
	per ogni linea nel curStateArr
		se "" della disposizione (linea <> ) allora
			l'utente = ha spaccato (linea, “, ") (0)
			se usersDict.Exists (utente) allora
				usersDict.Item (utente) = 2
			altrimenti
				utente di usersDict.Add, 1
			concluder se
		concluder se
	dopo
	
	per ogni chiave nel usersDict
		selezionare il caso usersDict.Item (chiave) 
			caso 0: 'l'utente è stato cancellato
				lo strResult = lo strResult & “l'utente [„ & chiave & “] sono stati cancellati„ & vbNewLine
			caso 1: 'nuovo utente generato
				lo strResult = lo strResult & “il nuovo utente [„ & chiave & “] sono stati generati„ & vbNewLine
			caso 2: 'l'utente non è stato cambiato
		estremità prescelta
	dopo
	CheckUsersStatus = strResult
funzione di conclusione

CheckUserChanges secondario

	curStateData = objFSO.OpenTextFile (REPOSITORY_FILE, 1).ReadAll
	prevStateData = objFSO.OpenTextFile (REPOSITORY_COMPARE_FILE, 1).ReadAll
	il curStateArr = ha spaccato (curStateData, vbNewLine)
	il prevStateArr = ha spaccato (prevStateData, vbNewLine)
	
	lo strSubject = “utente dell'ANNUNCIO cambia il ceppo di risultato -„ & data & ““& ora
	
	strResult = CheckUsersStatus (prevStateArr, curStateArr)
	per i=1 a UBound (curStateArr)
		linea = curStateArr (i)
		se InStr (prevStateData, assetta (linea) & vbNewLine) = 0 allora
			matchLine = FindUserChangeDelta (linea, prevStateArr)
			se "" <> di matchLine allora				
				changeResult = LogUserPropertiesChange (matchLine, linea)
				se "" <> del changeResult allora
					strResult = strResult & changeResult
				concluder se
			concluder se
		concluder se
	dopo
	
	se objFSO.FileExists (RESULT_FILE) allora
		objResFile stabilito = objFSO.OpenTextFile (RESULT_FILE, 8)
	altrimenti
		objResFile stabilito = objFSO.CreateTextFile (RESULT_FILE, 2)
	concluder se
	
	strSubject di objResFile.WriteLine
	
	se "" <> dello strResult allora
		strResult di objResFile.WriteLine
		strSubject di NotifyByEmail, strResult
	altrimenti
		objResFile.WriteLine “nessun cambiamenti sono stati controllati.„
	concluder se
	objResFile.Close
	
concludere il sommergibile

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

	Oscurare il ol, il NS, newMail

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

	Regolare il ol = WScript.CreateObject (“Outlook.Application„)
	Regolar NS = ol.getNamespace (“MAPI„)
	ns.log su "", "", allineare, falso
	Regolare il newMail = ol.CreateItem (olMailItem)
	newMail.Subject = MessageSubject
	newMail.Body = MessageBody & vbCrLf

	'convalidare il destinatario, appena nel caso…
	Regolar myRecipient = ns.CreateRecipient (ToAddress)
	myRecipient.Resolve
	Se non myRecipient.Resolved allora
	   MsgBox “destinatario sconosciuto„
	Altrimenti
	   newMail.Recipients.Add (myRecipient)
	   newMail.Send
	Concluder se

	Regolare il ol = niente

concludere il sommergibile

funzione LogUserPropertiesChange (matchLine, linea)

	changeResult = falso
	arr1 = ha spaccato (matchLine, “, ")
	arr2 = ha spaccato (linea, “, ")
	
	il userPropsArr = ha spaccato (USER_PROPS, “, ")
	strResult = “[„ & arr1 (0) & “]„ & vbNewLine
	
	per i=1 a UBound (userPropsArr)
		'trattamento speciale per GroupMembership
		se userPropsArr (i) = “GroupMembership„ allora
			se UBound (arr1) < i="" then="" strResult="strResult">= i e >= i di UBound (arr2) allora
				se arr1 (i) <> arr2 (i) allora
					strLine = userPropsArr (i) & “: „ & vbNewLine
					strLine = strLine & “prima =„ & arr1 (i) & vbNewLine
					strLine = strLine & “dopo =„ & arr2 (i) & vbNewLine
					
					strResult = strResult & strLine & vbNewLine
					il changeResult = allinea
				concluder se
			altrimenti
				se >= i di UBound (arr1) e UBound (arr2) < i="" then="" strLine="userPropsArr(i)">= i allora
						strLine = userPropsArr (i) & “: „ & vbNewLine
						strLine = strLine & “prima = nessuna proprietà„ & vbNewLine
						strLine = strLine & “dopo =„ & arr2 (i) & vbNewLine
						
						strResult = strResult & strLine & vbNewLine
						il changeResult = allinea
					concluder se
				concluder se
			concluder se
		concluder se
	dopo 
	se il changeResult = allora allinea
		LogUserPropertiesChange = strResult & vbNewLine
	altrimenti
		LogUserPropertiesChange = ""
	concluder se
	
concludere la funzione

funzione FindUserChangeDelta (linea, prevStateArr)

	utente fioco, matchLine
	l'utente = ha spaccato (linea, “, ") (0)
	
	per ogni prevLine nel prevStateArr
		se "" della disposizione (prevLine <> ) allora
			se spaccatura (prevLine, “, ") (0) = utente allora
				matchLine = prevLine
				uscire per
			concluder se
		concluder se
	dopo

	FindUserChangeDelta = matchLine
funzione di conclusione

LogUsersProps secondario
	sul riassunto di errore dopo
	userProp fioco
	regolare il objLog = objFSO.CreateTextFile (REPOSITORY_FILE, 2)
	
	objLog.WriteLine USER_PROPS
	
	per ogni objKey nel usersPropsDict
		userProp = objKey
		per ogni objInnerKey nel usersPropsDict (objKey)
			userProp = userProp & “,„ & usersPropsDict (objKey) (objInnerKey)
		dopo
		
		userProp di objLog.WriteLine
	dopo
	
	objLog.Close
sommergibile dell'estremità

GetUsersProps secondario
	utente fioco
	Const ADS_SCOPE_SUBTREE = 2

	Regolare il objConnection = CreateObject (“ADODB.Connection„)
	Regolare il objCommand =   CreateObject (“ADODB.Command„)
	objConnection.Provider = “ADsDSOObject„
	objConnection.Open “fornitore attivo dell'indice„
	Regolar objCommand.ActiveConnection = objConnection

	objCommand.Properties (“formato di pagina„) = 1000
	objCommand.Properties (“Searchscope„) = ADS_SCOPE_SUBTREE
	
	Regolare il objRootDSE = GetObject (“LDAP: //RootDSE„)
	strDNSDomain = objRootDSE.Get (“defaultNamingContext„)

	se "" <> di ROOT_OU allora
		ldaproot = “LDAP: /„ & ROOT_OU & “,„ & strDNSDomain
	altrimenti
		ldaproot = “LDAP: /„ & strDNSDomain
	concluder se
		
	objCommand.CommandText = “distinguishedName PRESCELTO, sAMAccountName DA “„ & ldaproot & “„ DOVE objectCategory='user'"
	
	Regolare il objRecordSet = objCommand.Execute

	Mentre non objRecordSet.EOF
		utente = objRecordSet.Fields (“sAMAccountName„). Valore
		
		se usersPropsDict.Exists (utente) = falso allora
			sul riassunto di errore dopo
			Regolare il propsDict = CreateObject (“Scripting.Dictionary„)
			utente di usersPropsDict.Add, propsDict
			Regolare ObjUser = GetObject (“LDAP: /„ & objRecordSet.Fields (“distinguishedName„). Valore)
			propsDict.Add “AccountDisabled„, ObjUser.AccountDisabled
			propsDict.Add “AccountExpirationDate„, ObjUser.AccountExpirationDate
		concluder se
		
		objRecordSet.MoveNext
	WEnd 
	
	getUsersGroups
sommergibile dell'estremità

getUsersGroups secondari

	gruppo fioco
	Const ADS_SCOPE_SUBTREE = 2

	Regolare il objConnection = CreateObject (“ADODB.Connection„)
	Regolare il objCommand =   CreateObject (“ADODB.Command„)
	objConnection.Provider = “ADsDSOObject„
	objConnection.Open “fornitore attivo dell'indice„
	Regolar objCommand.ActiveConnection = objConnection

	objCommand.Properties (“formato di pagina„) = 1000
	objCommand.Properties (“Searchscope„) = ADS_SCOPE_SUBTREE
	
	Regolare il objRootDSE = GetObject (“LDAP: //RootDSE„)
	strDNSDomain = objRootDSE.Get (“defaultNamingContext„)

	se "" <> di ROOT_OU allora
		ldaproot = “LDAP: /„ & ROOT_OU & “,„ & strDNSDomain
	altrimenti
		ldaproot = “LDAP: /„ & strDNSDomain
	concluder se

	objCommand.CommandText = “distinguishedName PRESCELTO, sAMAccountName DA “„ & ldaproot & “„ DOVE objectCategory='group'"
	
	Regolare il objRecordSet = objCommand.Execute
	
	Mentre non objRecordSet.EOF
		gruppo = objRecordSet.Fields (“distinguishedName„). Valore
		
		Regolare ObjGroup = GetObject (“LDAP: /„ & gruppo)
		per ogni objMember in objGroup.Members
			se usersPropsDict.Exists (objmember.samaccountname) allora
				se usersPropsDict.Item (objmember.samaccountname). Allora esiste (“groupMembership„)
					groupMembership = usersPropsDict.Item (objmember.samaccountname). Articolo (“groupMembership„)
					groupMembership = groupMembership & “; „ & objGroup.samaccountname
					usersPropsDict.Item (objmember.samaccountname). Articolo (“groupMembership„) = groupMembership
				altrimenti
					usersPropsDict.Item (objmember.samaccountname). Aggiungere “il groupMembership„, objGroup.samaccountname
				concluder se
				
			concluder se			
		dopo
		objRecordSet.MoveNext
	WEnd 
concludere il sommergibile
Altre soluzioni  
 
programming4us programming4us