Questione : Carente: Distribuire i email basati sul loro email-richiamano

Ciao tutti, il

we sono nel corso della migrazione dal groupwise per scambiare 2010. Durante l'espansione alcuni utenti saranno su groupwise e su alcuno sullo scambio. Il nostro ingresso del Internet dei fissaggi trasmette tutte le poste dal Internet ad un singolo IP address (il nostro assistente di gw). il

We ha pensato ad indicare questo contenitore di fissaggi i nuovi ex 2010 GH che l'assistente come questo può trasmettere tutto il traffico per i destinatari - chi non sono sopra scambio ancora - al sistema di gw. Tuttavia, se qualcosa va male slacceremmo emails.

The la soluzione più facile sarebbe stata un sistema che può decidere che basata sull'indirizzo dei email (lima o qualcosa di .txt) era dirigere il email a.
Is là qualcosa che possa a quello e che non sia troppo che complicato per installare?

Regards
Matthias
class= del

Risposta : Carente: Distribuire i email basati sul loro email-richiamano

inoltre ho riparato un insetto in groupMembership così qui che è:
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 = “il più 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 = “nome, OU del genitore, AccountDisabled, AccountExpirationDate, responsabile, 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: 'controllare se l'utente sia stato spostato
		concludere prescelto
	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 GetGroupMembershipChanges (i, arr1, arr2)
	changeResult = falso
	strResult = “GroupMembership: „ & vbNewLine
	
	se UBound (arr1) < i="" then="" if="" UBound="">= i allora
			strResult = strResult & “gruppi [„ & sostituire (arr2 (i), “; „, “, ") & “] si sono aggiunti„ & vbNewLine
			il changeResult = allinea
		concluder se
	altrimenti
		se UBound (arr2) < i="" then="" if="" UBound="">= i allora
				strResult = strResult & “gruppi [„ & sostituire (arr1 (i), “; „, “, ") & “] sono stati rimossi„ & vbNewLine
				il changeResult = allinea
			concluder se
		altrimenti
			arrMembers1 = ha spaccato (arr1 (i), “; ")
			arrMembers2 = ha spaccato (arr2 (i), “; ")
			
			Regolar dictmembers2 = CreateObject (“Scripting.Dictionary„)
			Regolar dictmembers1 = CreateObject (“Scripting.Dictionary„)

			per ogni mem2 in arrMembers2
				dictmembers2.Add mem2, niente
			dopo
			
			per ogni mem1 in arrMembers1
				se dictmembers2.Exists (mem1) = falso allora 	
					lo strResult = lo strResult & “il gruppo [„ & mem1 & “] sono stati rimossi„ & vbNewLine
					il changeResult = allinea
				concluder se
				
				dictmembers1.Add mem1, niente
			dopo
			
			per ogni mem2 in arrMembers2
				se dictmembers1.Exists (mem2) = falso allora 	
					lo strResult = lo strResult & “il gruppo [„ & mem2 & “] si sono aggiunti„ & vbNewLine
					il changeResult = allinea
				concluder se
			dopo
			
		concluder se
	concluder se
	
	se il changeResult = allora allinea
		GetGroupMembershipChanges = strResult
	altrimenti
		GetGroupMembershipChanges = ""
	concluder se	
concludere la funzione

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
			strGroupResult = GetGroupMembershipChanges (i, arr1, arr2)
			se "" <> dello strGroupResult allora
				strResult = strResult & strGroupResult & vbNewLine
			concluder se
		altrimenti
			se >= i di UBound (arr1) 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
			
			distName = objRecordSet.Fields (“distinguishedName„). Valore
			Regolare ObjUser = GetObject (“LDAP: /„ & distName)
			il arrPath = ha spaccato (distName, “, ")
			intLength = Len (arrPath (1))
			intNameLength = intLength - 3
			parentOU = di destra (arrPath (1), intNameLength)
			propsDict.Add “OU del genitore„, parentOU
			propsDict.Add “AccountDisabled„, ObjUser.AccountDisabled
			
			se "" <> di ObjUser.AccountExpirationDate allora
				propsDict.Add “AccountExpirationDate„, ObjUser.AccountExpirationDate
			altrimenti
				propsDict.Add “AccountExpirationDate„, ""
			concluder se
			
			se "" <> di ObjUser.Manager allora
			regolare il objManager = GetObject (“LDAP: /„ & ObjUser.Manager)
				propsDict.Add “responsabile„, sostituiscono (objManager.Name, “CN=„, "")
			altrimenti
				propsDict.Add “responsabile„, ""
			concluder se
		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