Frage : Gewünscht: Die eMail verteilen, die auf ihrem basieren, eMail-adressieren

Hallo sind alle,

we bei dem Abweichen, vom groupwise, zum 2010 auszutauschen. Während der Migration sind einige Benutzer auf groupwise und einigem auf Austausch. Unser Hardware-Internet-Zugang nachschickt alle Post vom Internet zu einem einzelnen IP address net (unser gw-Bediener).

We dachte an das Zeigen dieses Hardware-Kastens auf die neuen ex 2010 HT, die Bediener als dieser allen Verkehr für Empfänger - wer nicht Austausch noch eingeschaltet sind - zum gw-System nachschicken kann. Jedoch wenn etwas falsch geht, lösen wir emails.

The, das einfachste Lösung ein System sein, das entscheiden kann, auf der eMail-Adresse (.txt Akte oder etwas), die eMail auf zu verlegen dass gegründet waren.
Is dort etwas, das zu dem kann und nicht zu schwierig ist zu gründen?

Regards
Matthias

Antwort : Gewünscht: Die eMail verteilen, die auf ihrem basieren, eMail-adressieren

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