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:
6:
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“
Schwaches objRootDSE, strConfig, objConnection, objCommand, strQuery
Schwaches objRecordSet, objDC, f, fso
Schwaches strDNSDomain, objShell, lngBiasKey, lngBias, k, arrstrDCs ()
Schwaches strDN, dtmDate, objDate, lngDate, objList, strUser
Schwaches strBase, strFilter, strAttributes, lngHigh, lngLow, logContent
objFSO = CreateObject („Scripting.FileSystemObject“) einstellen
objTextFile einstellen = objFSO.CreateTextFile (LOG_FILE, 2, zutreffendes)
'Einen Wörterbuchgegenstand benutzen, um spätestes lastLogon für jeden Benutzer aufzuspüren.
objList = CreateObject („Scripting.Dictionary“) einstellen
objList.CompareMode = vbTextCompare
'Ortszeit-Zonenvorspannung vom Maschinenregister beschaffen.
objShell = CreateObject („Wscript.Shell“) einstellen
lngBiasKey = objShell.RegRead („HKLM \ System \ CurrentControlSet \ Steuerung \“ _
u. „TimeZoneInformation \ ActiveTimeBias“)
Wenn UCase (TypeName (lngBiasKey)) = „LANG“ dann
lngBias = lngBiasKey
ElseIf UCase (TypeName (lngBiasKey)) = „VARIANTE ()“ dann
lngBias = 0
Für k = 0 zu UBound (lngBiasKey)
lngBias = lngBias + (lngBiasKey (k) * 256 ^ k)
Zunächst
Beenden wenn
'Konfigurationszusammenhang und DNS-Gebiet vom RootDSE Gegenstand feststellen.
objRootDSE = GetObject einstellen („LDAP: //RootDSE“)
strConfig = objRootDSE.Get („configurationNamingContext“)
strDNSDomain = objRootDSE.Get („defaultNamingContext“)
'AUFHEBEN verwenden, um aktives Verzeichnis nach ObjectClass nTDSDSA zu suchen.
'Dieses kennzeichnet alle Gebiets-Steuerpulte.
objCommand = CreateObject („ADODB.Command“) einstellen
objConnection = CreateObject („ADODB.Connection“) einstellen
objConnection.Provider = „ADsDSOObject“
objConnection.Open „aktiver Verzeichnis-Versorger“
objCommand.ActiveConnection = objConnection
strBase = ""
strFilter = „(objectClass=nTDSDSA)“
strAttributes = „AdsPath“
strQuery = strBase u. „; “ u. strFilter u. „; “ u. strAttributes u. „; Unterbaum“
objCommand.CommandText = strQuery
objCommand.Properties („Seiten-Größe“) = 100
objCommand.Properties („Abschaltung“) = 60
objCommand.Properties („Pufferspeicher resultiert“), = falsch
objRecordSet = objCommand.Execute einstellen
'Elternteilgegenstände von Kategorie nTDSDSA aufzählen. Gebiets-Steuerpult speichern
'AdsPaths in den dynamischen Reihe arrstrDCs.
k = 0
Bis objRecordSet.EOF tun
objDC = _ einstellen
GetObject (GetObject (objRecordSet.Fields („AdsPath“)). Elternteil)
ReDim Konserve arrstrDCs (k)
arrstrDCs (k) = objDC.DNSHostName
k = k + 1
objRecordSet.MoveNext
Schleife
'lastLogon Attribut für jeden Benutzer auf jedem Gebiets-Steuerpult zurückholen.
Für k = 0 zu UBound (arrstrDCs)
wenn ROOT_OU <> "" dann
strBase = ""
sonst
strBase = ""
beenden wenn
strFilter = „(u. (objectCategory=computer) (objectClass=computer))“
strAttributes = „KN, lastLogon“
strQuery = strBase u. „; “ u. strFilter u. „; “ u. strAttributes _
u. „; Unterbaum“
objCommand.CommandText = strQuery
Auf Störungs-Zusammenfassung zunächst
Err.Clear
objRecordSet = objCommand.Execute einstellen
Wenn Err.Number <> 0 dann
Err.Clear
Auf Störung Goto- 0
Sonst
I 'als ganze Zahl verdunkeln
Auf Störung Goto- 0
Bis objRecordSet.EOF tun
strDN = objRecordSet.Fields („KN“)
lngDate = objRecordSet.Fields („lastLogon“)
Auf Störungs-Zusammenfassung zunächst
Err.Clear
objDate = lngDate einstellen
Wenn Err.Number <> 0 dann
Err.Clear
dtmDate = #1/1/1601#
Sonst
lngHigh = objDate.HighPart
lngLow = objDate.LowPart
Wenn lngLow < 0="" Then="" lngHigh="lngHigh"> objList (strDN) dann
objList (strDN) = dtmDate
Beenden wenn
Sonst
objList.Add strDN, dtmDate
Beenden wenn
objRecordSet.MoveNext
Schleife
Beenden wenn
Zunächst
Für jedes strUser im objList
objDate = CDate (objList (strUser))
diffDays = DateDiff („d“, objDate, Datum)
Wenn diffDays > DAYS_DIFF dann
logContent = logContent u. strUser u. „; “ u. objList (strUser) u. vbNewLine
Beenden wenn
Zunächst
objTextFile.WriteLine logContent
objTextFile.Close
NotifyByEmail „bearbeitet die LastLogon eMail-Mitteilung“ maschinell, logContent
objConnection.Close
objRootDSE einstellen = nichts
objConnection einstellen = nichts
objCommand einstellen = nichts
objRecordSet einstellen = nichts
objDC einstellen = nichts
objDate einstellen = nichts
objList einstellen = nichts
objShell einstellen = nichts
MsgBox „getan“
VorNotifyByEmail (strSubject, strResult)
Schwaches ToAddress
Schwaches MessageSubject
Schwaches MessageBody
Schwaches MessageAttachment
schwaches myRecipient, olMailItem
Schwaches ol, ns, newMail
ToAddress = „[email protected]“
MessageSubject = strSubject
MessageBody = strResult
Ol = WScript.CreateObject („Outlook.Application“) einstellen
Einstellen ns = ol.getNamespace („MAPI“)
ns.log auf "", "", zutreffend, falsch
newMail = ol.CreateItem (olMailItem) einstellen
newMail.Subject = MessageSubject
newMail.Body = MessageBody u. vbCrLf
'die Empfänger, gerade im Fall validieren…
myRecipient einstellen = ns.CreateRecipient (ToAddress)
myRecipient.Resolve
Wenn nicht myRecipient.Resolved dann
MsgBox „unbekannte Empfänger“
Sonst
newMail.Recipients.Add (myRecipient)
newMail.Send
Beenden wenn
Ol einstellen = nichts
Unterseeboot beenden
|