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 :
|
const DAYS_DIFF = 10
const ROOT_OU = « cn=computers »
const LOG_FILE = « C:\temp\Last _Logon.log »
Faible objRootDSE, strConfig, objConnection, objCommand, strQuery
Faible objRecordSet, objDC, f, fso
Faible strDNSDomain, objShell, lngBiasKey, lngBias, k, arrstrDCs ()
Faible strDN, dtmDate, objDate, lngDate, objList, strUser
Faible strBase, strFilter, strAttributes, lngHigh, lngLow, logContent
Placer l'objFSO = le CreateObject (« Scripting.FileSystemObject »)
Placer objTextFile = objFSO.CreateTextFile (LOG_FILE, 2, vrais)
'Employer un objet de dictionnaire pour dépister le dernier lastLogon pour chaque utilisateur.
Placer l'objList = le CreateObject (« Scripting.Dictionary »)
objList.CompareMode = vbTextCompare
'Obtenir la polarisation de zone heure locale de l'enregistrement de machine.
Placer l'objShell = le CreateObject (« Wscript.Shell »)
lngBiasKey = objShell.RegRead (« HKLM \ système \ CurrentControlSet \ commande \ » _
et « TimeZoneInformation \ ActiveTimeBias »)
Si UCase (TypeName (lngBiasKey)) = « LONGTEMPS » puis
lngBias = lngBiasKey
ElseIf UCase (TypeName (lngBiasKey)) = « VARIANTE () » puis
lngBias = 0
Pour k = 0 à UBound (lngBiasKey)
lngBias = lngBias + (lngBiasKey (k) * 256 ^ k)
Après
Finir si
'Déterminer le contexte de configuration et le domaine de DNS à partir de l'objet de RootDSE.
Placer l'objRootDSE = le GetObject (« LDAP : //RootDSE »)
strConfig = objRootDSE.Get (« configurationNamingContext »)
strDNSDomain = objRootDSE.Get (« defaultNamingContext »)
'Employer l'AGITATION pour rechercher l'annuaire actif le nTDSDSA d'ObjectClass.
'Ceci identifiera tous les contrôleurs de domaine.
Placer l'objCommand = le CreateObject (« ADODB.Command »)
Placer l'objConnection = le CreateObject (« ADODB.Connection »)
objConnection.Provider = « ADsDSOObject »
objConnection.Open « fournisseur actif d'annuaire »
objCommand.ActiveConnection = objConnection
strBase = ""
strFilter = « (objectClass=nTDSDSA) »
strAttributes = « AdsPath »
strQuery = strBase et « ; » et strFilter et « ; » et strAttributes et « ; sous-arbre »
objCommand.CommandText = strQuery
objCommand.Properties (« taille de page ») = 100
objCommand.Properties (« temps mort ») = 60
objCommand.Properties (la « cachette résulte ») = faux
Placer l'objRecordSet = l'objCommand.Execute
'Énumérer les objets de parent du nTDSDSA de classe. Sauver le contrôleur de domaine
'AdsPaths dans les arrstrDCs dynamiques de rangée.
k = 0
Faire jusqu'à objRecordSet.EOF
Placer l'objDC = le _
GetObject (GetObject (objRecordSet.Fields (« AdsPath »)). Parent)
arrstrDCs de conserve de ReDim (k)
arrstrDCs (k) = objDC.DNSHostName
k = k + 1
objRecordSet.MoveNext
Boucle
'Rechercher l'attribut de lastLogon pour chaque utilisateur sur chaque contrôleur de domaine.
Pour k = 0 à UBound (arrstrDCs)
si "" <> de ROOT_OU alors
strBase = ""
autrement
strBase = ""
finir si
strFilter = « (et (objectCategory=computer) (objectClass=computer)) »
strAttributes = « NC, lastLogon »
strQuery = strBase et « ; » et strFilter et « ; » et _ de strAttributes
et « ; sous-arbre »
objCommand.CommandText = strQuery
Sur le résumé d'erreur après
Err.Clear
Placer l'objRecordSet = l'objCommand.Execute
Si Err.Number <> 0 puis
Err.Clear
Sur l'erreur 0 GoTo
Autrement
Obscurcir I 'comme nombre entier
Sur l'erreur 0 GoTo
Faire jusqu'à objRecordSet.EOF
strDN = objRecordSet.Fields (« NC »)
lngDate = objRecordSet.Fields (« lastLogon »)
Sur le résumé d'erreur après
Err.Clear
Placer l'objDate = le lngDate
Si Err.Number <> 0 puis
Err.Clear
dtmDate = #1/1/1601#
Autrement
lngHigh = objDate.HighPart
lngLow = objDate.LowPart
Si objList < 0="" Then="" lngHigh="lngHigh"> de lngLow (strDN) puis
objList (strDN) = dtmDate
Finir si
Autrement
strDN d'objList.Add, dtmDate
Finir si
objRecordSet.MoveNext
Boucle
Finir si
Après
Pour chaque strUser dans l'objList
objDate = CDate (objList (strUser))
diffDays = DateDiff (« d », objDate, date)
Si diffDays > puis DAYS_DIFF
logContent = logContent et strUser et « ; » et objList (strUser) et vbNewLine
Finir si
Après
objTextFile.WriteLine logContent
objTextFile.Close
NotifyByEmail « usine l'avis d'email de LastLogon », logContent
objConnection.Close
Placer l'objRootDSE = rien
Placer l'objConnection = rien
Placer l'objCommand = rien
Placer l'objRecordSet = rien
Placer l'objDC = rien
Placer l'objDate = rien
Placer l'objList = rien
Placer l'objShell = rien
MsgBox « fait »
NotifyByEmail secondaire (strSubject, strResult)
Faible ToAddress
Faible MessageSubject
Faible MessageBody
Faible MessageAttachment
faible myRecipient, olMailItem
Faible 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
|