Windows system32 winevt logs security evtx

Прочитано: 3 971


Прочитано:
3 971

“Логи в системе Windows7/Windows Server 2008 R2 Std хранятся по адресу c:windowssystem32winevtlogs”

Сейчас я покажу, как их очистить с помощью командной строки (cmd.exe) с использованием wmic.

Заходим в систему (dc1.polygon.local) с правами Администратора (ekzorchik) и запускаем командную строку (cmd.exe) в Административном окружении.

(,так делается в Windows 7 && Windows Server 2008/R2)

Пример синтаксиса:

"Wmic nteventlog where filename=”<имя_журнала>” call ClearEventlog"

Пример синтаксиса для очистки логов системы.

Предлагаю Вам ознакомиться с примерами очистки логов в системе:

Очищаем лог Application:

C:Windowssystem32>wmic nteventlog where filename="Application" call ClearEventlog

Executing (\DC1ROOTCIMV2:Win32_NTEventlogFile.Name=»C:\Windows\System32\Wi

nevt\Logs\Application.evtx»)->ClearEventlog()

Method execution successful.

Out Parameters:

instance of __PARAMETERS

{

ReturnValue = 0;

};

При очистке лога его размер будет соответствовать (68KB), см скриншот:

При очистке лога его размер будет соответствовать размеру 68KB.

Очищаем лог Security:

C:Windowssystem32>wmic nteventlog where filename="Security" call ClearEventlog

Executing (\DC1ROOTCIMV2:Win32_NTEventlogFile.Name=»C:\Windows\System32\Wi

nevt\Logs\Security.evtx»)->ClearEventlog()

Method execution successful.

Out Parameters:

instance of __PARAMETERS

{

ReturnValue = 0;

};

Очищаем лог System:

C:Windowssystem32>wmic nteventlog where filename="System" call ClearEventlog

Executing (\DC1ROOTCIMV2:Win32_NTEventlogFile.Name=»C:\Windows\System32\Wi

nevt\Logs\System.evtx»)->ClearEventlog()

Method execution successful.

Out Parameters:

instance of __PARAMETERS

{

ReturnValue = 0;

};

Очищаем лог Active Directory Web Services:

C:Windowssystem32>wmic nteventlog where filename="Active Directory Web Services" call ClearEventlog

Executing (\DC1ROOTCIMV2:Win32_NTEventlogFile.Name=»C:\Windows\System32\Wi

nevt\Logs\Active Directory Web Services.evtx»)->ClearEventlog()

Method execution successful.

Out Parameters:

instance of __PARAMETERS

{

ReturnValue = 0;

};

Очищаем лог DFS Replication:

C:Windowssystem32>wmic nteventlog where filename="DFS Replication" call ClearEventlog

Executing (\DC1ROOTCIMV2:Win32_NTEventlogFile.Name=»C:\Windows\System32\Wi

nevt\Logs\DFS Replication.evtx»)->ClearEventlog()

Method execution successful.

Out Parameters:

instance of __PARAMETERS

{

ReturnValue = 0;

};

Очищаем лог DFS Replication:

C:Windowssystem32>wmic nteventlog where filename="Directory Service" call ClearEventlog

Executing (\DC1ROOTCIMV2:Win32_NTEventlogFile.Name=»C:\Windows\System32\Wi

nevt\Logs\Directory Service.evtx»)->ClearEventlog()

Method execution successful.

Out Parameters:

instance of __PARAMETERS

{

ReturnValue = 0;

};

Очищаем лог DNS Server:

C:Windowssystem32>wmic nteventlog where filename="DNS Server" call ClearEventlog

Executing (\DC1ROOTCIMV2:Win32_NTEventlogFile.Name=»C:\Windows\System32\Wi

nevt\Logs\DNS Server.evtx»)->ClearEventlog()

Method execution successful.

Out Parameters:

instance of __PARAMETERS

{

ReturnValue = 0;

};

Вот собственно и всё, может, кому  и пригодится. Удачи.


By Mike Cohen

One of the most critical sources of data when responding to an incident on windows systems is the event logs. Windows event logs record security significant events.

However, unlike more traditional Unix syslogs, the Windows Event Log system is more complex and there are a number of potential problems that an investigator can run into.

In this post we explore the windows event log system from the point of view of the investigator. We then see how tools such as Velociraptor can be used to work around its limitations.

Responding to an incident

Consider an incident occurred on one of your systems. You would like to investigate it and so collect all the event log files from C:WindowsSystem32WinEVTLogs*.evtx.

The logs are stored in binary format so you will need to post process the files. Luckily there are a number of tools out there that will do that for you. Here is a typical output from the dumpevtx tool for a particular event from the Security.evtx log file:

This event looks interesting but it is not quite clear what it is really talking about. We see some potentially useful items like SubjectUserSid and PrivilegeList but we are missing some critical context around this message.

Lets look at the same event with the windows Event Viewer GUI:

This is much better! We now know the message indicates the user was assigned some special privileges.

Where does this message come from and why is it not shown by typical EVTX parsers?

It turns out that the message of the event is not actually stored in the EVTX file at all — it is actually stored in a DLL and it is bound to the event in the log via some complicated algorithm.

Event Messages

Windows event logs do not store the full event message. Instead an Event Provider registers a message DLL that contains the full message. The event itself simply stores the index of the message in the Message Table as the Event ID. Note that event IDs are just a number into an event table and are commonly reused by different providers. It is the unique combination of channel, provider and Event ID that identifies the message (so for example searching for Event Id 1000 yields many different unrelated messages because many providers reuse that event ID).

The figure below illustrates how the Windows Event Viewer is able to print the proper Event Message:

How the Windows Event Viewer displays event log messages

How the Windows Event Viewer displays event log messages

How the Windows Event Viewer displays event log messages

When a user selects an event in the Event Viewer, the application reads the Provider, EventID and EventData fields from the event itself — in the above example, the Provider was Microsoft-Windows-Security-Auditing, EventID was 4672 and the EventData has items such as SubjectUserSid etc.

Next the event viewer consults the registry at the key HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventLogSecurityMicrosoft-Windows-Security-Auditing and reads the value EventMessageFile.

That value is the location of a dll which contains the messages for
this provider. On my system, the DLL is located at
%SystemRoot%\system32\adtschema.dll (Note that many DLLs use
localizations and so the dll could be located in MUI files).

The DLL has a resource section with a MESSAGE_TABLE type. The event viewer then uses this to extract the message which looks like:

Special privileges assigned to new logon.%n%nSubject:%n%tSecurity ID:%t%t%1%n%tAccount Name:%t%t%2%n%tAccount Domain:%t%t%3%n%tLogon ID:%t%t%4%n%nPrivileges:%t%t%5

The event viewer then interpolates the EventData items into the message by their position — for example %1 is replaced with SubjectUserSid etc. Additionally %t is a tab and %n is a new line.

What could go wrong?

The previous section examined how event logs are actually stored on the system. In practice there are a number of pitfalls with this scheme:

  1. If an EVTX file is taken from one system to another, the relevant DLL may not be present. This is more common with bespoke software that is not commonly used. In this case the investigator has no idea what the message the event is trying to convey.
  2. If software is uninstalled from the system, the message DLL may be removed. This makes it hard to view events in the event log from the time it was installed (in a sense information is wiped from the event log).

In both of these cases, the investigator will need to figure out the correct event message independently. Luckily in the age of the internet there are many web sites that catalog some of the common event ids and what they mean:

But it is simply not practical to search every event id. For less commonly used providers the event ids may not be indexed on the web at all. In this case the investigator is left with no idea what a specific event entry means and might miss some critical evidence

Velociraptor’s parse_evtx() VQL plugin

In the latest Velociraptor release (0.3.6), the parse_evtx() plugin is now including the event messages directly in the VQL output. This automatically enriches the event log data collected by the Velociraptor host visibility tool.

Velociraptor can interpolate and attach the event message to every log message it relays

Velociraptor can interpolate and attach the event message to every log message it relays

Velociraptor can interpolate and attach the event message to every log message it relays

In the above we see the result of the simple VQL query:

SELECT * FROM parse_evtx(filename='c:/Windows/System32/Winevt/logs/Security.evtx')

You can see an additional field now, called Message containing the event message with the Event Data interpolated into it. This provides a lot of context around what the event is supposed to do.

What about existing EVTX files?

In the last section we saw how Velociraptor can enrich event logs as it is forwarding them to the server but what if we have just the evtx files — possibly we just acquired the files using bulk upload artifacts such as the Windows.KapeFiles.Targets artifact?

In that case our analysis machine may not actually have the correct message dlls installed and Velociraptor may fail to retrieve the event messages.

We need a way to maintain a library of event id’s for different providers and the messages they represent. This way we can instantly look up the correct message on demand — without needing to have DLLs installed.

Velocidex, the company behind Velociraptor is an innovative software company crafting many free and open source digital forensics tools. In fact Velociraptor’s EVTX parsing is implemented by the Velocidex/evtx project on GitHub. You should check it out!

The project releases a stand along command line tool for parsing and examining windows event log format. In this post, I would like to demonstrate the latest “extract” feature:

The extract command walks all providers in the registry, gathers their message DLLs and parses the message table resource for each. Then, all the messages are stored in a sqlite database. Sqlite being the de facto standard for portable databases can be easily consumed by other tools written in many languages. The total size of the database is modest (I have extracted all event log messages on Windows 2019 server to about 23MB SQLite file).

Now we can easily use the database to resolve our provider and event id to a message:

Alternatively we can simply use SQLite directly to query the database

$ sqlite3 mydb.sqlite
SQLite version 3.24.0 2018-06-04 19:24:41
Enter ".help" for usage hints.
sqlite> **SELECT message FROM providers join messages on providers.id = messages.provider_id where providers.name = 'Microsoft-Windows-Security-Auditing' and messages.event_id = 4672;**
_Special privileges assigned to new logon.%n%nSubject:%n%tSecurity ID:%t%t%1%n%tAccount Name:%t%t%2%n%tAccount Domain:%t%t%3%n%tLogon ID:%t%t%4%n%nPrivileges:%t%t%5_

Enriching old event log files

We have shown how dumpevtx can use our sqlite database to retrieve
the messages for each event id individually but this leaves us to
interpolate the full data by hand — no fun indeed!

You can also use dumpevtx to export the events into JSON, and
automatically resolve event IDs with the sqlite database too by
providing the database with the --messagedb flag.

F:\>dumpevtx.exe parse --messagedb mydb.sqlite c:\Windows\System32\winevt\Logs\Security.evtx

Parsing the EVTX file with the assistance of the event id database. The message interpolates the Event Data into it.

Parsing the EVTX file with the assistance of the event id database. The message interpolates the Event Data into it.

Parsing the EVTX file with the assistance of the event id database. The message interpolates the Event Data into it.

Conclusions

The Windows Event Log system is fairly complex — it is not enough to just copy out the *.evtx files because the information content of the log is spread throughout the filesystem in DLLs and registry keys. For many event types there is enough context in the EventData or UserData fields of the event log but in many cases, without the actual message corresponding to the event ID we lose critical meaning.

It is essential therefore to include the original message for each
event log. We have shown how Velociraptor is able to include this
critical information automatically. We also present the dumpevtx
project which allows collecting messages in a database so events can
be matched up quickly and easily with their correct messages without
requiring the original program that generated the message to be
installed on the analyst system.

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

В топике будет много кода, который, надеюсь, будет вам полезен.

Первым делом необходимо было определить список событий, которые необходимо было отслеживать. Чтобы уменьшить количество текста, я создала процедуру, которая по ID события выдает ее описание:

Function DefineReason ($Id){
    switch ($Id){
        4741{ Return "Создана учетна запись компьютера"}
        4742{ Return "Изменена учетна запись компьютера" }
        4743{ Return "Удалена учетная запись компьютера"}
        4727{ Return "Создана глобальная группа с включенной безопасностью"}
        4728{ Return "Добавлен пользователь к глобальной группе с включенной безопасностью"}
        4729{ Return "Удален пользователь из глобальной группы с включенной безопасностью"}
        4730{ Return "Удалена глобальная группа с включенной безопасностью"}
        4731{ Return "Создана локальная группа с включенной безопасностью"}
        4732{ Return "Добавлен пользователь в локальную группу с включенной безопасностью"}
        4733{ Return "Удален пользователь из локальной группы с включенной безопасностью"}
        4734{ Return "Удалена локальная группа с включенной безопасностью"}
        4735{ Return "Изменена локальная группа с включенной безопасностью"}
        4737{ Return "Изменена глобальная группа с включенной безопасностью"}
        4743{ Return "Удалена учетная запись компьютера"}
        4754{ Return "Создана универсальная группа с включенной безопасностью" }
        4755{ Return "Изменена универсальная группа с включенной безопасностью"}
        4756{ Return "Добавлен пользователь к универсальной группе с включенной безопасностью"}
        4757{ Return "Удален пользователь из универсальной группы с включенной безопасностью"}
        4758{ Return "Удалена универсальная группа с включенной безопасностью"}
        4764{ Return "Изменен тип группы"}
        4720{ Return "Создана учетна запись"}
        4722{ Return "Включена учетна запись"}
        4724{ Return "Сброс пароля пользователя"}
        4725{ Return "Учетна запись пользователя отключена"}
        4726{ Return "Учетна запись пользователя удалена"}
        4738{ Return "Изменена учетна запись"}
        4740{ Return "Учетна запись пользователя заблокирована"}
        4767{ Return "Учетна запись пользователя разблокирована"}
        4780{ Return "Список управления Доступом был установлен на учетные записи, которые являются членами группы администраторов"}
        4781{ Return "Было изменено имя учетной записи"}
        4794{ Return "Была предпринята попытка задать режим восстановления служб каталогов"}
        5376{ Return "Диспетчер учетных данных: учетные данные были сохранены"}
        5377{ Return "Диспетчер учетных данных: учетные данные были востановлены из резервной копии"}
        4825{ Return "Запрeщен доступ к удаленному рабочемо столу, не входит в группу RDP"}
        1102{ Return "Удален журнал Security"}
    }
}

Затем понадобилось описать события, которые отслеживаются по маске доступа:

# Функция определения описания события по маске доступа

Function DefineReasonByAccessMask ($AccessMask){
    switch($AccessMask){
        "0xc0000064"  { Return "Имя пользователя не существует" }
        "0xc000006A"  { Return "Верное имя, но не правильный пароль"}
        "0xc0000234"  { Return "Пользователь заблокирован" }
        "0xc0000072"  { Return "Учетка деактивирована"}
        "0xc0000006F" { Return "Вход вне рабочее время"}
        "0xc00000070" { Return "Ограничение локальной станции"}
        "0xc00000193" { Return "Срок действия учетной записи истек"}
        "0xc00000071" { Return "Срок действия пароля Истек"}
        "0xc00000224" { Return "Необходимо сменить пароль при следующем входе"}
        "0xc000015b"  { Return "Пользователю запрещен вход на этой машине"}
        "0xc000006d"  { Return "Неверный пароль"}
    }
}

Теперь мы знаем, за чем хотим следить. Следующий шаг при разработке скрипта по аудиту — это получение журнала безопасности в формате XML, так как если событий много, то построчная обработка занимает достаточно большое количество времени.

Чтобы получить события из журнала можно использовать одну из команд, в каждой из которых есть свои преимущества и недостатки:

1. Get-LogEvent security

Преимущества:

— быстрый доступ к свойствам события;
— не нужна предварительная обработка для доступа к свойствам события.

Недостатки:

— доступ только с системному журналу безопасности, который хранится по пути: Windows/System32/winevt/security.evtx;
— долгая обработка содержимого тега . Обработка происходит путем построчной сепарации с ликвидацией спецсимволов.

2. Get-WinEvent –path “D:/”

Преимущества:

— быстрая обработка журнала;
— доступ к любому журналу. Главное прописать полный путь.

Недостатки:

— для обработки полученного журнала требуется предварительная обработка.

Try {
$Events = Get-WinEvent -FilterHashTable $MyFilter
 } Catch {"No events were found in $Log"; Continue}
    ForEach ($Raw_Event in $Events)
    {	    
      Try{
          $EventXML = [xml]$Raw_Event.ToXML()
      } Catch {Write-Host "Unable to convert an event to XML"}
      $Event = @{}
      ForEach ($object in $EventXML.Event.EventData.Data) {
        $Event.Add($object.name,$object.'#text')
      }

      $Event.Add("ID",$Raw_Event.ID)
      $Event.Add("TimeCreated",$Raw_Event.TimeCreated)

Следующий шаг после того как мы получили доступ к журналу, это вытягивать из журнала требуемые события и принимать по ним соответствующие решения. В большинстве случаев – это отправка информационного сообщения на почту или логирование в отдельный файл.

Задать параметры, по которым будем вытягивать информацию, возможно, используя интерфейсное решения. Диалоговое окно с вводом параметров.

image

1. Первый параметр предполагает, что журналы периодически экспортируются в определенный каталог, который и следует задать. Если журнал один, то задается стандартный каталог для хранения журналов: «C:WindowsSystem32winevtLogs».

2. Второй параметр определяет сервер, по которому будет искаться логи. Если сервер один, то ставим «*».

3. Третий параметр предельно понятен: * — ищем события за весь период, если задана дата, например, 30.11.2015, то ищем за эту дату. Поиск за период осуществляется вводом начальной и конечной даты через тире (01.11.2015-30.11.2015).

4. Указываем путь для сохранения результата работы, например, «D:log.log». Ниже приведен код, позволяющий построить интерфейс для скрипта:

$objForm = New-Object System.Windows.Forms.Form 
$objForm.Text = "Ввод исходных данных"
$objForm.Size = New-Object System.Drawing.Size(300,450) 
$objForm.StartPosition = "CenterScreen"

# Events path
$objLabel1 = New-Object System.Windows.Forms.Label
$objLabel1.Location = New-Object System.Drawing.Size(10,20) 
$objLabel1.Size = New-Object System.Drawing.Size(280,40) 
$objLabel1.Text = "Введите полный путь к журналам в формате`nD:/.../.../ :"
$objForm.Controls.Add($objLabel1) 

$objTextBox1 = New-Object System.Windows.Forms.TextBox 
$objTextBox1.Location = New-Object System.Drawing.Size(10,60) 
$objTextBox1.Size = New-Object System.Drawing.Size(280,20) 
$objForm.Controls.Add($objTextBox1) 

#Find Server mode

$objLabel2 = New-Object System.Windows.Forms.Label
$objLabel2.Location = New-Object System.Drawing.Size(10,90) 
$objLabel2.Size = New-Object System.Drawing.Size(280,30) 
$objLabel2.Text = "1. * - по всем серверам.`n2. Укажите Сервер."
$objForm.Controls.Add($objLabel2) 

$objTextBox2 = New-Object System.Windows.Forms.TextBox 
$objTextBox2.Location = New-Object System.Drawing.Size(10,120) 
$objTextBox2.Size = New-Object System.Drawing.Size(280,30) 
$objForm.Controls.Add($objTextBox2)

#Type Events Mode

$objLabel3 = New-Object System.Windows.Forms.Label
$objLabel3.Location = New-Object System.Drawing.Size(10,150) 
$objLabel3.Size = New-Object System.Drawing.Size(280,45) 
$objLabel3.Text = "1. * - по всем событиям.`n2. Укажите событие.`n3. Перечислите через запятую события"
$objForm.Controls.Add($objLabel3) 

$objTextBox3 = New-Object System.Windows.Forms.TextBox 
$objTextBox3.Location = New-Object System.Drawing.Size(10,195) 
$objTextBox3.Size = New-Object System.Drawing.Size(280,30) 
$objForm.Controls.Add($objTextBox3)

#Date Events mode

$objLabel4 = New-Object System.Windows.Forms.Label
$objLabel4.Location = New-Object System.Drawing.Size(10,225) 
$objLabel4.Size = New-Object System.Drawing.Size(280,60) 
$objLabel4.Text = "1. * - за весь период.`n2. Укажите дату в формате ДД.ММ.ГГГГ.`n3. Укажите интервал в формате ДД.ММ.ГГГГ-ДД.ММ.ГГГГ"
$objForm.Controls.Add($objLabel4) 

$objTextBox4 = New-Object System.Windows.Forms.TextBox 
$objTextBox4.Location = New-Object System.Drawing.Size(10,285) 
$objTextBox4.Size = New-Object System.Drawing.Size(280,30) 
$objForm.Controls.Add($objTextBox4)

#Save Result

$objLabel5 = New-Object System.Windows.Forms.Label
$objLabel5.Location = New-Object System.Drawing.Size(10,315) 
$objLabel5.Size = New-Object System.Drawing.Size(280,30) 
$objLabel5.Text = "Путь для сохранения результата поиска"
$objForm.Controls.Add($objLabel5) 

$objTextBox5 = New-Object System.Windows.Forms.TextBox 
$objTextBox5.Location = New-Object System.Drawing.Size(10,345) 
$objTextBox5.Size = New-Object System.Drawing.Size(280,30) 
$objForm.Controls.Add($objTextBox5)

# Кнопки ОК и Отмена. Обработчки добавлен только на нажатие кнопки ОК. 

$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(75,380)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($OKButton)
$OKButton.DialogResult=[System.Windows.Forms.DialogResult]::OK

$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Size(150,380)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Cancel"
$CancelButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($CancelButton)

$objForm.Topmost = $True

$objForm.Add_Shown({$objForm.Activate()})
$dialogResult =  $objForm.ShowDialog()
# Описание интерфейса закончено

Получаем введенные данные:

# Определяем входящие параметры
if ($dialogResult -eq "OK"){
    $Log_Path       = $objTextBox1.Text
    $FindServerMode = $objTextBox2.Text
    $TypeEventsMode = $objTextBox3.Text
    $DateEventsmode = $objTextBox4.Text
    $SaveResult     = $objTextBox5.Text
}

Если в поле дата есть символ «-«, значит введен интервал, если этот символ введен ошибочно — ваши проблемы. Проводим сепарацию по символу «-«, определяем начальную и конечную дату диапазона.

if ($DateEventsmode -match "-"){
    $x = $DateEventsmode.split("-")
    $StartDate = $x[0]
    $EndDate = $x[1]
    $StartDate = [DateTime]::parse($StartDate)
    $StartDate 
    $EndDate = [DateTime]::parse($EndDate)
    $EndDate
}

Если во введенном поле нет ни «-«, ни «*», то значит введена конкретная дата.

if ($DateEventsmode -notmatch "-" -and $DateEventsmode -ne "*"){
    $StartDate1 = [DateTime]::parse($DateEventsmode)
}

1. Поиск по всем серверам, по всем событиям, за весь период:

if ($FindServerMode -eq "*" -and $DateEventsmode -eq "*" -and $TypeEventsMode -eq "*" -and $Log_Path -ne ""){
Write-host "вошли в 1"
     $ALL_LOGS = Get-ChildItem -Path $Log_Path -recurse| Where {$_.Extension -eq ".evtx"} | Sort LastWriteTime
     $ALL_LOGS
     foreach ($Log in $ALL_LOGS){
        $LogFile = "Audit EventLog Security" +"`n"
        ($Log).FullName
        $MyFilter = @{Path=($Log).FullName}
        $i=0
        Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
        ForEach ($Raw_Event in $Events){
        	    
           Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
           
           $Event = @{}
           ForEach ($object in $EventXML.Event.EventData.Data) {
              $Event.Add($object.name,$object.'#text')
           }
           $Event.Add("ID",$Raw_Event.ID)
           $Event.Add("TimeCreated",$Raw_Event.TimeCreated) 
           $LogFile+= "EventID:            " + $Raw_Event.ID                      +"`n"
           $LogFile+= "Target User Name:   " + $Event.TargetUserName                +"`n"
           $LogFile+= "Target Domain Name: " + $Event.TargetDomainName              +"`n"
           $LogFile+= "Status:             " + $Event.Status                        +"`n"
           $LogFile+= "TimeGenerated:      " + $Event.TimeCreated                   +"`n"
           $LogFile+= "Workstation Name:   " + $Event.WorkstationName               +"`n"
           $LogFile+= "IpAddress:          " + $Event.IpAddress                     +"`n"
           $LogFile+= "Computer:           " + [xml]$Raw_Event.ToXML().Event.System.Computer                     +"`n"
           $Reason = DefineReason -Id $Raw_Event.ID
           $AccessM = DefineReasonByAccessMask -AccessMask $Event.Status  
           $LogFile+= "Reason(RU):         " + $Reason  + " "+  $AccessM            +"`n"
           $LogFile+= "Reason(SYS):        " + $Event.Message                      +"`n"
           $LogFile+= "----------------------------------------------------------------`n"
           $i++ 
        }   
     }
}

2. Поиск по всем серверам, по фильтру событий, за весь период:

if ($FindServerMode -eq "*" -and $DateEventsmode -eq "*" -and $TypeEventsMode -ne "*" -and $Log_Path -ne ""){
Write-host "вошли в 2"
         $ALL_LOGS = Get-ChildItem -Path $Log_Path | Where {$_.Extension -eq ".evtx"} | Sort LastWriteTime
         $ALL_LOGS
         foreach ($Log in $ALL_LOGS){
            $LogFile = "Audit EventLog Security" +"`n"
            ($Log).FullName
            $MyFilter = @{Path=($Log).FullName;ID=$TypeEventsMode}
            Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
            ForEach ($Raw_Event in $Events){	    
               Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
               $Event = @{}
               ForEach ($object in $EventXML.Event.EventData.Data) {
                  $Event.Add($object.name,$object.'#text')
               }

               $Event.Add("ID",$Raw_Event.ID)
               $Event.Add("TimeCreated",$Raw_Event.TimeCreated)

               $LogFile+= "EventID:            " + $Event.ID                       +"`n"
               $LogFile+= "Target User Name:   " + $Event.TargetUserName                +"`n"
               $LogFile+= "Target Domain Name: " + $Event.TargetDomainName              +"`n"
               $LogFile+= "Status:             " + $Event.Status                        +"`n"
               $LogFile+= "TimeGenerated:      " + $Event.TimeCreated                   +"`n"
               $LogFile+= "Workstation Name:   " + $Event.WorkstationName               +"`n"
               $LogFile+= "IpAddress:          " + $Event.IpAddress                     +"`n"
               $LogFile+= "Computer:           " + [xml]$Raw_Event.ToXML().Event.System.Computer                     +"`n"
               $Reason = DefineReason -Id $Raw_Event.ID
               $AccessM = DefineReasonByAccessMask -AccessMask $Event.Status  
               $LogFile+= "Reason(RU):         " + $Reason  + " "+  $AccessM            +"`n"
               $LogFile+= "Reason(SYS):        " + $Event.Message                      +"`n"
               $LogFile+= "----------------------------------------------------------------`n" 
            }
         }
     }

3. Поиск по всем серверам, по всем событиям, за диапазон:

if ($FindServerMode -eq "*" -and $DateEventsmode -match "-" -and $TypeEventsMode -eq "*" -and $Log_Path -ne ""){
Write-host "вошли в 3"
        $ALL_LOGS = Get-ChildItem -Path $Log_Path -Recurse| Where {$_.Extension -eq ".evtx" } | Sort LastWriteTime
        $ALL_LOGS
        foreach ($Log in $ALL_LOGS){
           $LogFile = "Audit EventLog Security" +"`n"
           ($Log).FullName
           $StartDate
           $EndDate
           $MyFilter = @{Path=($Log).FullName}
           Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
           ForEach ($Raw_Event in $Events){	    
              Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
              $Event = @{}
              ForEach ($object in $EventXML.Event.EventData.Data) {
                 $Event.Add($object.name,$object.'#text')
              }

              $Event.Add("ID",$Raw_Event.ID)
              $Event.Add("TimeCreated",$Raw_Event.TimeCreated)
              $Event.TimeCreated
              if ($Event.TimeCreated -gt $StartDate -and $Event.TimeCreated -lt $EndDate){
                   $LogFile+= "EventID:            " + $Raw_Event.ID                      +"`n"
                   $LogFile+= "Target User Name:   " + $Event.TargetUserName                +"`n"
                   $LogFile+= "Target Domain Name: " + $Event.TargetDomainName              +"`n"
                   $LogFile+= "Status:             " + $Event.Status                        +"`n"
                   $LogFile+= "TimeGenerated:      " + $Event.TimeCreated                   +"`n"
                   $LogFile+= "Workstation Name:   " + $Event.WorkstationName               +"`n"
                   $LogFile+= "IpAddress:          " + $Event.IpAddress                     +"`n"
                   $LogFile+= "Computer:           " + [xml]$Raw_Event.ToXML().Event.System.Computer                     +"`n"
                   $Reason = DefineReason -Id $Raw_Event.ID
                   $AccessM = DefineReasonByAccessMask -AccessMask $Event.Status  
                   $LogFile+= "Reason(RU):         " + $Reason  + " "+  $AccessM            +"`n"
                   $LogFile+= "Reason(SYS):        " + $Event.Message                      +"`n"
                   $LogFile+= "----------------------------------------------------------------`n"
              }
            }
         }
     }

4. Поиск по всем серверам, по всем событиям, за определенную дату:

if ($FindServerMode -eq "*" -and $DateEventsmode -notmatch "-"  -and $DateEventsmode -ne "*" -and $TypeEventsMode -eq "*" -and $Log_Path -ne ""){
Write-host "вошли в 5"
    $ALL_LOGS = Get-ChildItem -Path $Log_Path -Recurse| Where {$_.Extension -eq ".evtx" -and $StartDate1 -ne "null" } | Sort LastWriteTime
    $ALL_LOGS
    foreach ($Log in $ALL_LOGS){
       $LogFile = "Audit EventLog Security" +"`n"
       ($Log).FullName
       $Log.LastWriteTime
       $StartDate
       $EndDate
       $MyFilter = @{Path=($Log).FullName}
       Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
       ForEach ($Raw_Event in $Events){	    
       Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
       $Event = @{}
       ForEach ($object in $EventXML.Event.EventData.Data) {
          $Event.Add($object.name,$object.'#text')
       }

       $Event.Add("ID",$Raw_Event.ID)
       $Event.Add("TimeCreated",$Raw_Event.TimeCreated)

       if ($Event.TimeCreated.Day -eq $StartDate1.Day -and $Event.TimeCreated.Month -eq $StartDate1.Month -and $Event.TimeCreated.Year -eq $StartDate1.Year){
            $LogFile+= "EventID:            " + $Raw_Event.ID                      +"`n"
            $LogFile+= "Target User Name:   " + $Event.TargetUserName                +"`n"
            $LogFile+= "Target Domain Name: " + $Event.TargetDomainName              +"`n"
            $LogFile+= "Status:             " + $Event.Status                        +"`n"
            $LogFile+= "TimeGenerated:      " + $Event.TimeCreated                   +"`n"
            $LogFile+= "Workstation Name:   " + $Event.WorkstationName               +"`n"
            $LogFile+= "IpAddress:          " + $Event.IpAddress                     +"`n"
            $LogFile+= "Computer:           " + [xml]$Raw_Event.ToXML().Event.System.Computer                      +"`n"
            $Reason = DefineReason -Id $Raw_Event.ID
            $AccessM = DefineReasonByAccessMask -AccessMask $Event.Status  
            $LogFile+= "Reason(RU):         " + $Reason  + " "+  $AccessM            +"`n"
            $LogFile+= "Reason(SYS):        " + $Event.Message                      +"`n"
            $LogFile+= "----------------------------------------------------------------`n"
        }
     }
   }
}

5. Поиск по всем серверам, по фильтру событий, за определенный период:

if ($FindServerMode -eq "*"  -and $DateEventsmode -match "-" -and $DateEventsmode -ne "*" -and $TypeEventsMode -ne "*" -and $Log_Path -ne ""){
Write-host "вошли в 4"
     $ALL_LOGS = Get-ChildItem -Path $Log_Path -Recurse| Where {$_.Extension -eq ".evtx" -and $StartDate1 -ne ""} | Sort LastWriteTime
     $ALL_LOGS
     foreach ($Log in $ALL_LOGS){
        $LogFile = "Audit EventLog Security" +"`n"
        ($Log).FullName
        $Log.LastWriteTime
        $StartDate
        $EndDate
        $MyFilter = @{Path=($Log).FullName;ID=$TypeEventsMode}
        Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
        ForEach ($Raw_Event in $Events){	    
        Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
        $Event = @{}
        ForEach ($object in $EventXML.Event.EventData.Data) {
           $Event.Add($object.name,$object.'#text')
        }

        $Event.Add("ID",$Raw_Event.ID)
        $Event.Add("TimeCreated",$Raw_Event.TimeCreated)

        if ($Event.TimeCreated.Day -eq $StartDate1.Day -and $Event.TimeCreated.Month -eq $StartDate1.Month -and $Event.TimeCreated.Year -eq $StartDate1.Year){
            $LogFile+= "EventID:            " + $Raw_Event.ID                      +"`n"
            $LogFile+= "Target User Name:   " + $Event.TargetUserName                +"`n"
            $LogFile+= "Target Domain Name: " + $Event.TargetDomainName              +"`n"
            $LogFile+= "Status:             " + $Event.Status                        +"`n"
            $LogFile+= "TimeGenerated:      " + $Event.TimeCreated                   +"`n"
            $LogFile+= "Workstation Name:   " + $Event.WorkstationName               +"`n"
            $LogFile+= "IpAddress:          " + $Event.IpAddress                     +"`n"
            $LogFile+= "Computer:           " + [xml]$Raw_Event.ToXML().Event.System.Computer                      +"`n"
            $Reason = DefineReason -Id $Raw_Event.ID
            $AccessM = DefineReasonByAccessMask -AccessMask $Event.Status  
            $LogFile+= "Reason(RU):         " + $Reason  + " "+  $AccessM            +"`n"
            $LogFile+= "Reason(SYS):        " + $Event.Message                      +"`n"
            $LogFile+= "----------------------------------------------------------------`n"
         }  
     }
  }              
}             

6. Поиск по всем серверам, по фильтру событий, за определенную дату:

if ($FindServerMode -eq "*" -and $TypeEventsMode -ne "*" -and $DateEventsmode -notmatch "-"  -and $DateEventsmode -ne "*" -and $Log_Path -ne "") {
Write-host "вошли в 6"
    $ALL_LOGS = Get-ChildItem -Path $Log_Path -Recurse| Where {$_.Extension -eq ".evtx" -and $StartDate1 -ne "" } | Sort LastWriteTime
    $ALL_LOGS
    foreach ($Log in $ALL_LOGS){
       $LogFile = "Audit EventLog Security" +"`n"
       ($Log).FullName
       $Log.LastWriteTime
       $StartDate
       $EndDate
       $MyFilter = @{Path=($Log).FullName;ID=$TypeEventsMode}
       Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
       ForEach ($Raw_Event in $Events){	    
          Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
          $Event = @{}
          ForEach ($object in $EventXML.Event.EventData.Data) {
             $Event.Add($object.name,$object.'#text')
          }

          $Event.Add("ID",$Raw_Event.ID)
          $Event.Add("TimeCreated",$Raw_Event.TimeCreated)

          if ($Event.TimeCreated.Day -eq $StartDate1.Day -and $Event.TimeCreated.Month -eq $StartDate1.Month -and $Event.TimeCreated.Year -eq $StartDate1.Year){
              $LogFile+= "EventID:            " + $Raw_Event.ID                      +"`n"
              $LogFile+= "Target User Name:   " + $Event.TargetUserName                +"`n"
              $LogFile+= "Target Domain Name: " + $Event.TargetDomainName              +"`n"
              $LogFile+= "Status:             " + $Event.Status                        +"`n"
              $LogFile+= "TimeGenerated:      " + $Event.TimeCreated                   +"`n"
              $LogFile+= "Workstation Name:   " + $Event.WorkstationName               +"`n"
              $LogFile+= "IpAddress:          " + $Event.IpAddress                     +"`n"
              $LogFile+= "Computer:           " + [xml]$Raw_Event.ToXML().Event.System.Computer                      +"`n"
              $Reason = DefineReason -Id $Raw_Event.ID
              $AccessM = DefineReasonByAccessMask -AccessMask $Event.Status  
              $LogFile+= "Reason(RU):         " + $Reason  + " "+  $AccessM            +"`n"
              $LogFile+= "Reason(SYS):        " + $Event.Message                      +"`n"
              $LogFile+= "----------------------------------------------------------------`n"
           }
       } 
     }            
  }

7. Поиск на определенном, сервере поиск по всем событиям, за весь период:

if ($FindServerMode -ne "*" -and $DateEventsmode -eq "*" -and $TypeEventsMode -eq "*" -and $Log_Path -ne ""){
Write-host "вошли в 7"
    $ALL_LOGS = Get-ChildItem -Path $Log_Path -Recurse| Where {$_.Extension -eq ".evtx" -and $_.FullName -match $FindServerMode} | Sort LastWriteTime
    $ALL_LOGS
    foreach ($Log in $ALL_LOGS){
       $LogFile = "Audit EventLog Security" +"`n"
       ($Log).FullName
       $MyFilter = @{Path=($Log).FullName}
       Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
       ForEach ($Raw_Event in $Events){	    
          Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
          $Event = @{}
          ForEach ($object in $EventXML.Event.EventData.Data) {
             $Event.Add($object.name,$object.'#text')
          }

          $Event.Add("ID",$Raw_Event.ID)
          $Event.Add("TimeCreated",$Raw_Event.TimeCreated)

          $LogFile+= "EventID:            " + $Raw_Event.ID                      +"`n"
          $LogFile+= "Target User Name:   " + $Event.TargetUserName                +"`n"
          $LogFile+= "Target Domain Name: " + $Event.TargetDomainName              +"`n"
          $LogFile+= "Status:             " + $Event.Status                        +"`n"
          $LogFile+= "TimeGenerated:      " + $Event.TimeCreated                   +"`n"
          $LogFile+= "Workstation Name:   " + $Event.WorkstationName               +"`n"
          $LogFile+= "IpAddress:          " + $Event.IpAddress                     +"`n"
          $LogFile+= "Computer:           " + [xml]$Raw_Event.ToXML().Event.System.Computer                      +"`n"
          $Reason = DefineReason -Id $Raw_Event.ID
          $AccessM = DefineReasonByAccessMask -AccessMask $Event.Status  
          $LogFile+= "Reason(RU):         " + $Reason  + " "+  $AccessM            +"`n"
          $LogFile+= "Reason(SYS):        " + $Event.Message                      +"`n"
          $LogFile+= "----------------------------------------------------------------`n"
        }
    }          
}

8. Поиск на определенном сервере, по фильтру событий, за весь период:

if ($FindServerMode -ne "*" -and $DateEventsmode -eq "*" -and $TypeEventsMode -ne "*" -and $Log_Path -ne ""){
     Write-host "вошли в 8"
     $ALL_LOGS = Get-ChildItem -Path $Log_Path -Recurse| Where {$_.Extension -eq ".evtx" -and $_.FullName -match $FindServerMode} | Sort LastWriteTime
     
     $ALL_LOGS
     foreach ($Log in $ALL_LOGS){
     $LogFile = "Audit EventLog Security" +"`n"
     ($Log).FullName
     $MyFilter = @{Path=($Log).FullName;ID=$TypeEventsMode}
     Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
     ForEach ($Raw_Event in $Events){	    
        Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
        $Event = @{}
        ForEach ($object in $EventXML.Event.EventData.Data) {
           $Event.Add($object.name,$object.'#text')
        }

        $Event.Add("ID",$Raw_Event.ID)
        $Event.Add("TimeCreated",$Raw_Event.TimeCreated)

        $LogFile+= "EventID:            " + $Event.ID                       +"`n"
        $LogFile+= "Target User Name:   " + $Event.TargetUserName                +"`n"
        $LogFile+= "Target Domain Name: " + $Event.TargetDomainName              +"`n"
        $LogFile+= "Status:             " + $Event.Status                        +"`n"
        $LogFile+= "TimeGenerated:      " + $Event.TimeCreated                   +"`n"
        $LogFile+= "Workstation Name:   " + $Event.WorkstationName               +"`n"
        $LogFile+= "IpAddress:          " + $Event.IpAddress                     +"`n"
        $LogFile+= "Computer:           " + [xml]$Raw_Event.ToXML().Event.System.Computer                      +"`n"
        $Reason = DefineReason -Id $Raw_Event.ID
        $AccessM = DefineReasonByAccessMask -AccessMask $Event.Status  
        $LogFile+= "Reason(RU):         " + $Reason  + " "+  $AccessM            +"`n"
        $LogFile+= "Reason(SYS):        " + $Event.Message                      +"`n"
        $LogFile+= "----------------------------------------------------------------`n"
     }    
   }
}

9. Поиск на конкретном сервере, по всем событиям, за период:

if ($FindServerMode -ne "*"-and $DateEventsmode -match "-" -and $TypeEventsMode -eq "*" -and $Log_Path -ne ""){
Write-host "вошли в 9"
    $ALL_LOGS = Get-ChildItem -Path $Log_Path -Recurse| Where {$_.Extension -eq ".evtx" -and $_.FullName -match $FindServerMode -and $StartDate -ne "null" -and $EndDate -ne "null"} | Sort LastWriteTime
    $ALL_LOGS
    foreach ($Log in $ALL_LOGS){
       $LogFile = "Audit EventLog Security" +"`n"
       ($Log).FullName
       $Log.LastWriteTime
       $StartDate
       $EndDate
       $MyFilter = @{Path=($Log).FullName}
       Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
       ForEach ($Raw_Event in $Events){	    
          Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
          $Event = @{}
          ForEach ($object in $EventXML.Event.EventData.Data) {
             $Event.Add($object.name,$object.'#text')
          }

          $Event.Add("ID",$Raw_Event.ID)
          $Event.Add("TimeCreated",$Raw_Event.TimeCreated)

          if ($Event.TimeCreated -gt $StartDate -and $Event.TimeCreated -lt $EndDate){
              $LogFile+= "EventID:            " + $Raw_Event.ID                      +"`n"
              $LogFile+= "Target User Name:   " + $Event.TargetUserName                +"`n"
              $LogFile+= "Target Domain Name: " + $Event.TargetDomainName              +"`n"
              $LogFile+= "Status:             " + $Event.Status                        +"`n"
              $LogFile+= "TimeGenerated:      " + $Event.TimeCreated                   +"`n"
              $LogFile+= "Workstation Name:   " + $Event.WorkstationName               +"`n"
              $LogFile+= "IpAddress:          " + $Event.IpAddress                     +"`n"
              $LogFile+= "Computer:           " + [xml]$Raw_Event.ToXML().Event.System.Computer                      +"`n"
              $Reason = DefineReason -Id $Raw_Event.ID
              $AccessM = DefineReasonByAccessMask -AccessMask $Event.Status  
              $LogFile+= "Reason(RU):         " + $Reason  + " "+  $AccessM            +"`n"
              $LogFile+= "Reason(SYS):        " + $Event.Message                      +"`n"
              $LogFile+= "----------------------------------------------------------------`n"
           }
        }
    }
}

10. Поиск на конкретном сервере, по фильтру событий, за период:

if ($FindServerMode -ne "*"  -and $DateEventsmode -match "-" -and $DateEventsmode -ne "*" -and $TypeEventsMode -ne "*" -and $Log_Path -ne ""){
Write-host "вошли в 10"
    $ALL_LOGS = Get-ChildItem -Path $Log_Path | Where {$_.Extension -eq ".evtx" -and  $_.FullName -match $FindServerMode -and $StartDate -ne "null" -and $EndDate -ne "null"} | Sort LastWriteTime
    $ALL_LOGS
    foreach ($Log in $ALL_LOGS){
       $LogFile = "Audit EventLog Security" +"`n"
       ($Log).FullName
       $Log.LastWriteTime
       $StartDate
       $EndDate
       $MyFilter = @{Path=($Log).FullName;ID=$TypeEventsMode}
       Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
       ForEach ($Raw_Event in $Events){	    
          Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
          $Event = @{}
          ForEach ($object in $EventXML.Event.EventData.Data) {
             $Event.Add($object.name,$object.'#text')
          }

          $Event.Add("ID",$Raw_Event.ID)
          $Event.Add("TimeCreated",$Raw_Event.TimeCreated)
                        
          if ($Event.TimeCreated -gt $StartDate -and $Event.TimeCreated -lt $EndDate){
               $LogFile+= "EventID:            " + $Raw_Event.ID                      +"`n"
               $LogFile+= "Target User Name:   " + $Event.TargetUserName                +"`n"
               $LogFile+= "Target Domain Name: " + $Event.TargetDomainName              +"`n"
               $LogFile+= "Status:             " + $Event.Status                        +"`n"
               $LogFile+= "TimeGenerated:      " + $Event.TimeCreated                   +"`n"
               $LogFile+= "Workstation Name:   " + $Event.WorkstationName               +"`n"
               $LogFile+= "IpAddress:          " + $Event.IpAddress                     +"`n"
               $LogFile+= "Computer:           " + [xml]$Raw_Event.ToXML().Event.System.Computer                      +"`n"
               $Reason = DefineReason -Id $Raw_Event.ID
               $AccessM = DefineReasonByAccessMask -AccessMask $Event.Status  
               $LogFile+= "Reason(RU):         " + $Reason  + " "+  $AccessM            +"`n"
               $LogFile+= "Reason(SYS):        " + $Event.Message                      +"`n"
               $LogFile+= "----------------------------------------------------------------`n"
           }
        }
     }
 }

11. Поиск по конкретному серверу, по всем событиям, за определенную дату:

if ($FindServerMode -ne "*" -and $DateEventsmode -notmatch "-"  -and $DateEventsmode -ne "*" -and $TypeEventsMode -eq "*" -and $Log_Path -ne ""){
 Write-host "вошли в 11"
      $ALL_LOGS = Get-ChildItem -Path $Log_Path -Recurse| Where {$_.Extension -eq ".evtx" -and $StartDate1 -ne "null" } | Sort LastWriteTime
      $ALL_LOGS
      foreach ($Log in $ALL_LOGS){
         $LogFile = "Audit EventLog Security" +"`n"
         ($Log).FullName
         $Log.LastWriteTime
         $StartDate
         $EndDate
         $MyFilter = @{Path=($Log).FullName}
         Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
         ForEach ($Raw_Event in $Events){	    
            Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
            $Event = @{}
            ForEach ($object in $EventXML.Event.EventData.Data) {
               $Event.Add($object.name,$object.'#text')
            }

            $Event.Add("ID",$Raw_Event.ID)
            $Event.Add("TimeCreated",$Raw_Event.TimeCreated)

            if ($Event.TimeCreated.Day -eq $StartDate1.Day -and $Event.TimeCreated.Month -eq $StartDate1.Month -and $Event.TimeCreated.Year -eq $StartDate1.Year){
                 $LogFile+= "EventID:            " + $Raw_Event.ID                      +"`n"
                 $LogFile+= "Target User Name:   " + $Event.TargetUserName                +"`n"
                 $LogFile+= "Target Domain Name: " + $Event.TargetDomainName              +"`n"
                 $LogFile+= "Status:             " + $Event.Status                        +"`n"
                 $LogFile+= "TimeGenerated:      " + $Event.TimeCreated                   +"`n"
                 $LogFile+= "Workstation Name:   " + $Event.WorkstationName               +"`n"
                 $LogFile+= "IpAddress:          " + $Event.IpAddress                     +"`n"
                 $LogFile+= "Computer:           " + [xml]$Raw_Event.ToXML().Event.System.Computer                      +"`n"
                 $Reason = DefineReason -Id $Raw_Event.ID
                 $AccessM = DefineReasonByAccessMask -AccessMask $Event.Status  
                 $LogFile+= "Reason(RU):         " + $Reason  + " "+  $AccessM            +"`n"
                 $LogFile+= "Reason(SYS):        " + $Event.Message                      +"`n"
                 $LogFile+= "----------------------------------------------------------------`n"
              }
            }          
        }
  }

12. Поиск по конкретному серверу, по фильтру событий, за определенную дату:

if ($FindServerMode -ne "*" -and $TypeEventsMode -ne "*" -and $DateEventsmode -notmatch "-"  -and $DateEventsmode -ne "*" -and $Log_Path -ne ""){
 Write-host "вошли в 12"
     $ALL_LOGS = Get-ChildItem -Path $Log_Path -Recurse| Where {$_.Extension -eq ".evtx" -and $StartDate1 -ne "null" } | Sort LastWriteTime
     $ALL_LOGS
     foreach ($Log in $ALL_LOGS){
        $LogFile = "Audit EventLog Security" +"`n"
        ($Log).FullName
        $Log.LastWriteTime
        $StartDate
        $EndDate
        $MyFilter = @{Path=($Log).FullName;ID=$TypeEventsMode}
        Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
        ForEach ($Raw_Event in $Events){	    
           Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
           $Event = @{}
           ForEach ($object in $EventXML.Event.Message) {
              $Event.Add($object.name,$object.'#text')
           }

           $Event.Add("ID",$Raw_Event.ID)
           $Event.Add("TimeCreated",$Raw_Event.TimeCreated)
           $Event
           if ($Event.TimeCreated.Day -eq $StartDate1.Day -and $Event.TimeCreated.Month -eq $StartDate1.Month -and $Event.TimeCreated.Year -eq $StartDate1.Year){
                $LogFile+= "EventID:            " + $Raw_Event.ID                      +"`n"
                $LogFile+= "Target User Name:   " + $Event.TargetUserName                +"`n"
                $LogFile+= "Target Domain Name: " + $Event.TargetDomainName              +"`n"
                $LogFile+= "Status:             " + $Event.Status                        +"`n"
                $LogFile+= "TimeGenerated:      " + $Event.TimeCreated                   +"`n"
                $LogFile+= "Workstation Name:   " + $Event.WorkstationName               +"`n"
                $LogFile+= "IpAddress:          " + $Event.IpAddress                     +"`n"
                $LogFile+= "Computer:           " + [xml]$Raw_Event.ToXML().Event.System.Computer                      +"`n"
                $Reason = DefineReason -Id $Raw_Event.ID
                $AccessM = DefineReasonByAccessMask -AccessMask $Event.Status  
                $LogFile+= "Reason(RU):         " + $Reason  + " "+  $AccessM            +"`n"
                $LogFile+= "Reason(SYS):        " + $Event.Message                      +"`n"
                $LogFile+= "----------------------------------------------------------------`n"
           }
        } 
     }
}

В конце месяца (период индивидуально задается администраторами) журнал безопасности архивируется на сервер-хранилище, с указанием имени сервера и даты архивации.

После того как мы описали все варианты поиска событий. Полученный результат нам необходимо сохранить в файл, путь к которому прописал пользователь в последнем поле. Если путь задан, то результат сохраняется в файл. После отработки скрипта файл автоматически запускается. Если путь для сохранения результата не задан, то лог будет сохранен в рабочем каталоге под именем «log.log».

if ($SaveResult -ne ""){
   $LogFile | Out-File $SaveResult -Encoding utf8
   Invoke-Item  $SaveResult
   $Event2= @{}
   $Event = @{}
   $Log_Path=""

}
else{
   $LogFile | Out-File ".log.log" -Encoding utf8
   Write-Host $LogFile
   $Event2= @{}
   $Event = @{}
   $Log_Path=""
}

Спасибо за внимание.

Во время написания скрипта очень полезной оказалась статья «PowerShell и аудит безопасности», спасибо автору.

  • Remove From My Forums

 locked

Event Log — List of evtx files — content meanning

  • Question

  • Hello team,

    I would like to know, what can I find in files placed into C:WindowsSystem32winevtLogs .

    The list is below.

    I know that :

    — Application.evtx contains application events.

    — System.evtx contans system events.

    /../ But what about:

    — Microsoft-Windows-Dhcp-Client%4Admin.evtx ?? Or another from list ?

    Is there any knowledgebase?

    I am interested in Windows 7, 8, 8.1 and 10 (the most) version.

    Directory of C:WindowsSystem32winevtLogs

    19.05.2016  12:52    <DIR>          .
    19.05.2016  12:52    <DIR>          ..
    07.07.2016  13:57         1 048 576 AirSpaceChannel.etl
    07.07.2016  11:09        13 701 120 Application.evtx
    19.05.2016  12:26             4 096 DebugChannel.etl
    11.04.2016  16:19            69 632 HardwareEvents.evtx
    11.04.2016  16:19            69 632 Internet Explorer.evtx
    07.07.2016  11:39            69 632 isaAgentLog.evtx
    11.04.2016  16:19            69 632 Key Management Service.evtx
    07.07.2016  19:52         1 052 672 Microsoft-Client-Licensing-Platform%4Admin.evtx
    07.07.2016  11:07             4 096 Microsoft-RMS-MSIPC%4Debug.etl
    07.07.2016  11:09         1 052 672 Microsoft-Windows-AAD%4Operational.evtx
    12.04.2016  10:06            69 632 Microsoft-Windows-All-User-Install-Agent%4Admin.evtx
    17.05.2016  11:57            69 632 Microsoft-Windows-AllJoyn%4Operational.evtx
    17.05.2016  11:57            69 632 Microsoft-Windows-AppHost%4Admin.evtx

    /…/

    07.07.2016  11:09         9 506 816 Security.evtx
    26.06.2016  11:18            69 632 Setup.evtx
    17.05.2016  11:57            69 632 SMSApi.evtx
    10.07.2016  23:56         6 361 088 System.evtx
    04.07.2016  12:12         2 166 784 Windows PowerShell.evtx
                 291 File(s)    162 209 792 bytes
                   2 Dir(s)  213 417 062 400 bytes free

Answers

  • Hi,

    Windows Logs

    The Windows Logs category includes the logs that were available on previous versions of Windows: the Application, Security, and System logs. It also includes two new logs: the Setup log and the
    ForwardedEvents log. Windows logs are intended to store events from legacy applications and events that apply to the entire system.

    Application log

    The Application log contains events logged by applications or programs. For example, a database program might record a file error in the application log. Program developers decide which events
    to log.

    Security log

    The Security log contains events such as valid and invalid logon attempts, as well as events related to resource use, such as creating, opening, or deleting files or other objects. Administrators
    can specify what events are recorded in the security log. For example, if you have enabled logon auditing, attempts to log on to the system are recorded in the security log.

    Setup log

    The Setup log contains events related to application setup.

    System log

    The System log contains events logged by Windows system components. For example, the failure of a driver or other system component to load during startup is recorded in the system log. The event
    types logged by system components are predetermined by Windows.

    ForwardedEvents log

    The ForwardedEvents log is used to store events collected from remote computers. To collect events from remote computers, you must create an event subscription. To learn about event subscriptions,
    see Event Subscriptions.

    Applications and Services Logs

    Applications and Services logs are a new category of event logs. These logs store events from a single application or component rather than events that might have system wide impact.

    This log was named by the Windows components or services (services.msc)

    These logs in Event viewer corresponds evtx file under the system folder as you mentioned.


    Please
    mark the reply as an answer if you find it is helpful.

    If you have feedback for TechNet Support, contact
    tnmff@microsoft.com

    • Edited by

      Thursday, July 14, 2016 7:13 AM

    • Proposed as answer by
      Kate LiMicrosoft employee
      Tuesday, July 19, 2016 7:42 AM
    • Marked as answer by
      ZigZag3143x
      Tuesday, July 19, 2016 10:05 AM

RDP forensic event logs — RDP в журналах событий ОС Windows 10

(статья в стадии написания не окончена)

Журналы событий обеспечивают контрольный журнал, который записывает пользовательские события и действия на компьютере и являются потенциальным источником доказательств в цифровой криминалистике исследования.
В этой статье мы рассмотрим процесс экспертизы событий event logs в Windows 10 Версия 1809 (Сборка ОС 17763.195), 64 и 32 разрядных операционных систем, относящейся к RDP (Remote Desktop Protocol) – специальный протокол, разработанный компанией Microsoft для удаленного управления ОС Windows (протокол удалённого рабочего стола).

Версии Windows начиная с Vista включают ряд новых событий, которые не регистрируются системами Windows XP. Выпуски Windows Server содержат большее количество и типы событий.

журналы событий Windows получили расширение *.EVTX. Этот новый формат, называемый форматом Windows XML Event Log (EVTX), заменяет формат EVT, используемый в Windows XP. Помимо журналов событий начиная с Vista, существуют журналы приложений и служб, которые записывают события о конкретном компоненте или приложении, а не о системе. В системе Windows 7/2008 можно найти много файлов журнала событий в зависимости от ролей, выполняемых системой. Здесь Вы можете найти журналы событий приложений. Например, если в системе есть Symantec Endpoint, у Вас будет файл «Symantec Endpoint Protection Client.evtx». Различные категории описаны

Ссылка скрыта от гостей

К примеру в Windows XP и Server 2003 было 9 категорий, а начиная с Windows Vista их более 50.
C:Windowssystem32>auditpol /get /category:*

Рис.0.jpg

Таким образом, точная идентификация версии операционной системы Windows должна быть очень тщательно продумана при разработке цифрового процесса компьютерно-технической экспертизы, основанного на журналах событий (event logs).
Расположение журналов событий Windows по умолчанию:
Windows 2000/Server2003/Windows XP:
%SystemRoot%System32Config*.evt

Windows Vista/7/Server2008/10/Server2012/Server2016:
%SystemRoot%System32winevtLogs*.evtx

Рис.1.jpg

Расположение журналов может быть изменено пользователем, изменением значения ключа реестра «

File

» в «HKEY_LOCAL_MACHINE» на локальном компьютере:

Рис.2.jpg

Рис.3.jpg

Application Events (События приложения):
КомпьютерHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventLogApplication
Hardware Events (Аппаратные события):
КомпьютерHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventLogHardwareEvents
Security Events (События безопасности):
КомпьютерHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventLogSecurity
System Events (Системные события):
КомпьютерHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventLogSystem

Когда используется пользовательский путь, ключ создается в месте реестра:
КомпьютерHKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionWINEVTChannels[logname]
(например [logname] это: Microsoft-Windows-TerminalServices-LocalSessionManager/Admin)

Рис.4.jpg

Полезные события для криминалистического анализа

Рис.5.jpg

Коды входа в систему.
Одно из важных сведений, предоставляемых событием «Успешный/Неудачный вход в систему», является то, как пользователь/процесс пытался войти в систему (Тип входа в систему), но Windows отображает эту информацию в виде числа.

Рис.6.jpg

RDP Successful Logon — RDP Успешный вход

Рис.7.jpg

Рассмотрим практический пример с ПК physical IP 192.168.10.146 было подключение mstsc.exe к ПК distrusting IP 192.168.10.241 с учетной записью suspect

Осмотр событий ПК к которому мы подключились: host distrusting IP 192.168.10.241

Рассмотрим первое, место расположения Event ID 1149

%SystemRoot%System32WinevtLogsMicrosoft-Windows-TerminalServices-RemoteConnectionManager%4Operational.evtx это у нас Network Connection

Рис.8.jpg

Рис.9.jpg

Рассмотрим второе, место расположения Event ID 4624

%SystemRoot%System32WinevtLogsSecurity.evtx это у нас Authentication

Рис.10.jpg

на screen мы видим «Тип входа» выше есть «Список типа входа и их описание», так же видим host и IP

Рассмотрим третье и четвертое, место расположения Event ID 21 и ID 22

%SystemRoot%System32WinevtLogsMicrosoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx это у нас Logon

Рис.11.jpg

в данном конкретном примере мы видим что пользователь осуществил вход в систему в 13:07, а наше удаленное подключение было в 17:44, но обратите внимание чуть выше в 17:44 есть код event ID 25

Рис.12.jpg

и снова мы наблюдаем IP адрес подключившегося, для сравнения в 17:47 был осуществлен локальный вход в систему, рассмотрим его на screen ниже

Рис.13.jpg

Мы явно видим что вход в систему локальный — Адрес сети источника: ЛОКАЛЬНЫЕ

Осмотр событий ПК c которого осуществилось подключение мы подключились c: host physical IP 192.168.10.146

Event ID 5379

%SystemRoot%System32WinevtLogsSecurity.evtx это у нас запротоколирована по отдельности каждая цифра и символ введенные в GUI mstsc.exe в поле «Компьютер» с 17:43:31 по 17:43:56

Рис.14.jpg

Рис.15.jpg

В коде события 5379 изменяются значения «TargetName» и «Type»

Рис.16.jpg

Рис.17.jpg

Попытка входа в систему с использованием явных учетных данных

Рис.18.jpg

Event ID 4624

Это событие генерируется при создании сеанса входа (на конечном компьютере). Он генерируется на компьютере, к которому был получен доступ, где был создан сеанс.

Рис.19.jpg

Event ID 4672

Это событие генерируется для новых учетных записей, если для нового сеанса входа назначены какие-либо из следующих конфиденциальных привилегий

Рис.20.jpg

SeTcbPrivilege — действует как часть операционной системы
SeBackupPrivilege — Резервное копирование файлов и каталогов
SeCreateTokenPrivilege — создает объект токена
SeDebugPrivilege — отладка программ
SeEnableDelegationPrivilege — позволяет доверять учетные записи компьютеров и пользователей для делегирования.
SeAuditPrivilege — Генерация аудита безопасности
SeImpersonatePrivilege — выдавать себя за клиента после аутентификации
SeLoadDriverPrivilege — загрузка и выгрузка драйверов устройств
SeSecurityPrivilege — Управление журналом аудита и безопасности
SeSystemEnvironmentPrivilege — Изменить значения среды прошивки
SeAssignPrimaryTokenPrivilege — заменяет токен уровня процесса
SeRestorePrivilege — Восстановление файлов и каталогов,
SeTakeOwnershipPrivilege — стать владельцем файлов или других объектов.

P:S

(статья в стадии написания не окончена)

Данная статья будет дополняться и получать новые примеры to by continued…

Иногда система Windows отображает сообщения об ошибках поврежденных или отсутствующих файлов Security.evtx. Подобные ситуации могут возникнуть, например, во время процесса установки программного обеспечения. Каждая программа требует определенных ресурсов, библиотек и исходных данных для правильной работы. Поэтому поврежденный или несуществующий файл Security.evtx может повлиять на неудачное выполнение запущенного процесса.

Файл был разработан Microsoft для использования с программным обеспечением Office. Здесь вы найдете подробную информацию о файле и инструкции, как действовать в случае ошибок, связанных с Security.evtx на вашем устройстве. Вы также можете скачать файл Security.evtx, совместимый с устройствами Windows 10, Windows 10, Windows 8.1, Windows 8, Windows 7, Windows 7, Windows Vista, Windows Vista, Windows 8, которые (скорее всего) позволят решить проблему.

For Windows
Совместим с: Windows 10, Windows 10, Windows 8.1, Windows 8, Windows 7, Windows 7, Windows Vista, Windows Vista, Windows 8

Популярность пользователя

Исправьте ошибки Security.evtx

  • 1 Информация о файле Security.evtx
  • 2 Ошибки, связанные с файлом Security.evtx
  • 3 Как исправить ошибки, связанные с Security.evtx?
    • 3.1 Сканирование на наличие вредоносных программ
    • 3.2 Обновление системы и драйверов
    • 3.3 Инструмент проверки системных файлов
    • 3.4 Восстановление системы
  • 4 Скачать Security.evtx
    • 4.1 Список версий файла Security.evtx

Информация о файле

Основная информация
Имя файла Security.evtx
Расширение файла EVTX
Тип System
Описание Windows 7 Event Log
Программного обеспечения
программа Office 2010
Программного обеспечения Office
автор Microsoft
Версия программного обеспечения 2010
подробности
Размер файла 1118208
Самый старый файл 2017-04-24
Последний файл 2017-05-10

Security.evtx

Наиболее распространенные проблемы с файлом Security.evtx

Существует несколько типов ошибок, связанных с файлом Security.evtx. Файл Security.evtx может находиться в неправильном каталоге файлов на вашем устройстве, может отсутствовать в системе или может быть заражен вредоносным программным обеспечением и, следовательно, работать неправильно. Ниже приведен список наиболее распространенных сообщений об ошибках, связанных с файлом Security.evtx. Если вы найдете один из перечисленных ниже (или похожих), рассмотрите следующие предложения.

  • Security.evtx поврежден
  • Security.evtx не может быть расположен
  • Ошибка выполнения — Security.evtx
  • Ошибка файла Security.evtx
  • Файл Security.evtx не может быть загружен. Модуль не найден
  • невозможно зарегистрировать файл Security.evtx
  • Файл Security.evtx не может быть загружен
  • Файл Security.evtx не существует

Security.evtx

Error

Не удалось запустить приложение, так как отсутствует файл Security.evtx. Переустановите приложение, чтобы решить проблему.

OK

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

Как исправить ошибки Security.evtx всего за несколько шагов?

Ошибки файла Security.evtx могут быть вызваны различными причинами, поэтому полезно попытаться исправить их различными способами.

Шаг 1.. Сканирование компьютера на наличие вредоносных программ.

Virus Scan

Файлы Windows обычно подвергаются атаке со стороны вредоносного программного обеспечения, которое не позволяет им работать должным образом. Первым шагом в решении проблем с файлом Security.evtx или любыми другими системными файлами Windows должно быть сканирование системы на наличие вредоносных программ с использованием антивирусного инструмента.

Если по какой-либо причине в вашей системе еще не установлено антивирусное программное обеспечение, вы должны сделать это немедленно. Незащищенная система не только является источником ошибок в файлах, но, что более важно, делает вашу систему уязвимой для многих опасностей. Если вы не знаете, какой антивирусный инструмент выбрать, обратитесь к этой статье Википедии — сравнение антивирусного программного обеспечения.

Шаг 2.. Обновите систему и драйверы.

Windows Update

Установка соответствующих исправлений и обновлений Microsoft Windows может решить ваши проблемы, связанные с файлом Security.evtx. Используйте специальный инструмент Windows для выполнения обновления.

  1. Откройте меню «Пуск» в Windows.
  2. Введите «Центр обновления Windows» в поле поиска.
  3. Выберите подходящую программу (название может отличаться в зависимости от версии вашей системы)
  4. Проверьте, обновлена ​​ли ваша система. Если в списке есть непримененные обновления, немедленно установите их.
  5. После завершения обновления перезагрузите компьютер, чтобы завершить процесс.

Помимо обновления системы рекомендуется установить последние версии драйверов устройств, так как драйверы могут влиять на правильную работу Security.evtx или других системных файлов. Для этого перейдите на веб-сайт производителя вашего компьютера или устройства, где вы найдете информацию о последних обновлениях драйверов.

Шаг 3.. Используйте средство проверки системных файлов (SFC).

System File Checker

Проверка системных файлов — это инструмент Microsoft Windows. Как следует из названия, инструмент используется для идентификации и адресации ошибок, связанных с системным файлом, в том числе связанных с файлом Security.evtx. После обнаружения ошибки, связанной с файлом %fileextension%, программа пытается автоматически заменить файл Security.evtx на исправно работающую версию. Чтобы использовать инструмент:

  1. Откройте меню «Пуск» в Windows.
  2. Введите «cmd» в поле поиска
  3. Найдите результат «Командная строка» — пока не запускайте его:
  4. Нажмите правую кнопку мыши и выберите «Запуск от имени администратора»
  5. Введите «sfc / scannow» в командной строке, чтобы запустить программу, и следуйте инструкциям.

Шаг 4. Восстановление системы Windows.

Windows Recovery

Другой подход заключается в восстановлении системы до предыдущего состояния до того, как произошла ошибка файла Security.evtx. Чтобы восстановить вашу систему, следуйте инструкциям ниже

  1. Откройте меню «Пуск» в Windows.
  2. Введите «Восстановление системы» в поле поиска.
  3. Запустите средство восстановления системы — его имя может отличаться в зависимости от версии системы.
  4. Приложение проведет вас через весь процесс — внимательно прочитайте сообщения
  5. После завершения процесса перезагрузите компьютер.

Если все вышеупомянутые методы завершились неудачно и проблема с файлом Security.evtx не была решена, перейдите к следующему шагу. Помните, что следующие шаги предназначены только для опытных пользователей

Загрузите и замените файл Security.evtx

Последнее решение — вручную загрузить и заменить файл Security.evtx в соответствующей папке на диске. Выберите версию файла, совместимую с вашей операционной системой, и нажмите кнопку «Скачать». Затем перейдите в папку «Загруженные» вашего веб-браузера и скопируйте загруженный файл Security.evtx.

Перейдите в папку, в которой должен находиться файл, и вставьте загруженный файл. Ниже приведен список путей к каталогу файлов Security.evtx.

  • Windows 10: C:WindowsSystem32winevtLogs
  • Windows 10: C:WindowsSystem32winevtLogs
  • Windows 8.1: C:WindowsSystem32winevtLogs
  • Windows 8: 1: C:WindowsSystem32winevtLogs
  • Windows 7:
  • Windows 7:
  • Windows Vista:
  • Windows Vista:
  • Windows 8:

Если действия не помогли решить проблему с файлом Security.evtx, обратитесь к профессионалу. Существует вероятность того, что ошибка (и) может быть связана с устройством и, следовательно, должна быть устранена на аппаратном уровне. Может потребоваться новая установка операционной системы — неправильный процесс установки системы может привести к потере данных.

Список версий файлов

For Windows 10

Имя файла
Security.evtx

система
Windows 10

Размер файла
1118208 bytes

Дата
2017-05-10

Подробности файла
MD5 15b401fa1b78df8dd292af8c2565a98f
SHA1 63d9f9e38b030b0b00250a5a78106a835145bcb1
SHA256 1bcadd3184daedcc4b2ff0849806a4442ec96f2971bd5a170cda15ad46e77605
CRC32 d026513d
Пример расположения файла C:WindowsSystem32winevtLogs

For Windows 10

Имя файла
Security.evtx

система
Windows 10

Размер файла
1118208 bytes

Дата
2017-04-24

Подробности файла
MD5 4a180ae7f0a95bd5067431347341eeb2
SHA1 0c8fc788e068a887e2c29c94590bc70840f5ab78
SHA256 72ffe7a0a7780a419df8fd53acb93ec096e7d432efa542729068aa995477ea26
CRC32 9e0c799b
Пример расположения файла C:WindowsSystem32winevtLogs

For Windows 8.1

Имя файла
Security.evtx

система
Windows 8.1

Размер файла
1118208 bytes

Дата
2017-04-24

Подробности файла
MD5 3d5615a40659294dc4855b14d815c510
SHA1 c299bdd77f4b8108c754d0a09e264b216277ebe7
SHA256 f33f297196c65849eaee2365da74ae3988d4d3144633b638fb38d41d7042bc54
CRC32 6b1c7355
Пример расположения файла C:WindowsSystem32winevtLogs

For Windows 8

Имя файла
Security.evtx

система
Windows 8

Размер файла
1118208 bytes

Дата
2017-04-24

Подробности файла
MD5 56e4dc75c5e84d73589eef8695817487
SHA1 652d05b8a19f526e69192ce9ed1f9a13cf66668b
SHA256 7bf052ca83ec9150e0cac90d115b2d35c603eddd020ca6c52ea9e434add0bb19
CRC32 6cb8d359
Пример расположения файла 1: C:WindowsSystem32winevtLogs

For Windows 7

Имя файла
Security.evtx

система
Windows 7

Размер файла
1118208 bytes

Дата
2017-05-10

Подробности файла
MD5 6770058e5529a568ac0717d4102a83fc
SHA1 293f2e20ce5ec2e52c4c8951c3cf6f0117c27e9d
SHA256 4e03207bfd13737812f851f60ad6576e2368c288bbcf3856a57c3d3596dab8ad
CRC32 354ea571
Пример расположения файла

For Windows 7

Имя файла
Security.evtx

система
Windows 7

Размер файла
1118208 bytes

Дата
-0001-11-30

Подробности файла
MD5 d332d46c158db5573649060e6919b9c7
SHA1 2380dbc05f3bfd826b9f228dadd49be3bfd54608
SHA256 9b2ced0556f86ae8c79aac285e71b986438bc76a6654cb4239794f350e4a7608
CRC32 f6e5c173
Пример расположения файла

For Windows Vista

Имя файла
Security.evtx

система
Windows Vista

Размер файла
1118208 bytes

Дата
2017-05-10

Подробности файла
MD5 a89566676f587ca974df2c48e2eb520d
SHA1 dafc15e830787f40c128270d25f87c12887fcbf2
SHA256 3b0477861d8da2cb90dc0a7996e6a7fe01aa2eacaf03db5a7930a3408c7ab22f
CRC32 0ba539ac
Пример расположения файла

For Windows Vista

Имя файла
Security.evtx

система
Windows Vista

Размер файла
69632 bytes

Дата
2017-04-24

Подробности файла
MD5 760b287b286b188bfb5e8f9158594545
SHA1 faf574f7e85b7e7d7429f803060ee1b03221cf28
SHA256 3c8386c1f368437b55463e184537193e44b20057d5c665bb14de03e8dad8cb6f
CRC32 35e38a79
Пример расположения файла

For Windows 8

Имя файла
Security.evtx

система
Windows 8

Размер файла
1118208 bytes

Дата
2017-05-10

Подробности файла
MD5 15b401fa1b78df8dd292af8c2565a98f
SHA1 63d9f9e38b030b0b00250a5a78106a835145bcb1
SHA256 1bcadd3184daedcc4b2ff0849806a4442ec96f2971bd5a170cda15ad46e77605
CRC32 d026513d
Пример расположения файла

В журналах событий Windows хранится полезная информация, которая нужна при анализе состояния служб и приложений в Windows, отладки ошибок и аварийный ситуаций, аудите различных событий безопасности. По умолчанию для журналов Event Viewer в Windows заданы максимальные размеры, при достижении которых новые события начинают перезаписывать более старые. Если на вход Event Viewer попадает слишком большое количество событий, может случится, что в журнал помещаются события лишь за последние несколько часов, что может быть не достаточно.

Чтобы предотвратить перезапись старых событий и всегда иметь под рукой события за достаточно большой промежуток времени, вы можете увеличить максимальный размер журналов Event Viewer.

Содержание:

  • Получить информацию о журналах событий Windows с помощью PowerShell
  • Изменить размер журнала событий из консоли Event Viewer
  • Увеличить размер журнала событий Windows через GPO

Получить информацию о журналах событий Windows с помощью PowerShell

Файлы журналы событий Windows хранятся в каталог
%SystemRoot%System32WinevtLogs
в виде файлов с расширением .EVTX. Обратите внимание, что для каждого журнала используется собственный файл. Соответственно, вы можете управлять размерами только того лога Windows, который вам нужен и оставить остальные значения по-умолчанию.

evtx файлы журналов событий в каталоге WinevtLogs

Текущие лимиты на все включенные журналы событий в Windows можно вывести с помощью PowerShell:

Get-Eventlog -List

powershell вывести все журналы Event Viewer и максимальный размер файла

Вы можно вывести размер определенного лога с помощью командлета Get-WinEvent. Например, получим текущий и максимальный размер журнала Security:

Get-WinEvent -ListLog Security| Select MaximumSizeInBytes, FileSize, IsLogFull, OldestRecordNumber, IsEnabled, LogMode

Get-WinEvent вывести текущий и максимальный размер журнала

Суммарный размер паки с файлами журналов событий можно получить с помощью PowerShell:
«{0:N2} MB» -f ((gci c:windowsSystem32WinevtLogs| measure Length -s).sum / 1Mb)

Чтобы увеличить максимальный размер лога, можно использовать утилиту wevtutul (новый размер задается в Кб):

wevtutil sl "Application" /ms:200000

Или с помощью PowerShell:

Limit-Eventlog -Logname Application -MaximumSize 200MB -OverflowAction OverwriteOlder

Изменить размер журнала событий из консоли Event Viewer

Проще всего увеличить максимальный размер журнала прямо из консоли Event Viewer.

  1. Откройте
    eventvwr.msc
    ;
  2. Найдите в консоли свойства нужного журнала и откройте его свойства (например, Security);
  3. Задайте ограничение в разделе Maximum log size (KB) и сохраните изменения; Изменить максимальный размер лога в Windows через консоль Event Viewer
  4. Здесь же можно изменить поведение при достижение максимального размера:
    Owerwrite events as needed (oldest events first) – этот режим исопльзуется по умолчанию. Новые события просто перезаписывают более старые.
    Archive the log when full, do not owerwrite events – текущий журнал событий при заполнении архивируется в папке System32WinevtLogs и новые события записываются в новый evtx файл. Архивные файлы событий можно открыть через меню Open Saved Log в Event Viewer.
    Do not owerwrite events (Clear log manually) – события никогда не перезатираются. Для записи новых событий нужно очистить журнал.

Увеличить размер журнала событий Windows через GPO

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

  1. Запустите консоль Group Policy Management (
    gpmc.msc
    ), создайте новую GPO и назначьте на OU с компьютерами или серверами, для которых вы хотите изменить настройки Event Viewer (или назначьте GPO на корень домена);
  2. Перейдите в раздел GPO Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Event Log Service. Как вы видите, в этом ветке есть подразделы для управления базовыми журналами Windows:
    Application
    Security
    Setup
    System
  3. Чтобы увеличить максимальный размер любого из журналов, откройте параметр Specify the maximum log file size (KB), включите его и задайте нужный вам размер; GPO задать максимальный размер лога в Windows Specify the maximum log file size (KB
  4. Обновите настройки политики на клиентах и проверьте, что в свойствах журнала теперь указан новый размер, который вы не можете изменить. При попытке задать другой размер появится ошибка:
    Не могу изменить Maximum Log Size Event Viewer
    The Maximum Log Size specified is not valid. It is too large or too small. The Maximum Log Size will be set to the following: 61440 KB

Обратите внимание, что в описанном выше разделе GPO отсутствуют настройки для других журналов из раздела Applications and Services Logs -> Microsoft.Если вам нужно увеличить размер любого другого журнала событий (кроме стандартного), это можно сделать через реестр. Настройки журналов событий Windows хранятся в разделе реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventLog<log_name>. Размер журнала задается с помощью параметра MaxSize (тип REG_DWORD). Вы можете распространить нужное вам значение параметра реестра MaxSize на компьютеры домена с помощью Group Policy Preferences.

Подробнее о настройке ключей и параметров реестра через GPO здесь.

В этом примере мы увеличим размер журнала Directory Service на контроллерах домена. Настройки этого лога хранятся в ветке HKLMSYSTEMCurrentControlSetServicesEventLogDirectory Service.

Максимальный размер файла журнала событий задается в реестре Windows

  1. Откройте GPO и перейдите в раздел Computer Configuration -> Preferences -> Windows Settings -> Registry;
  2. Выберите New -> Registry Item;
  3. Создайте новый параметр со следующими настройками:
    Hive: HKEY_LOCAL_MACHINE
    Key path: SYSTEMCurrentControlSetServicesEventLogDirectory Service
    Value name: MaxSize
    Value type: REG_DWORD
    Value data: 52428800 (значение задается в байтах. В нашем примере это 50 Мб)

    Задать параметр MaxSize журнала событий с помощью групповой политики

  4. Проверьте, что после обновления GPO на DC увеличится максимальный размер журнала. Новый максимальный размер журнала Event Log

Например, если вам нужно хранить историю RDP подключений к RDS хосту за продолжительное время, нужно увеличить размер лога Terminal-Services-RemoteConnectionManager.

За счет увеличения размеров журналов событий Windows вы можете получить различную информацию за более длительный промежуток времени. Например, из журналов событий можно получить историю перезагрузок Windows, понять кто удалил файл в сетевой папке или кто изменил NTFS права доступа.

Понравилась статья? Поделить с друзьями:
  • Windows system32 svchost exe k localserviceandnoimpersonation
  • Windows system32 svchost exe k dcomlaunch
  • Windows system32 sru что за папка
  • Windows system32 sppextcomobjpatcher exe что это
  • Windows system32 sppextcomobjhook dll что это