среда, 5 марта 2014 г.

Get-Eventlog Get-LogonHistory.ps1 script

Качественно сделанная сложная задача приносит удовлетворение, вызывает чувство гордости. Это один из мощнейших мотиваторов. Если вы, конечно, внесли в нее значительный вклад.

Скрипт делает удаленную выборку событий журналов Eventlog security на предмет  последних интерактивных входов  пользователей в ОС Windows.
Скрипт решает несколько задач:
  • Автоматическое определение версии  и локализации ОС, Get-Wmi-Object  вследствие выполняются четыре различные функции
  • Ввод компьютеров с консоли пользователя либо опрос файла со списком компьютеров с которых нужно собрать информацию
  • Сбор информации из Eventlog Security за несколько последних дней. История входа пользователей.
  • Сбор данных о пользователях из Active Directory Get-Aduser mail, telephonenumber
  • Вывод требуемой информации в файл формата CSV  для последующей обработке в Excel со столбцами
Скачать мой скрипт можно отсюда:

Спасибо человеку с Github -  Craig Meinschein https://github.com/pfaffle за предоставленную наработку. Его скрипт был взят за основу и дописан мною под требования заказчика.

А задача была следующая:
Определение  для виртуальных Windows-машин неизвестного назначения 5-ти последних профилей пользователей AD, которые регистрировались  в операционной системе. Далее, опираясь на эту информацию, подготовить таблицу следующего содержания:

- Пользователь AD (по профилю);
- Список ОС виртуальных машин, на которых он регистрировался;
- Контакты пользователя из AD (email, телефон)
*** одна строка: 1 пользователь, 1 ВМ на которой он логинился, контакты пользователя в каждой строке. (для последующей сортировки в Excel)

Мне много пришлось потрудиться. Я потратил на скрипт неприличное количество часов и даже купил книжку по powershell. 

Мне очень понравилась задумка с функциями, которые предназначены для разных ОС учитывая разные номера EventID.  Функции выполняются на основе выбора оператором ветвления If() .. else if ().. и определению типа операционной системы Windows Server 2003 или Windows Server  2008.

Коды event ID с выходом Windows Server 2008 изменились. Коды событий взяты из замечательных справочников :

Давайте разберем понятия интерактивных входов в систему консоль entrytype=2 entrytype=10
Следует понимать, где следует собирать информацию о входах. Существует ошибочное мнение тех, кто готовился к экзаменам по сертификации МС, что информацию о входах пользователей надо искать на контроллерах домена. Но там будут только события сетевых входов entrytype=3. Это данные аутентификации пользователя в домене. 
Что мы понимаем под логином пользователя? сетевой вход, обращение к сетевой папке, вход компьютера, запрос билета керберос. Я провел тесты и обнаруживаю, что интересующие нас интерактивные входы контроллер не регистрирует. А значит их следует искать в локальных файлах журналов Eventlog Security куда непосредсвенно входил пользовтель по RDP  entrytype=10 и в консоль entrytype=2 (по нажатию ctrl + alt + delete).

Еntry type=2 — Interactive. Успешный вход пользователя на компьютер.
Entry type=10 — RemoteInteractive. Пользователь выполнил удаленный вход на этот компьютер, используя Terminal Services или Remote Desktop.

Информация по типам входа есть тут:

Более того, события в журнал пишутся на языке локализации ОС. Это значит, что будут разные записи в журнале смысл которых одинаков, а парсинг надо написать для каждого языка свой.
Пример:
"Entry type" = "Тип входа"
Для русской локазизации ОС пришлось написать еще две функции.