Question : Manuscrit pour auditer l'ANNONCE.

Bonjour, le

Script pour auditer AD.

actuellement que ce sont le

I du new
Deleted du membership
Disabled
Created du captured

Group veulent ces le statut déplacé par OU du change
capture de nom de directeur d'additions.
Capture de et à OU

Email doit être envoyé même lorsque les perspectives closed.

Regards
Sharath
class= > " clair " de
solutions >Related class= le href= " /Programming/Languages/Q_26409483.html " title= " n'importe qui de Anyone " qRelatedParent " peut me donner un manuscrit qui vérifie chaque groupe de distribution chaque jour une fois et obtient le Th…

Réponse : Manuscrit pour auditer l'ANNONCE.

j'ai également corrigé un bogue dans le groupMembership tellement ici qu'il est :
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 = « nom, OU de parent, AccountDisabled, AccountExpirationDate, directeur, GroupMembership »

Placer l'usersPropsDict = le CreateObject (« Scripting.Dictionary »)
placer l'objFSO = le createobject (« scripting.filesystemobject »)

GetUsersProps

si objFSO.FileExists (REPOSITORY_FILE) puis
	objFSO.CopyFile REPOSITORY_FILE, REPOSITORY_COMPARE_FILE, VRAI

	LogUsersProps
	CheckUserChanges
autrement
	LogUsersProps
finir si

wscript.echo « accomplissent »

fonction CheckUsersStatus (prevStateArr, curStateArr)

	faible strResult
	Placer l'usersDict = le CreateObject (« Scripting.Dictionary »)
	
	pour chaque ligne dans le prevStateArr
		si "" d'équilibre (ligne <> ) alors
			l'utilisateur = s'est dédoublé (ligne, « , ") (0)
			utilisateur d'usersDict.Add, 0
		finir si
	après
	
	pour chaque ligne dans le curStateArr
		si "" d'équilibre (ligne <> ) alors
			l'utilisateur = s'est dédoublé (ligne, « , ") (0)
			si usersDict.Exists (utilisateur) puis
				usersDict.Item (utilisateur) = 2
			autrement
				utilisateur d'usersDict.Add, 1
			finir si
		finir si
	après
	
	pour chaque clef dans l'usersDict
		choisir le cas usersDict.Item (la clef) 
			affaire 0 : le 'utilisateur a été supprimé
				le strResult = le strResult et le « utilisateur [ » et la clef et « ] ont été supprimés » et vbNewLine
			affaire 1 : 'nouvel utilisateur créé
				le strResult = le strResult et le « nouvel utilisateur [ » et la clef et « ] ont été créés » et vbNewLine
			affaire 2 : 'vérifier si l'utilisateur était déplacé
		finir choisi
	après
	CheckUsersStatus = strResult
fonction de fin

CheckUserChanges secondaire

	curStateData = objFSO.OpenTextFile (REPOSITORY_FILE, 1).ReadAll
	prevStateData = objFSO.OpenTextFile (REPOSITORY_COMPARE_FILE, 1).ReadAll
	le curStateArr = s'est dédoublé (curStateData, vbNewLine)
	le prevStateArr = s'est dédoublé (prevStateData, vbNewLine)
	
	le strSubject = « utilisateur d'ANNONCE change la notation de résultat - » et la date et « « et l'heure
	
	strResult = CheckUsersStatus (prevStateArr, curStateArr)
	pour i=1 à UBound (curStateArr)
		ligne = curStateArr (i)
		s'InStr (le prevStateData, équilibrent (ligne) et vbNewLine) = 0 puis
			matchLine = FindUserChangeDelta (ligne, prevStateArr)
			si "" <> de matchLine alors				
				changeResult = LogUserPropertiesChange (matchLine, ligne)
				si "" <> de changeResult alors
					strResult = strResult et changeResult
				finir si
			finir si
		finir si
	après
	
	si objFSO.FileExists (RESULT_FILE) puis
		objResFile réglé = objFSO.OpenTextFile (RESULT_FILE, 8)
	autrement
		objResFile réglé = objFSO.CreateTextFile (RESULT_FILE, 2)
	finir si
	
	strSubject d'objResFile.WriteLine
	
	si "" <> de strResult alors
		strResult d'objResFile.WriteLine
		strSubject de NotifyByEmail, strResult
	autrement
		objResFile.WriteLine « aucuns changements ont été surveillés. »
	finir si
	objResFile.Close
	
finir le sous-marin

substrater NotifyByEmail (strSubject, strResult)
	Obscurcir ToAddress
	Obscurcir MessageSubject
	Obscurcir MessageBody
	Obscurcir MessageAttachment

	Obscurcir l'ol, NS, newMail

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

	Placer l'ol = le WScript.CreateObject (« Outlook.Application »)
	Placer NS = ol.getNamespace (« MAPI »)
	ns.log sur le "", "", vrai, faux
	Placer le newMail = l'ol.CreateItem (l'olMailItem)
	newMail.Subject = MessageSubject
	newMail.Body = MessageBody et vbCrLf

	'valider le destinataire, juste dans le cas…
	Placer myRecipient = ns.CreateRecipient (ToAddress)
	myRecipient.Resolve
	Sinon myRecipient.Resolved alors
	   MsgBox « destinataire inconnu »
	Autrement
	   newMail.Recipients.Add (myRecipient)
	   newMail.Send
	Finir si

	Placer l'ol = rien

finir le sous-marin

fonction GetGroupMembershipChanges (I, arr1, arr2)
	changeResult = faux
	strResult = « GroupMembership :  » et vbNewLine
	
	si UBound (arr1) < i="" then="" if="" UBound="">= I alors
			strResult = strResult et « groupes [ » et remplacer (arr2 (i), « ;  », « , ") et « ] ont été ajoutés » et vbNewLine
			le changeResult = rectifient
		finir si
	autrement
		si UBound (arr2) < i="" then="" if="" UBound="">= I alors
				strResult = strResult et « groupes [ » et remplacer (arr1 (i), « ;  », « , ") et « ] ont été enlevés » et vbNewLine
				le changeResult = rectifient
			finir si
		autrement
			arrMembers1 = s'est dédoublé (arr1 (i), « ; ")
			arrMembers2 = s'est dédoublé (arr2 (i), « ; ")
			
			Placer dictmembers2 = CreateObject (« Scripting.Dictionary »)
			Placer dictmembers1 = CreateObject (« Scripting.Dictionary »)

			pour chaque mem2 dans arrMembers2
				dictmembers2.Add mem2, rien
			après
			
			pour chaque mem1 dans arrMembers1
				si dictmembers2.Exists (mem1) = faux puis 	
					le strResult = le strResult et le « groupe [ » et les mem1 et « ] ont été enlevés » et vbNewLine
					le changeResult = rectifient
				finir si
				
				dictmembers1.Add mem1, rien
			après
			
			pour chaque mem2 dans arrMembers2
				si dictmembers1.Exists (mem2) = faux puis 	
					le strResult = le strResult et le « groupe [ » et les mem2 et « ] ont été ajoutés » et vbNewLine
					le changeResult = rectifient
				finir si
			après
			
		finir si
	finir si
	
	si le changeResult = rectifient alors
		GetGroupMembershipChanges = strResult
	autrement
		GetGroupMembershipChanges = ""
	finir si	
finir la fonction

fonction LogUserPropertiesChange (matchLine, ligne)

	changeResult = faux
	arr1 = s'est dédoublé (matchLine, « , ")
	arr2 = s'est dédoublé (ligne, « , ")
	
	l'userPropsArr = s'est dédoublé (USER_PROPS, « , ")
	strResult = « [ » et arr1 (0) et « ] » et vbNewLine
	
	pour i=1 à UBound (userPropsArr)
		'manipulation spéciale pour GroupMembership
		si userPropsArr (i) = « GroupMembership » puis
			strGroupResult = GetGroupMembershipChanges (I, arr1, arr2)
			si "" <> de strGroupResult alors
				strResult = strResult et strGroupResult et vbNewLine
			finir si
		autrement
			si >= i d'UBound (arr1) et >= i d'UBound (arr2) puis
				si arr1 (i) <> arr2 (i) alors
					strLine = userPropsArr (i) et « :  » et vbNewLine
					strLine = strLine et « avant = » et arr1 (i) et vbNewLine
					strLine = strLine et « après = » et arr2 (i) et vbNewLine
					
					strResult = strResult et strLine et vbNewLine
					le changeResult = rectifient
				finir si
			autrement
				si >= i d'UBound (arr1) et UBound (arr2) < i="" then="" strLine="userPropsArr(i)">= I alors
						strLine = userPropsArr (i) et « :  » et vbNewLine
						strLine = strLine et « avant = aucune propriété » et vbNewLine
						strLine = strLine et « après = » et arr2 (i) et vbNewLine
						
						strResult = strResult et strLine et vbNewLine
						le changeResult = rectifient
					finir si
				finir si
			finir si
		finir si
	après 
	si le changeResult = rectifient alors
		LogUserPropertiesChange = strResult et vbNewLine
	autrement
		LogUserPropertiesChange = ""
	finir si
	
finir la fonction

fonction FindUserChangeDelta (ligne, prevStateArr)

	faible utilisateur, matchLine
	l'utilisateur = s'est dédoublé (ligne, « , ") (0)
	
	pour chaque prevLine dans le prevStateArr
		si "" d'équilibre (prevLine <> ) alors
			si fente (prevLine, « , ") (0) = utilisateur alors
				matchLine = prevLine
				sortir pour
			finir si
		finir si
	après

	FindUserChangeDelta = matchLine
fonction de fin

LogUsersProps secondaire
	sur le résumé d'erreur après
	faible userProp
	placer l'objLog = l'objFSO.CreateTextFile (REPOSITORY_FILE, 2)
	
	objLog.WriteLine USER_PROPS
	
	pour chaque objKey dans l'usersPropsDict
		userProp = objKey
		pour chaque objInnerKey dans l'usersPropsDict (objKey)
			userProp = userProp et « , » et usersPropsDict (objKey) (objInnerKey)
		après
		
		userProp d'objLog.WriteLine
	après
	
	objLog.Close
sous-marin d'extrémité

GetUsersProps secondaire
	faible utilisateur
	Const ADS_SCOPE_SUBTREE = 2

	Placer l'objConnection = le CreateObject (« ADODB.Connection »)
	Placer l'objCommand =   le CreateObject (« ADODB.Command »)
	objConnection.Provider = « ADsDSOObject »
	objConnection.Open « fournisseur actif d'annuaire »
	Placer objCommand.ActiveConnection = objConnection

	objCommand.Properties (« taille de page ») = 1000
	objCommand.Properties (« Searchscope ») = ADS_SCOPE_SUBTREE
	
	Placer l'objRootDSE = le GetObject (« LDAP : //RootDSE »)
	strDNSDomain = objRootDSE.Get (« defaultNamingContext »)

	si "" <> de ROOT_OU alors
		ldaproot = « LDAP : / » et ROOT_OU et « , » et strDNSDomain
	autrement
		ldaproot = « LDAP : / » et strDNSDomain
	finir si
		
	objCommand.CommandText = « distinguishedName CHOISI, sAMAccountName DE «  » et ldaproot et «  » OÙ objectCategory='user'"
	
	Placer l'objRecordSet = l'objCommand.Execute

	Tandis que pas objRecordSet.EOF
		utilisateur = objRecordSet.Fields (« sAMAccountName »). Valeur
		
		si usersPropsDict.Exists (utilisateur) = faux puis
			sur le résumé d'erreur après
			Placer le propsDict = le CreateObject (« Scripting.Dictionary »)
			utilisateur d'usersPropsDict.Add, propsDict
			
			distName = objRecordSet.Fields (« distinguishedName »). Valeur
			Placer ObjUser = GetObject (« LDAP : / » et distName)
			l'arrPath = s'est dédoublé (distName, « , ")
			intLength = Len (arrPath (1))
			intNameLength = intLength - 3
			parentOU = droit (arrPath (1), intNameLength)
			propsDict.Add « OU de parent », parentOU
			propsDict.Add « AccountDisabled », ObjUser.AccountDisabled
			
			si "" <> d'ObjUser.AccountExpirationDate alors
				propsDict.Add « AccountExpirationDate », ObjUser.AccountExpirationDate
			autrement
				propsDict.Add « AccountExpirationDate », ""
			finir si
			
			si "" <> d'ObjUser.Manager alors
			placer l'objManager = le GetObject (« LDAP : / » et ObjUser.Manager)
				propsDict.Add « directeur », remplacent (objManager.Name, « CN= », le "")
			autrement
				propsDict.Add « directeur », ""
			finir si
		finir si
		
		objRecordSet.MoveNext
	WEnd 
	
	getUsersGroups	
sous-marin d'extrémité

getUsersGroups secondaires

	faible groupe
	Const ADS_SCOPE_SUBTREE = 2

	Placer l'objConnection = le CreateObject (« ADODB.Connection »)
	Placer l'objCommand =   le CreateObject (« ADODB.Command »)
	objConnection.Provider = « ADsDSOObject »
	objConnection.Open « fournisseur actif d'annuaire »
	Placer objCommand.ActiveConnection = objConnection

	objCommand.Properties (« taille de page ») = 1000
	objCommand.Properties (« Searchscope ») = ADS_SCOPE_SUBTREE
	
	Placer l'objRootDSE = le GetObject (« LDAP : //RootDSE »)
	strDNSDomain = objRootDSE.Get (« defaultNamingContext »)

	si "" <> de ROOT_OU alors
		ldaproot = « LDAP : / » et ROOT_OU et « , » et strDNSDomain
	autrement
		ldaproot = « LDAP : / » et strDNSDomain
	finir si

	objCommand.CommandText = « distinguishedName CHOISI, sAMAccountName DE «  » et ldaproot et «  » OÙ objectCategory='group'"
	
	Placer l'objRecordSet = l'objCommand.Execute
	
	Tandis que pas objRecordSet.EOF
		groupe = objRecordSet.Fields (« distinguishedName »). Valeur
		
		Placer ObjGroup = GetObject (« LDAP : / » et groupe)
		pour chaque objMember dans objGroup.Members
			si usersPropsDict.Exists (objmember.samaccountname) puis
				si usersPropsDict.Item (objmember.samaccountname). Existe (« groupMembership ») alors
					groupMembership = usersPropsDict.Item (objmember.samaccountname). Article (« groupMembership »)
					groupMembership = groupMembership et « ;  » et objGroup.samaccountname
					usersPropsDict.Item (objmember.samaccountname). Article (« groupMembership ») = groupMembership
				autrement
					usersPropsDict.Item (objmember.samaccountname). Ajouter le « groupMembership », objGroup.samaccountname
				finir si
				
			finir si			
		après
		objRecordSet.MoveNext
	WEnd 
finir le sous-marin
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us