Вопрос : Любое может дать мне сценарий проверяет каждую группу распределения каждый день раз и получает разницы к архиву.?

Hi,

Anyone может пожалуйста помочь мне с сценарием который можно запланировать для того чтобы проверить OU где я имею 100 из групп распределения и проверить отсчет и имена и спичку члена с более старым архивом и после этого установить изменения самостоятельно к новому архиву. Все изменения группы и членства к file.

Like собирает который потребитель извлекался и который группа потребителю добавил. если никакое изменение после этого не упоминает nothing.

I судимое много дорог но, то не smogл succed через некоторые свободно инструменты и случай logs.

Can любое для того чтобы помочь мне с powershell или vbs script.

regards
Sharath



class= " ясное " >
Related: сценарий " title= " " /Programming/Languages/Q_26414412.html href= Script " qRelatedChild " «class= для того чтобы ревизовать AD.

Ответ : Любое может дать мне сценарий проверяет каждую группу распределения каждый день раз и получает разницы к архиву.?

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 = «имя, 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 = ничего

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

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

	changeResult = ложно
	arr1 = разделило (matchLine, «, ")
	arr2 = разделило (линия, «, ")
	
	userPropsArr = разделило (USER_PROPS, «, ")
	strResult = «[» & arr1 (0) & «]» & vbNewLine
	
	для i=1 к UBound (userPropsArr)
		'специальный регулировать для GroupMembership
		если userPropsArr (I) = «GroupMembership» после этого
			если UBound (arr1) < i="" then="" strResult="strResult">= I и >= 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
			Установите ObjUser = GetObject («LDAP: /» & objRecordSet.Fields («distinguishedName»). Значение)
			propsDict.Add «AccountDisabled», ObjUser.AccountDisabled
			propsDict.Add «AccountExpirationDate», ObjUser.AccountExpirationDate
		закончитесь если
		
		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