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, strConfig, objConnection, objCommand, strQuery
Тусклое objRecordSet, objDC, f, fso
Тусклое strDNSDomain, objShell, lngBiasKey, lngBias, k, arrstrDCs ()
Тусклое strDN, dtmDate, objDate, lngDate, objList, strUser
Тусклое strBase, strFilter, strAttributes, lngHigh, lngLow, logContent
Установите objFSO = CreateObject («Scripting.FileSystemObject»)
Установите objTextFile = objFSO.CreateTextFile (LOG_FILE, 2, поистине)
'Используйте предмет словаря для того чтобы отслеживать самое последнее lastLogon для каждого потребителя.
Установите objList = CreateObject («Scripting.Dictionary»)
objList.CompareMode = vbTextCompare
'Получите смещение зоны местного времени от регистратуры машины.
Установите objShell = CreateObject («Wscript.Shell»)
lngBiasKey = objShell.RegRead («HKLM \ система \ CurrentControlSet \ управление \» _
& «TimeZoneInformation \ ActiveTimeBias»)
Если UCase, то (TypeName (lngBiasKey)) = «ДЛИНОЙ» после этого
lngBias = lngBiasKey
ElseIf UCase (TypeName (lngBiasKey)) = «ВАРИАНТ ()» после этого
lngBias = 0
Для k = 0 к UBound (lngBiasKey)
lngBias = lngBias + (lngBiasKey (k) * 256 ^ k)
Затем
Закончитесь если
'Обусловьте смысл конфигурации и домен DNS от предмета RootDSE.
Установите objRootDSE = GetObject («LDAP: //RootDSE»)
strConfig = objRootDSE.Get («configurationNamingContext»)
strDNSDomain = objRootDSE.Get («defaultNamingContext»)
'Используйте СУЕТУ для того чтобы искать активно директорию для nTDSDSA ObjectClass.
'Это определит все регуляторы домена.
Установите objCommand = CreateObject («ADODB.Command»)
Установите objConnection = CreateObject («ADODB.Connection»)
objConnection.Provider = «ADsDSOObject»
objConnection.Open «активно провайдер директории»
objCommand.ActiveConnection = objConnection
strBase = ""
strFilter = «(objectClass=nTDSDSA)»
strAttributes = «AdsPath»
strQuery = strBase & «; » & strFilter & «; » & strAttributes & «; поддерево»
objCommand.CommandText = strQuery
objCommand.Properties («размер страницы») = 100
objCommand.Properties («перерыв») = 60
objCommand.Properties («тайник приводит к») = ложно
Установите objRecordSet = objCommand.Execute
'Перечислите предметы родителя nTDSDSA типа. Сохраньте регулятор домена
'AdsPaths в динамических arrstrDCs блока.
k = 0
Не сделать до objRecordSet.EOF
Установите objDC = _
GetObject (GetObject (objRecordSet.Fields («AdsPath»)). Родитель)
arrstrDCs заповедника ReDim (k)
arrstrDCs (k) = objDC.DNSHostName
k = k + 1
objRecordSet.MoveNext
Петля
'Восстановите атрибут lastLogon для каждого потребителя на каждом регуляторе домена.
Для k = 0 к UBound (arrstrDCs)
если "" <> ROOT_OU после этого
strBase = ""
еще
strBase = ""
закончитесь если
strFilter = «(& (objectCategory=computer) (objectClass=computer))»
strAttributes = «CN, lastLogon»
strQuery = strBase & «; » & strFilter & «; » & _ strAttributes
& «; поддерево»
objCommand.CommandText = strQuery
На резюме ошибки затем
Err.Clear
Установите objRecordSet = objCommand.Execute
Если Err.Number <> 0 после этого
Err.Clear
На ошибке переход 0
Еще
Затемните I 'как интежер
На ошибке переход 0
Не сделать до objRecordSet.EOF
strDN = objRecordSet.Fields («CN»)
lngDate = objRecordSet.Fields («lastLogon»)
На резюме ошибки затем
Err.Clear
Установите objDate = lngDate
Если Err.Number <> 0 после этого
Err.Clear
dtmDate = #1/1/1601#
Еще
lngHigh = objDate.HighPart
lngLow = objDate.LowPart
Если objList < 0="" Then="" lngHigh="lngHigh"> lngLow (strDN) после этого
objList (strDN) = dtmDate
Закончитесь если
Еще
strDN objList.Add, dtmDate
Закончитесь если
objRecordSet.MoveNext
Петля
Закончитесь если
Затем
Для каждого strUser в objList
objDate = CDate (objList (strUser))
diffDays = DateDiff («d», objDate, дата)
Если diffDays > DAYS_DIFF после этого
logContent = logContent & strUser & «; » & objList (strUser) & vbNewLine
Закончитесь если
Затем
objTextFile.WriteLine logContent
objTextFile.Close
NotifyByEmail «подвергает извещение механической обработке электронная почта LastLogon», logContent
objConnection.Close
Установите objRootDSE = ничего
Установите objConnection = ничего
Установите objCommand = ничего
Установите objRecordSet = ничего
Установите objDC = ничего
Установите objDate = ничего
Установите objList = ничего
Установите objShell = ничего
«Сделанное» MsgBox
sub NotifyByEmail (strSubject, strResult)
Тусклое ToAddress
Тусклое MessageSubject
Тусклое MessageBody
Тусклое MessageAttachment
тусклое myRecipient, olMailItem
Тусклое ol, ns, newMail
ToAddress = «[email protected]»
MessageSubject = strSubject
MessageBody = strResult
Установите ol = WScript.CreateObject («Outlook.Application»)
Установите ns = ol.getNamespace («MAPI»)
ns.log на "", "", поистине, ложном
Установите newMail = ol.CreateItem (olMailItem)
newMail.Subject = MessageSubject
newMail.Body = MessageBody & vbCrLf
'утвердите получатель, как раз в случае…
Установите myRecipient = ns.CreateRecipient (ToAddress)
myRecipient.Resolve
Если не myRecipient.Resolved после этого
MsgBox «неизвестный получатель»
Еще
newMail.Recipients.Add (myRecipient)
newMail.Send
Закончитесь если
Установите ol = ничего
закончите подводную лодку
|