Question : N'importe qui peut me donner un manuscrit qui vérifie chaque groupe de distribution chaque jour une fois et obtient les différences à un dossier. ?

Bonjour, le

Anyone peut svp m'aider avec un manuscrit qui peut être programmé pour vérifier une OU où j'ai 100 de groupes de distribution et pour vérifier le compte et les noms et l'allumette de membre avec un dossier plus ancien et puis pour placer seuls les changements à un nouveau dossier. Tous les changements de groupe et d'adhésion à un file.

Like qui groupe quel utilisateur a été enlevé et quel groupe que l'utilisateur a été ajouté. si aucun changement ne mentionnent alors que nothing.

I a essayé beaucoup de manières mais ne pourrait pas succed par l'intermédiaire des certains outils et événement libres logs.

Can n'importe qui pour m'aider avec un powershell ou les vbs script.

regards
Sharath



class= > " clair " de
solutions >Related class= manuscrit de title= " de " /Programming/Languages/Q_26414412.html de href= " de Script de qRelatedChild " de « class= pour auditer AD.

Réponse : N'importe qui peut me donner un manuscrit qui vérifie chaque groupe de distribution chaque jour une fois et obtient les différences à un dossier. ?

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 = « nom, AccountDisabled, AccountExpirationDate, 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 : le 'utilisateur n'a pas été changé
		extrémité choisie
	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 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
			si UBound (arr1) < i="" then="" strResult="strResult">= I 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
			Placer ObjUser = GetObject (« LDAP : / » et objRecordSet.Fields (« distinguishedName »). Valeur)
			propsDict.Add « AccountDisabled », ObjUser.AccountDisabled
			propsDict.Add « AccountExpirationDate », ObjUser.AccountExpirationDate
		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