1. Заметка номер раз. Простейшие регулярные выражения в PS.
^ - начало строки$ - конец строки
. - один любой символ
Удалить подстроку или заменить её - -replace . Простейший способ редактирования строк без вникания в код и написания "нормальных" регэкспов - тупо удалить нужное кол-во символов.
(Get-Content .\list.txt) -replace "^...................................." | Set-Content list1.txt
Получили содержание файла, прошли по строкам, в каждой строке удалили какое-то количество первых символов, записали в файл.
2. Получить список файлов, открывавшихся определенным пользователем в определенную дату.
Get-EventLog security -after (Get-Date -hour 0 -minute 0 -second 0) | ?{$_.eventid -eq 560} | ?{$_.username -eq "username"}Здесь мы получаем события журнала безопасности за текущую дату с 0 часов, 0 минут, 0 секунд с eventid равным 560 (аудит успеха. открытие объекта. Эта информация здесь: Описание событий системы безопасности) и именем пользователя username.
Но для того, чтобы эта команда сработала, необходимо чтобы велся аудит доступа к файловой системе. Об этом можно почитать тут. Позже сам напишу подобный мануал.
Дальше больше
3. Теперь скрипт по мотивам предыдущей заметки. Назначение: получить список пользователей, пытавшихся открыть файлы на ФС. Получаем время доступа, имя файла и имя пользователя.
$Events = Get-EventLog security | ?{$_.eventid -eq 560}
$Data = New-Object System.Management.Automation.PSObject
$Data | Add-Member NoteProperty Time ($null)
$Data | Add-Member NoteProperty UserName ($null)
$Data | Add-Member NoteProperty File ($null)
$Events | %{
$Data.time = $_.TimeGenerated
$message = $_.message.split("`n") | %{$_.trimstart()} | %{$_.trimend()}
$Data.UserName = ($message | ?{$_ -like "Пользователь-клиент:*"} | %{$_ -replace "^.+:."} )
$Data.File = ($message | ?{$_ -like "Имя объекта:*"} | %{$_ -replace "^.+:."})
$data | Out-File F:\Docs\fs1.txt -Append
}
Разберем по строкам.
Первая строка получает события типа "безопасность" с кодом 560 (Get-Eventlog - получить данные журнала событий, security - данные журнала "безопасность", где свойство eventid каждого (|) события ($_) эквивалентно (-eq) 560).
Вторая строка создает объект PSObject. 3-5 строки добавляют в объект поля Time, UserName и File.
Затем пробегаемся по событиям следующим способом.
В поле time объекта Data записываем время создания строки с сообщением (время доступа к файлу).
Строкой $message = $_.message.split("`n") | %{$_.trimstart()} | %{$_.trimend()} — в переменную message заносим массив строк, которые разделяются символом переноса строки ('n), функции trimstart(), trimend() убирают все лишние символы в конце и в начале строки, функция split разделяет строку.
Далее во вновь образовавшемся массиве мы ищем совпадения по строке «Пользователь-клиент:» и «Имя объекта:», а -replace в дальнейшем удаляет эти регулярные выражения, оставляя саму информацию.
И последней строкой записываем то, что получилось в итоге в файл.
Получается что-то типа этого:
Time UserName File
---- -------- ----
13.06.2013 16:52:22 Seti Docs\Сети\Общая папка\Реестры счет
Time UserName File
---- -------- ----
13.06.2013 16:52:22 Seti Docs\Сети\Общая папка\Реестры счет
Скрипт создан при помощи этих постов: хабр, Поданс.
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.