Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_ЛР_БОС.doc
Скачиваний:
112
Добавлен:
08.05.2019
Размер:
1.15 Mб
Скачать

7. Библиографический список

1. Олифер В.Г. Сетевые операционные системы: Учеб. пособие для вузов / В.Г. Олифер, Н.А. Олифер .— М.: Питер, 2003. — 544с.

2. Таненбаум Э. Современные операционные системы / Э. Таненбаум.— 2-е изд. — М.: Питер, 2006 .— 1038с.

3. Монадьеми П. Защита от хакеров в Windows XP/ П. Монадьеми, Б. Мюллер; пер. с нем. под ред. С.Н. Банникова.— М.: БИНОМ, 2005 .— 320с.

4. Немет Э. UNIX: Руководство системного администратора/ Э. Немет, Г. Снайдер, С. Сибасс, Т.Р. Хейн. 3-е изд. — М.: Питер, 2003 .— 925с.

Лабораторная работа № 15. Windows PowerShell: работа с системными журналами

1. Цель работы

Получение практических навыков работы с журналами событий ОС Windows с использованием средства автоматизации PowerShell

2. Теоретические сведения

Рассмотрим командлеты PowerShell основанные на .NET, для работы с журналами событий. Начнем с самого простого командлета - Get-EventLog. Он позволяет получать данные и информацию о журналах событий.

# смотрим список имеющихся журналов

Get-EventLog –List

# полученный список можно форматировать (сотмительное удовольствие)

Get-EventLog -List | Format-List *

# или получить сведения по определенному журналу

Get-EventLog -List | Where-Object {$_.Log -eq "Application"} | FL

Поиск событий

Поиск событий выглядит довольно просто т.к. он легко фильтруется через Where-Object. Для понимания того что мы ходит найти вводим

Get-EventLog -Newest 1 -LogName application | Get-Member

видим

Смотрим первый столбик. Отсюда можно взять различные полезности (по имени) для поиска события по его ID и пр.

# Взять 10 последних записей из журнала Application имеющих тип Error

Get-EventLog -Newest 10 -LogName application | Where-Object {$_.EntryType -eq "Error"}

# Взять 100 последних записей из журнала Security с ID 529

Get-EventLog -Newest 100 -LogName security | Where-Object {$_.EventID -eq "529"} | FL

# Взять 100 последних записей из журнала Security только за сегодня

Get-EventLog -Newest 100 -LogName security | Where-Object {$_.TimeGenerated.Date -eq (Get-Date).Date} | FL

# Найти 100 записей из журнала Security за последние 7 дней с кодом 529

Get-EventLog -Newest 100 -LogName security | Where-Object {{$_.TimeGenerated.Date -eq (Get-Date).AddDays(-7)} -and {$_.EventID -eq "529"}}

Просмотр событий на локальном компьютере

Для просмотра событий на локальном компьютере используйте все тот же командлет Get-EventLog с ключом -LogName и указанием имени нужного журнала.

# доступный список журналов получаем с помощью Get-EventLog –List

# для получения последних десяти событий вводим

Get-EventLog -LogName application -Newest 10

# для запроса только ошибок вводим

Get-EventLog -LogName application -Newest 100 -EntryType Error

# для получения информации от определенного источника необходимо ввести

Get-EventLog -LogName application -Newest 100 -source outlook

Просмотр событий на удаленном компьютере

Для получения данных журналов на удаленном хосте используется все тот же командлет Get-EventLog, синтаксис запросов прежний, требуется только указание параметра -ComputerName.

# получаем список журналов с хоста под именем REMOTE_HOST

Get-EventLog -ComputerName REMOTE_HOST -List

Аналогичный функционал можно получить, если использовать WMI-класса Win32_NTEventlogFile

$Logs = Get-WMIOject -Class Win32_NTEventLogFile -Computer REMOTE_HOST

$Logs | FL

Создание собственных журналов

При написании какого-нибудь инструментария ведущего записи в журналах желательно (но необязательно) вести записи в отдельном журнале, имеющем осознанное имя, в моем случае это PsScripts.

New-Eventlog -logname ‘PsScripts’ -Source ‘Logonscript’

Создание записей в журнале

Для создания записей в журнале используется командлет Write-EventLog.

write-eventlog -logname ‘PsScripts’ -Source ‘Logonscript’ -Message ‘Something bad happened’ -id 111

write-eventlog -logname ‘PsScripts’ -Source ‘Logonscript’ -eventID 112 -entrytype Information -message "PsApp added a user-requested feature to the display." -category 1 -rawdata 10,20

Очистка журналов

Для очистки журнала используйте командлет Clear-Eventlog с параметром -LogName

Clear-Eventlog -LogName "Application"

Удаление журналов

Созданный несколькими пунктами ранее журнал при необходимости можно удалить командой.

Remove-Eventlog -logname ‘PsScripts’

Экспорт данных

Для удобства анализа журналов можно их выгружать в CSV-формат.

Get-EventLog -LogName system -newest 100 | Export-Csv -NoTypeInformation D:\Report\1.csv

Правильнее результаты выгружать в обычный текстовый файл.

Get-EventLog -LogName system -newest 100 | Out-File D:\Report\1.csv

Примеры

Резервное копирование файла журнала или журналов в зависимости от поставленной задачи.

# наша цельжурнал Application

$log = gwmi "Win32_NTEventLogFile WHERE LogFileName=’Application’"

# сохраним его в файл

$log.BackupEventlog("D:\Backup\Application-backup.evt")

# второй вариант того же действия

# тот же журнал Application

$logName = "Application"

# куда сохранять результат

$path = "D:\Backup\"

# сформируем имя файла

$exportFile = $logName + (get-date -f yyyyMMdd) + ".evt"

# запрашиваем данные

$logFile = Get-WmiObject Win32_NTEventlogFile | Where-Object {$_.logfilename -eq $logName}

# сохраняем в файл

$logFile.backupeventlog($path + $exportFile)

# остается только назначить задание в планировщике и дописать процедуру очистки журнала.

Рассмотрим работу командлета Get-WinEvent который получает события из журналов и файлов журналов отслеживания событий (файлы созданные средством отслеживания событий для Windows (ETW)), как на локальном компьютере так и на удаленном.

Примечание. Командлет Get-WinEvent работает только в Windows Vista, Windows Server 2008 R2 и последующих версиях Windows. Для работы потребуется установленный Microsoft .NET Framework 3.5 или более поздней версии.

Для начала вызываем комадлет без параметров.

Get-WinEvent

Чтобы прервать выполнение команды нажмите CTRL+C.

Информации много, причем бесполезной. Пора посмотреть детально на то чем мы располагаем и что можем сделать.

Смотрим список всех журналов, имеющиеся на локальном компьютере.

Get-WinEvent -ListLog * | ft -a

Некоторые журналы могут быть пустыми (при выводе они будут только мешать) и поэтому немного видоизменяем запрос

Get-WinEvent -ListLog * | Where {$_.recordcount}

Если нам требуются только «классические» журналы, которых гораздо меньше, для их просмотра используйте:

Get-WinEvent -listlog * | Where {$_.IsClassicLog -eq ‘True’}

Для получения количества событий из определенного журнала используйте:

$events = Get-WinEvent -logname "Windows PowerShell"

$events.count

После получения списков журналов можно продолжить изучение и перейти к поставщикам журналов событий (Provider).

Примечание: Поставщик журнала событий — это программа или служба, которая записывает события в журнал событий.

Посмотреть список всех провайдеров можно командой.

Get-WinEvent -ListProvider *

Определенного поставщика можно задать по имени или по маске.

Get-WinEvent -ListProvider *update*

Get-WinEvent -ListProvider *policy*

Например, все установленные обновления запрашиваются из журнала следующим образом:

$provider = Get-WinEvent -ListProvider Microsoft-Windows-WindowsUpdateClient

$provider.events | ? {$_.description -match "success"} | select id,description | ft -AutoSize

Можно вытянув запрос в строку использовать Events вот так:

(get-winevent -listprovider microsoft-windows-grouppolicy).events | format-table id, description -auto