Протоколирование событий входа

При необходимости протоколирования событий входа таких как вход или выход пользователя из системы или перезагрузка компьютера можно воспользоваться приведенный ниже скриптом.

Логика работы скрипта проста.

Данные формируемые скриптом записываются в локальную папку logFolder затем копируются в общую папку на удаленном сервере.

Внимание: К сожалению механизма способного защитить данные от исправления, разве что только NTFS разрешения (для создателя только запись но не чтение), пока не предусмотрено, но я над этим работаю.

Далее, данные из папки ArchiveFolder другим скриптом пишутся в MSSQL, но об этом в следующий раз. Собственно сделать с этими данными можно все что угодно, вам решать…

Настройка работы скрипта через средства GPO.
Скрипт помещается в логон или логофф секцию, для пользователя и при необходимости для компьютера.
Примечание: Естественно нужно не забыть исправить значение переменной eventStr.

Далее, при возникновении события вам будет отсылаться письмо и само событие будет помещаться в текстовый файл.

Рассмотрим скрипт.

on error resume next

‘ Процедура отправки сообщения
Sub sendReport (EventStr, UserName, ServerName, ClientName)
  Set objMessage = CreateObject("CDO.Message")
  Set WshShell = WScript.CreateObject("WScript.Shell")
  ‘ извлекаем имя компьютера
 serverName = WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
  ‘ формируем стороку сообщения
 strMessage = "Event – " & EventStr & CHR(13) & "User – " & UserName & CHR(13) & "Time – " & Now() & CHR(13) & "Client computer – " & ClientName

  objMessage.Subject = "Audit Report – " & ServerName
  objMessage.From = "audit.admin@example.com"
  objMessage.To = "auditors@example.com;"
  objMessage.TextBody = "Server Name is " & ServerName & CHR(13) & CHR(13) & strMessage
  objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
  objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.100.110"
  objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
  objMessage.Configuration.Fields.Update
  ‘ Отправляем сообщение
 objMessage.Send
End Sub

‘ Процедура копирования файлов
Sub copyFiles (SourceFolder, DestinationFolder)
  If objFSO.FolderExists(DestinationFolder) Then
    For Each sFile In objFSO.GetFolder(SourceFolder).Files
      If Not objFSO.FileExists(DestinationFolder & "\" & objFSO.GetFileName(sFile)) Then
        objFSO.GetFile(sFile).Copy DestinationFolder & "\" & objFSO.GetFileName(sFile),True
            objFSO.DeleteFile sFile
      End If
        Next
  Else
        ‘WScript.Echo "Sorry, this folder does not exist"
 End if
End Sub

‘ main sub
Set nw=WScript.CreateObject("Wscript.Network")
Set oShell = CreateObject("WScript.Shell" )
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set WshNetwork = WScript.CreateObject("WScript.Network")

‘ формирование временной строки
mStr = Month(date)
dStr = day(date)
yStr = year(date)
hStr = hour(now)
minStr = minute(now)
‘ можете вписать событие по необходимости
eventStr = "Logon"
‘ извлекаем имя клиента
clientName = oShell.ExpandEnvironmentStrings("%ClientName%")

logFolder = "C:\Windows\TEMP\AuditLog"
logFile = LogFolder & "\" & yStr &"-" & mStr & "-" & dStr & "_" & hStr & "_" & minStr & ".log"

‘ путь к папке где храняться отчеты
ArchiveFolder = "\\192.168.100.105\Log$\"

If objFSO.FolderExists(LogFolder) Then
        ‘WScript.Echo "The folder exists"
Else
  Set objFolder = objFSO.CreateFolder(LogFolder)
  ‘WScript.Echo "LogFolder is created " & LogFolder
End If
If objFSO.FolderExists(ArchiveFolder) Then
  ‘Wscript.Echo "Archive folder exists"
Else
  Set objFolder = objFSO.CreateFolder(ArchiveFolder)
  ‘WScript.Echo "ArchiveFolder is created " & ArchiveFolder
End If

Set objTextFile = objFSO.OpenTextFile(LogFile,8,TRUE)
objTextFile.WriteLine ( EventStr & ";" & WshNetwork.UserName & ";" & Now() & ";"  & WshNetwork.ComputerName & ";" & ClientName)
objTextFile.Close

copyFiles logFolder, archiveFolder
sendReport EventStr, WshNetwork.UserName, WshNetwork.ComputerName, ClientName


Информация об авторе

Сергей Мариничев.
Вы можете присоединиться ко мне в Facebook или в Twitter.

Если Вам понравилась статья, то вы можете подписаться на RSS.
А также бесплатно подписаться по E-mail и получать актуальную информацию в числе первых.

Получать обновления на email

Вы можете оставить комментарий.

4 Комментариев »

 
 

Добавить комментарий

XHTML: Вы можете использовать тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>