Качественно
сделанная сложная задача приносит удовлетворение, вызывает чувство гордости.
Это один из мощнейших мотиваторов. Если вы, конечно, внесли в нее значительный
вклад.
Скрипт
делает удаленную выборку событий журналов 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).
Что мы понимаем под логином пользователя? сетевой вход, обращение к сетевой папке, вход компьютера, запрос билета керберос. Я провел тесты и обнаруживаю, что интересующие нас интерактивные входы контроллер не регистрирует. А значит их следует искать в локальных файлах журналов Eventlog Security куда непосредсвенно входил пользовтель по RDP entrytype=10 и в консоль entrytype=2 (по нажатию ctrl + alt + delete).
Еntry type=2 — Interactive. Успешный
вход пользователя на компьютер.
Entry type=10 —
RemoteInteractive. Пользователь выполнил удаленный вход на этот компьютер,
используя Terminal Services или Remote Desktop.
Информация
по типам входа есть тут:
Более того,
события в журнал пишутся на языке локализации ОС. Это значит, что будут разные
записи в журнале смысл которых одинаков, а парсинг надо написать для каждого
языка свой.
Пример:
"Entry type" =
"Тип входа"
Для русской
локазизации ОС пришлось написать еще две функции.