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”
objRootDSE dévil, strConfig, objConnection, objCommand, strQuery
objRecordSet dévil, objDC, f, fso
strDNSDomain dévil, objShell, lngBiasKey, lngBias, k, arrstrDCs ()
strDN dévil, dtmDate, objDate, lngDate, objList, strUser
strBase dévil, strFilter, strAttributes, lngHigh, lngLow, logContent
Fijar el objFSO = CreateObject (“Scripting.FileSystemObject”)
Fijar objTextFile = objFSO.CreateTextFile (LOG_FILE, 2, verdades)
'Utilizar un objeto del diccionario para seguir el último lastLogon para cada usuario.
Fijar el objList = CreateObject (“Scripting.Dictionary”)
objList.CompareMode = vbTextCompare
'Obtener el diagonal local de las zonas horarias del registro de la máquina.
Fijar el objShell = CreateObject (“Wscript.Shell”)
lngBiasKey = objShell.RegRead (“HKLM \ sistema \ CurrentControlSet \ control \” _
y “TimeZoneInformation \ ActiveTimeBias”)
Si UCase (TypeName (lngBiasKey)) = “DE LARGO” entonces
lngBias = lngBiasKey
ElseIf UCase (TypeName (lngBiasKey)) = “VARIANTE ()” entonces
lngBias = 0
Para k = 0 a UBound (lngBiasKey)
lngBias = lngBias + (lngBiasKey (k) * 256 ^ k)
Después
Terminar si
'Determinar el contexto de la configuración y el dominio del DNS del objeto de RootDSE.
Fijar el objRootDSE = GetObject (“LDAP: //RootDSE”)
strConfig = objRootDSE.Get (“configurationNamingContext”)
strDNSDomain = objRootDSE.Get (“defaultNamingContext”)
'Utilizar la DIFICULTAD para buscar el directorio activo para el nTDSDSA de ObjectClass.
'Esto identificará todos los reguladores del dominio.
Fijar el objCommand = CreateObject (“ADODB.Command”)
Fijar el objConnection = CreateObject (“ADODB.Connection”)
objConnection.Provider = “ADsDSOObject”
objConnection.Open “abastecedor activo del directorio”
objCommand.ActiveConnection = objConnection
strBase = ""
strFilter = “(objectClass=nTDSDSA)”
strAttributes = “AdsPath”
strQuery = strBase y “; ” y strFilter y “; ” y strAttributes y “; sub-estructura”
objCommand.CommandText = strQuery
objCommand.Properties (“tamaño de página”) = 100
objCommand.Properties (“descanso”) = 60
objCommand.Properties (el “escondrijo resulta”) = falso
Fijar el objRecordSet = objCommand.Execute
'Enumerar los objetos del padre del nTDSDSA de la clase. Ahorrar el regulador del dominio
'AdsPaths en arrstrDCs dinámicos del arsenal.
k = 0
Hacer hasta objRecordSet.EOF
Fijar el objDC = el _
GetObject (GetObject (objRecordSet.Fields (“AdsPath”)). Padre)
arrstrDCs del coto de ReDim (k)
arrstrDCs (k) = objDC.DNSHostName
k = k + 1
objRecordSet.MoveNext
Lazo
'Recuperar la cualidad del lastLogon para cada usuario en cada regulador del dominio.
Para k = 0 a UBound (arrstrDCs)
si "" <> de ROOT_OU entonces
strBase = ""
strBase = ""
terminar si
strFilter = “(y (objectCategory=computer) (objectClass=computer))”
strAttributes = “NC, lastLogon”
strQuery = strBase y “; ” y strFilter y “; ” y _ de los strAttributes
y “; sub-estructura”
objCommand.CommandText = strQuery
En curriculum vitae del error después
Err.Clear
Fijar el objRecordSet = objCommand.Execute
Si Err.Number <> 0 entonces
Err.Clear
En el error 0 indicado
Amortiguar i 'como número entero
En el error 0 indicado
Hacer hasta objRecordSet.EOF
strDN = objRecordSet.Fields (“NC”)
lngDate = objRecordSet.Fields (“lastLogon”)
En curriculum vitae del error después
Err.Clear
Fijar el objDate = el lngDate
Si Err.Number <> 0 entonces
Err.Clear
dtmDate = #1/1/1601#
lngHigh = objDate.HighPart
lngLow = objDate.LowPart
Si objList < 0="" Then="" lngHigh="lngHigh"> del lngLow (strDN) entonces
objList (strDN) = dtmDate
Terminar si
strDN de objList.Add, dtmDate
Terminar si
objRecordSet.MoveNext
Lazo
Terminar si
Después
Para cada strUser en objList
objDate = CDate (objList (strUser))
diffDays = DateDiff (“d”, objDate, fecha)
Si diffDays > DAYS_DIFF después
logContent = logContent y strUser y “; ” y objList (strUser) y vbNewLine
Terminar si
Después
objTextFile.WriteLine logContent
objTextFile.Close
NotifyByEmail “trabaja a máquina la notificación del email de LastLogon”, logContent
objConnection.Close
Fijar el objRootDSE = nada
Fijar el objConnection = nada
Fijar el objCommand = nada
Fijar el objRecordSet = nada
Fijar el objDC = nada
Fijar el objDate = nada
Fijar el objList = nada
Fijar el objShell = nada
MsgBox “hecho”
NotifyByEmail secundario (strSubject, strResult)
ToAddress dévil
MessageSubject dévil
MessageBody dévil
MessageAttachment dévil
myRecipient dévil, olMailItem
Ol dévil, ns, newMail
ToAddress = “[email protected]”
MessageSubject = strSubject
MessageBody = strResult
Fijar el ol = WScript.CreateObject (“Outlook.Application”)
Fijar ns = ol.getNamespace (“MAPI”)
ns.log en el "", "", verdad, falso
Fijar el newMail = ol.CreateItem (el olMailItem)
newMail.Subject = MessageSubject
newMail.Body = MessageBody y vbCrLf
'validar a recipiente, apenas en caso…
Fijar myRecipient = ns.CreateRecipient (ToAddress)
myRecipient.Resolve
Si no myRecipient.Resolved entonces
MsgBox “recipiente desconocido”
newMail.Recipients.Add (myRecipient)
newMail.Send
Terminar si
Fijar el ol = nada
terminar el submarino
|