PowerShell. Заметки.

Posted by map[name:devi1 uri:https://www.blogger.com/profile/05777499482649623616] on Tuesday, June 11, 2013

Начал использовать PowerShell. Инструмент очень мощный. По мощности сравним с шеллом никсов. Не буду утверждать что круче - не разбираюсь ни в том, ни в другом. Решил сделать в качестве памятки несколько заметок по использованию этого инструмента.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()}</span></i><br /><i><span style="color: #990000;"><br /></span></i><i><span style="color: #990000;">$Data.UserName = ($message | ?{$_ -like "Пользователь-клиент:*"} | %{$_ -replace "^.+:."} )&nbsp;</span></i><br /><i><span style="color: #990000;">$Data.File = ($message | ?{$_ -like "Имя объекта:*"} | %{$_ -replace "^.+:."})&nbsp;</span></i><br /><i><span style="color: #990000;"><br /></span></i><i><span style="color: #990000;"><br /></span></i><i><span style="color: #990000;">$data | Out-File F:\Docs\fs1.txt -Append</span></i><br /><i><span style="color: #990000;">}&nbsp;</span></i><br /><br />Разберем по строкам.<br /><br />Первая строка получает события типа "безопасность" с кодом 560 (Get-Eventlog - получить данные журнала событий, security - данные журнала "безопасность", где свойство eventid каждого (|) события ($_) эквивалентно (-eq) 560).<br /><br />Вторая строка создает объект PSObject. 3-5 строки добавляют в объект поля Time, UserName и File.<br /><br />Затем пробегаемся по событиям следующим способом.<br />В поле time объекта Data записываем время создания строки с сообщением (время доступа к файлу).<br /><br />&nbsp;Строкой&nbsp;<i><span style="color: #990000;">$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\Сети\Общая папка\Реестры счетСкрипт создан при помощи этих постов: хабр, Поданс.


comments powered by Disqus