Вопрос : Сценарий для того чтобы ревизовать ОБЪЯВЛЕНИЕ.

Hi,

Script для того чтобы ревизовать AD.

в настоящее время, котор эти будут

I new
Deleted membership
Disabled
Created captured

Group хочет этих состояние change
capture имени менеджера additions.
Capture двинутое OU от и К OU

Email должно быть послано даже когда внешний вид closed.

Regards
Sharath
class= " ясное " >

Ответ : Сценарий для того чтобы ревизовать ОБЪЯВЛЕНИЕ.

я также исправил черепашка в groupMembership настолько здесь, котор он является следующим:
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 = «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 = «имя, OU родителя, AccountDisabled, AccountExpirationDate, менеджер, GroupMembership»

Установите usersPropsDict = CreateObject («Scripting.Dictionary»)
установите objFSO = createobject («scripting.filesystemobject»)

GetUsersProps

если objFSO.FileExists (REPOSITORY_FILE) после этого
	objFSO.CopyFile REPOSITORY_FILE, REPOSITORY_COMPARE_FILE, ПОИСТИНЕ

	LogUsersProps
	CheckUserChanges
еще
	LogUsersProps
закончитесь если

wscript.echo «завершают»

функция CheckUsersStatus (prevStateArr, curStateArr)

	тусклое strResult
	Установите usersDict = CreateObject («Scripting.Dictionary»)
	
	для каждой линии в prevStateArr
		если "" уравновешивания (линии <> ) после этого
			потребитель = разделил (линия, «, ") (0)
			потребитель usersDict.Add, 0
		закончитесь если
	затем
	
	для каждой линии в curStateArr
		если "" уравновешивания (линии <> ) после этого
			потребитель = разделил (линия, «, ") (0)
			если usersDict.Exists (потребитель) после этого
				usersDict.Item (потребитель) = 2
			еще
				потребитель usersDict.Add, 1
			закончитесь если
		закончитесь если
	затем
	
	для каждого ключа в usersDict
		выберите случай usersDict.Item (ключ) 
			случай 0: 'потребитель был уничтожен
				были уничтожены strResult = strResult & «потребитель [» & ключ & «]» & vbNewLine
			случай 1: 'новый созданный потребитель
				были созданы strResult = strResult & «новый потребитель [» & ключ & «]» & vbNewLine
			случай 2: 'проверите если потребитель был двинут
		закончите отборное
	затем
	CheckUsersStatus = strResult
функция конца

sub CheckUserChanges

	curStateData = objFSO.OpenTextFile (REPOSITORY_FILE, 1).ReadAll
	prevStateData = objFSO.OpenTextFile (REPOSITORY_COMPARE_FILE, 1).ReadAll
	curStateArr = разделило (curStateData, vbNewLine)
	prevStateArr = разделило (prevStateData, vbNewLine)
	
	strSubject = «потребитель ОБЪЯВЛЕНИЯ изменяет журнал результата -» & дату & ««& время
	
	strResult = CheckUsersStatus (prevStateArr, curStateArr)
	для i=1 к UBound (curStateArr)
		линия = curStateArr (I)
		если InStr (prevStateData, уравновешивает (линия) & vbNewLine) = 0 после этого
			matchLine = FindUserChangeDelta (линия, prevStateArr)
			если "" <> matchLine после этого				
				changeResult = LogUserPropertiesChange (matchLine, линия)
				если "" <> changeResult после этого
					strResult = strResult & changeResult
				закончитесь если
			закончитесь если
		закончитесь если
	затем
	
	если objFSO.FileExists (RESULT_FILE) после этого
		установленное objResFile = objFSO.OpenTextFile (RESULT_FILE, 8)
	еще
		установленное objResFile = objFSO.CreateTextFile (RESULT_FILE, 2)
	закончитесь если
	
	strSubject objResFile.WriteLine
	
	если "" <> strResult после этого
		strResult objResFile.WriteLine
		strSubject NotifyByEmail, strResult
	еще
		были проконтролированы objResFile.WriteLine «никакие изменения.»
	закончитесь если
	objResFile.Close
	
закончите подводную лодку

sub NotifyByEmail (strSubject, strResult)
	Затемните ToAddress
	Затемните MessageSubject
	Затемните MessageBody
	Затемните MessageAttachment

	Затемните ol, ns, newMail

	ToAddress = «[email protected]»
	MessageSubject = strSubject
	MessageBody = strResult

	Установите ol = WScript.CreateObject («Outlook.Application»)
	Установите ns = ol.getNamespace («MAPI»)
	ns.log на "", "", поистине, ложном
	Установите newMail = ol.CreateItem (olMailItem)
	newMail.Subject = MessageSubject
	newMail.Body = MessageBody & vbCrLf

	'утвердите получатель, как раз в случае…
	Установите myRecipient = ns.CreateRecipient (ToAddress)
	myRecipient.Resolve
	Если не myRecipient.Resolved после этого
	   MsgBox «неизвестный получатель»
	Еще
	   newMail.Recipients.Add (myRecipient)
	   newMail.Send
	Закончитесь если

	Установите ol = ничего

закончите подводную лодку

функция GetGroupMembershipChanges (I, arr1, arr2)
	changeResult = ложно
	strResult = «GroupMembership: » & vbNewLine
	
	если UBound (arr1) < i="" then="" if="" UBound="">= I после этого
			strResult = strResult & «группы [» & замените (arr2 (I), «; », «, ") & «] добавил» & vbNewLine
			changeResult = true
		закончитесь если
	еще
		если UBound (arr2) < i="" then="" if="" UBound="">= I после этого
				strResult = strResult & «группы [» & замените (arr1 (I), «; », «, ") & «] извлекл» & vbNewLine
				changeResult = true
			закончитесь если
		еще
			arrMembers1 = разделило (arr1 (I), «; ")
			arrMembers2 = разделило (arr2 (I), «; ")
			
			Установите dictmembers2 = CreateObject («Scripting.Dictionary»)
			Установите dictmembers1 = CreateObject («Scripting.Dictionary»)

			для каждого mem2 в arrMembers2
				dictmembers2.Add mem2, ничего
			затем
			
			для каждого mem1 в arrMembers1
				если dictmembers2.Exists (mem1) = ложно после этого 	
					извлеклись strResult = strResult & «группа [» & mem1 & «]» & vbNewLine
					changeResult = true
				закончитесь если
				
				dictmembers1.Add mem1, ничего
			затем
			
			для каждого mem2 в arrMembers2
				если dictmembers1.Exists (mem2) = ложно после этого 	
					были добавлены strResult = strResult & «группа [» & mem2 & «]» & vbNewLine
					changeResult = true
				закончитесь если
			затем
			
		закончитесь если
	закончитесь если
	
	если changeResult = true после этого
		GetGroupMembershipChanges = strResult
	еще
		GetGroupMembershipChanges = ""
	закончитесь если	
закончите функцию

функция LogUserPropertiesChange (matchLine, линия)

	changeResult = ложно
	arr1 = разделило (matchLine, «, ")
	arr2 = разделило (линия, «, ")
	
	userPropsArr = разделило (USER_PROPS, «, ")
	strResult = «[» & arr1 (0) & «]» & vbNewLine
	
	для i=1 к UBound (userPropsArr)
		'специальный регулировать для GroupMembership
		если userPropsArr (I) = «GroupMembership» после этого
			strGroupResult = GetGroupMembershipChanges (I, arr1, arr2)
			если "" <> strGroupResult после этого
				strResult = strResult & strGroupResult & vbNewLine
			закончитесь если
		еще
			если >= iий UBound (arr1) и >= iий UBound (arr2) после этого
				если arr1 (I) <> arr2 (I) после этого
					strLine = userPropsArr (I) & «: » & vbNewLine
					strLine = strLine & «перед =» & arr1 (I) & vbNewLine
					strLine = strLine & «после =» & arr2 (I) & vbNewLine
					
					strResult = strResult & strLine & vbNewLine
					changeResult = true
				закончитесь если
			еще
				если >= iий UBound (arr1) и UBound (arr2) < i="" then="" strLine="userPropsArr(i)">= I после этого
						strLine = userPropsArr (I) & «: » & vbNewLine
						strLine = strLine & «перед = отсутствие свойства» & vbNewLine
						strLine = strLine & «после =» & arr2 (I) & vbNewLine
						
						strResult = strResult & strLine & vbNewLine
						changeResult = true
					закончитесь если
				закончитесь если
			закончитесь если
		закончитесь если
	затем 
	если changeResult = true после этого
		LogUserPropertiesChange = strResult & vbNewLine
	еще
		LogUserPropertiesChange = ""
	закончитесь если
	
закончите функцию

функция FindUserChangeDelta (линия, prevStateArr)

	тусклый потребитель, matchLine
	потребитель = разделил (линия, «, ") (0)
	
	для каждого prevLine в prevStateArr
		если "" уравновешивания (prevLine <> ) после этого
			если разделение (prevLine, «, ") (0) = потребитель после этого
				matchLine = prevLine
				выходите для
			закончитесь если
		закончитесь если
	затем

	FindUserChangeDelta = matchLine
функция конца

sub LogUsersProps
	на резюме ошибки затем
	тусклое userProp
	установите objLog = objFSO.CreateTextFile (REPOSITORY_FILE, 2)
	
	objLog.WriteLine USER_PROPS
	
	для каждого objKey в usersPropsDict
		userProp = objKey
		для каждого objInnerKey в usersPropsDict (objKey)
			userProp = userProp & «,» & usersPropsDict (objKey) (objInnerKey)
		затем
		
		userProp objLog.WriteLine
	затем
	
	objLog.Close
подводная лодка конца

sub GetUsersProps
	тусклый потребитель
	Const ADS_SCOPE_SUBTREE = 2

	Установите objConnection = CreateObject («ADODB.Connection»)
	Установите objCommand =   CreateObject («ADODB.Command»)
	objConnection.Provider = «ADsDSOObject»
	objConnection.Open «активно провайдер директории»
	Установите objCommand.ActiveConnection = objConnection

	objCommand.Properties («размер страницы») = 1000
	objCommand.Properties («Searchscope») = ADS_SCOPE_SUBTREE
	
	Установите objRootDSE = GetObject («LDAP: //RootDSE»)
	strDNSDomain = objRootDSE.Get («defaultNamingContext»)

	если "" <> ROOT_OU после этого
		ldaproot = «LDAP: /» & ROOT_OU & «,» & strDNSDomain
	еще
		ldaproot = «LDAP: /» & strDNSDomain
	закончитесь если
		
	objCommand.CommandText = «ОТБОРНОЕ distinguishedName, sAMAccountName ОТ «» & ldaproot & «» ГДЕ objectCategory='user'"
	
	Установите objRecordSet = objCommand.Execute

	Пока не objRecordSet.EOF
		потребитель = objRecordSet.Fields («sAMAccountName»). Значение
		
		если usersPropsDict.Exists (потребитель) = ложно после этого
			на резюме ошибки затем
			Установите propsDict = CreateObject («Scripting.Dictionary»)
			потребитель usersPropsDict.Add, propsDict
			
			distName = objRecordSet.Fields («distinguishedName»). Значение
			Установите ObjUser = GetObject («LDAP: /» & distName)
			arrPath = разделило (distName, «, ")
			intLength = Len (arrPath (1))
			intNameLength = intLength - 3
			parentOU = право (arrPath (1), intNameLength)
			propsDict.Add «OU родителя», parentOU
			propsDict.Add «AccountDisabled», ObjUser.AccountDisabled
			
			если "" <> ObjUser.AccountExpirationDate после этого
				propsDict.Add «AccountExpirationDate», ObjUser.AccountExpirationDate
			еще
				propsDict.Add «AccountExpirationDate», ""
			закончитесь если
			
			если "" <> ObjUser.Manager после этого
			установите objManager = GetObject («LDAP: /» & ObjUser.Manager)
				propsDict.Add «менеджер», заменяют ть (objManager.Name, «CN=», "")
			еще
				propsDict.Add «менеджер», ""
			закончитесь если
		закончитесь если
		
		objRecordSet.MoveNext
	WEnd 
	
	getUsersGroups	
подводная лодка конца

sub getUsersGroups

	тусклая группа
	Const ADS_SCOPE_SUBTREE = 2

	Установите objConnection = CreateObject («ADODB.Connection»)
	Установите objCommand =   CreateObject («ADODB.Command»)
	objConnection.Provider = «ADsDSOObject»
	objConnection.Open «активно провайдер директории»
	Установите objCommand.ActiveConnection = objConnection

	objCommand.Properties («размер страницы») = 1000
	objCommand.Properties («Searchscope») = ADS_SCOPE_SUBTREE
	
	Установите objRootDSE = GetObject («LDAP: //RootDSE»)
	strDNSDomain = objRootDSE.Get («defaultNamingContext»)

	если "" <> ROOT_OU после этого
		ldaproot = «LDAP: /» & ROOT_OU & «,» & strDNSDomain
	еще
		ldaproot = «LDAP: /» & strDNSDomain
	закончитесь если

	objCommand.CommandText = «ОТБОРНОЕ distinguishedName, sAMAccountName ОТ «» & ldaproot & «» ГДЕ objectCategory='group'"
	
	Установите objRecordSet = objCommand.Execute
	
	Пока не objRecordSet.EOF
		группа = objRecordSet.Fields («distinguishedName»). Значение
		
		Установите ObjGroup = GetObject («LDAP: /» & группа)
		для каждого objMember в objGroup.Members
			если usersPropsDict.Exists (objmember.samaccountname) после этого
				если usersPropsDict.Item, то (objmember.samaccountname). Существует («groupMembership») после этого
					groupMembership = usersPropsDict.Item (objmember.samaccountname). Деталь («groupMembership»)
					groupMembership = groupMembership & «; » & objGroup.samaccountname
					usersPropsDict.Item (objmember.samaccountname). Деталь («groupMembership») = groupMembership
				еще
					usersPropsDict.Item (objmember.samaccountname). Добавьте «groupMembership», objGroup.samaccountname
				закончитесь если
				
			закончитесь если			
		затем
		objRecordSet.MoveNext
	WEnd 
закончите подводную лодку
Другие решения  
  •  Как я добавляю кнопки на форме PDF для того чтобы добавить/извлекаю рядки данных?
  •  Шнур ошибки в блоке задвижки?
  •  сколько вариант сервера SQL на одной машине
  •  Внешний вид 2007 не может архивный файл открытой сети сохраненный
  •  Активно директория DNS записывает вопрос
  •  Отчет о доступа 2010 экспорта к CSV с коллекторами?
  •  Прокладчик OCE 9400 не начинает
  •  как добавить десятичное место в формуле в отчете о кристалла seagate
  •  Windows XP и Мичрософт Оутлоок и проблемы установителя Windows
  •  VB6 к VS2010 - консультации тренировки?
  •  
    programming4us programming4us