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 fioco, strConfig, objConnection, objCommand, strQuery
objRecordSet fioco, objDC, f, fso
strDNSDomain fioco, objShell, lngBiasKey, lngBias, K, arrstrDCs ()
strDN fioco, dtmDate, objDate, lngDate, objList, strUser
strBase fioco, strFilter, strAttributes, lngHigh, lngLow, logContent
Regolare il objFSO = CreateObject (“Scripting.FileSystemObject„)
Regolar objTextFile = objFSO.CreateTextFile (LOG_FILE, 2, allineare)
'Usare un oggetto del dizionario per seguire l'ultimo lastLogon per ogni utente.
Regolare il objList = CreateObject (“Scripting.Dictionary„)
objList.CompareMode = vbTextCompare
'Ottenere la polarizzazione locale della fascia oraria dalla registrazione della macchina.
Regolare il objShell = CreateObject (“Wscript.Shell„)
lngBiasKey = objShell.RegRead (“HKLM \ sistema \ CurrentControlSet \ controllo \„ _
& “TimeZoneInformation \ ActiveTimeBias„)
Se UCase (TypeName (lngBiasKey)) = “LUNGAMENTE„ allora
lngBias = lngBiasKey
ElseIf UCase (TypeName (lngBiasKey)) = “VARIANTE ()„ allora
lngBias = 0
Per K = 0 a UBound (lngBiasKey)
lngBias = lngBias + (lngBiasKey (k) * 256 ^ k)
Dopo
Concluder se
'Determinare il contesto di configurazione ed il dominio di DNS dall'oggetto di RootDSE.
Regolare il objRootDSE = GetObject (“LDAP: //RootDSE„)
strConfig = objRootDSE.Get (“configurationNamingContext„)
strDNSDomain = objRootDSE.Get (“defaultNamingContext„)
'Usare la DIFFICOLTÀ per cercare l'indice attivo il nTDSDSA di ObjectClass.
'Questo identificherà tutti i regolatori di dominio.
Regolare il objCommand = CreateObject (“ADODB.Command„)
Regolare il objConnection = CreateObject (“ADODB.Connection„)
objConnection.Provider = “ADsDSOObject„
objConnection.Open “fornitore attivo dell'indice„
objCommand.ActiveConnection = objConnection
strBase = ""
strFilter = “(objectClass=nTDSDSA)„
strAttributes = “AdsPath„
strQuery = strBase & “; „ & strFilter & “; „ & strAttributes & “; sotto-albero„
objCommand.CommandText = strQuery
objCommand.Properties (“formato di pagina„) = 100
objCommand.Properties (“prespegnimento„) = 60
objCommand.Properties (“il nascondiglio risulta„) = falso
Regolare il objRecordSet = objCommand.Execute
'Enumerare gli oggetti del genitore del nTDSDSA del codice categoria. Conservare il regolatore di dominio
'AdsPaths nei arrstrDCs dinamici di allineamento.
K = 0
Fare fino a objRecordSet.EOF
Regolare il objDC = il _
GetObject (GetObject (objRecordSet.Fields (“AdsPath„)). Genitore)
arrstrDCs della conserva di ReDim (k)
arrstrDCs (k) = objDC.DNSHostName
K = K + 1
objRecordSet.MoveNext
Ciclo
'Richiamare l'attributo del lastLogon per ogni utente su ogni regolatore di dominio.
Per K = 0 a UBound (arrstrDCs)
se "" <> di ROOT_OU allora
strBase = ""
altrimenti
strBase = ""
concluder se
strFilter = “(& (objectCategory=computer) (objectClass=computer))„
strAttributes = “CN, lastLogon„
strQuery = strBase & “; „ & strFilter & “; „ & _ degli strAttributes
& “; sotto-albero„
objCommand.CommandText = strQuery
Sul riassunto di errore dopo
Err.Clear
Regolare il objRecordSet = objCommand.Execute
Se Err.Number <> 0 allora
Err.Clear
Sull'errore 0 di avanzamento
Altrimenti
Oscurare la i 'come numero intero
Sull'errore 0 di avanzamento
Fare fino a objRecordSet.EOF
strDN = objRecordSet.Fields (“CN„)
lngDate = objRecordSet.Fields (“lastLogon„)
Sul riassunto di errore dopo
Err.Clear
Regolare il objDate = il lngDate
Se Err.Number <> 0 allora
Err.Clear
dtmDate = #1/1/1601#
Altrimenti
lngHigh = objDate.HighPart
lngLow = objDate.LowPart
Se objList < 0="" Then="" lngHigh="lngHigh"> del lngLow (strDN) allora
objList (strDN) = dtmDate
Concluder se
Altrimenti
strDN di objList.Add, dtmDate
Concluder se
objRecordSet.MoveNext
Ciclo
Concluder se
Dopo
Per ogni strUser in objList
objDate = CDate (objList (strUser))
diffDays = DateDiff (“d„, objDate, data)
Se diffDays > DAYS_DIFF allora
logContent = logContent & strUser & “; „ & objList (strUser) & vbNewLine
Concluder se
Dopo
objTextFile.WriteLine logContent
objTextFile.Close
NotifyByEmail “lavora la notifica alla macchina del email di LastLogon„, logContent
objConnection.Close
Regolare il objRootDSE = niente
Regolare il objConnection = niente
Regolare il objCommand = niente
Regolare il objRecordSet = niente
Regolare il objDC = niente
Regolare il objDate = niente
Regolare il objList = niente
Regolare il objShell = niente
MsgBox “fatto„
NotifyByEmail secondario (strSubject, strResult)
ToAddress fioco
MessageSubject fioco
MessageBody fioco
MessageAttachment fioco
myRecipient fioco, olMailItem
Ol fioco, NS, newMail
ToAddress = “[email protected]„
MessageSubject = strSubject
MessageBody = strResult
Regolare il ol = WScript.CreateObject (“Outlook.Application„)
Regolar NS = ol.getNamespace (“MAPI„)
ns.log su "", "", allineare, falso
Regolare il newMail = ol.CreateItem (olMailItem)
newMail.Subject = MessageSubject
newMail.Body = MessageBody & vbCrLf
'convalidare il destinatario, appena nel caso…
Regolar myRecipient = ns.CreateRecipient (ToAddress)
myRecipient.Resolve
Se non myRecipient.Resolved allora
MsgBox “destinatario sconosciuto„
Altrimenti
newMail.Recipients.Add (myRecipient)
newMail.Send
Concluder se
Regolare il ol = niente
concludere il sommergibile
|