Тематические термины: Active Directory, Powershell
Чтение информации
Список всех групп в AD DS
Подробная информация о группе
Члены группы
Сколько пользователей в группе
В каких группах состоит пользователь
Поиск пустых групп
Кто не входит в конкретную группу
Действия над группами
Добавление в группу
Создание группы
Удаление пользователя из группы
При расследовании различных инцидентов администратору необходимо получить информацию кто и когда заходил на определенный компьютер Windows. Историю входов пользователя в доменной сети можно получить из журналов контроллеров домена. Но иногда проще получить информацию непосредсвенно из логов компьютера. В этой статье мы покажем, как получить и проанализировать историю входа пользователей на компьютер/сервер Windows. Такая статистика поможет вам ответить на вопрос “Как в Windows проверить кто и когда использовал этот компьютере”.

Вы можете быстро открыть окно поиска в AD с помощью команды
%SystemRoot%SYSTEM32
undll32.exe dsquery,OpenQueryWindow
.
Для управления группами AD нужно использовать специальный модуль — Active Directory Module for Windows PowerShell. Модуль RSAT-AD-PowerShell доступен во всех версиях Windows Server (начиная с Windows Server 2008R2), а в десктопных Windows 10 и Windows 11 он устанавливается как компонент RSAT.
Проверьте, загружен ли модуль AD в текущую сессию PowerShell:

Как вы видите, модуль ActiveDirectory загружен. Если нет – импортируйте его командой:
Выведем список командлетов PowerShell, позволяющих управлять группами AD:
Get-Command -Module ActiveDirectory -Name “*Group*”
Доступно 11 командлетов:

- Add-ADGroupMember
- Add-ADPrincipalGroupMembership
- Get-ADAccountAuthorizationGroup
- Get-ADGroup
- Get-ADGroupMember
- Get-ADPrincipalGroupMembership
- New-ADGroup
- Remove-ADGroup
- Remove-ADGroupMember
- Remove-ADPrincipalGroupMembership
- Set-ADGroup
Формат командной строки:
Примеры использования WHOAMI:
WHOAMI – отобразить имя текущего пользователя в формате “доменимя”
WHOAM /FQDN – отобразить имя текущего пользователя в формате
полного доменного имени (FQDN).
WHOAMI /LOGONID – отобразить идентификатор текущего пользователя.
WHOAMI /GROUPS – отобразить список групп, членом которых является текущий пользователь.
WHOAMI /GROUPS /FO CSV – то же, что и в предыдущем случае, но с выводом результатов в виде полей, разделяемых запятой.
WHOAMI /PRIV – отобразить список привилегий текущего пользователя.
WHOAMI /PRIV /FO TABLE – то же, что и в предыдущем примере, но с отображением результатов в виде таблицы.
WHOAMI /ALL – отобразить информацию о SID текущего пользователя, принадлежности к группам и перечень привилегий.
Формат отображаемой информации:
Команду Whoami можно использовать в командных файлах в качестве
средства проверки того факта, что командный файл был запущен от имени
администратора в среде Windows 7/8. Для этого достаточно сравнить набор
привилегий при выполнении команды в обычном режиме и при выполнении в режиме
запуска от имени администратора. Например, если удаленное выключение
компьютера доступно только с правами администратора системы, можно, используя
команду поиска FIND, определить наличие строки
“SeRemoteShutdownPrivilege” в результатах выполнения команды
whoami /priv для текущего пользователя. Например, так:
Если данный командный файл будет запущен от имени пользователя, то фон консоли станет красным и пользователю будет выдано сообщение
”Этот командный файл должен выполняться от имени администратора”. Если от имени Администратора – фон консоли станет белым и выполнится команда удаления всех теневых копий (максимально освободить дисковое пространство)
Весь список команд CMD Windows
Действия с группами AD
New-ADGroup -GroupScope DomainLocal -Path “OU=Группы,DC=dmosk,DC=local” -Name “Отдел строительства космических кораблей”
* где GroupScope DomainLocal задает локальную область действия; Path определяет размещение группы в дереве Active Directory.
Удалить пользователя из группы

Была ли полезна вам эта инструкция?
Поиск пользователей и групп в Active Directory из консоли ADUC
- Для этого, откройте меню Find и в выпадающем списке типов поиска выберите Custom Search;
- Переключитесь на вкладку Advanced;
- В поле LDAP query, введите:
name=*sql*
Примечание. Данный LDAP запрос говорит, что вы хотите найти все объекты AD, содержащие в имени значение sql. Для этого нужно воспользоваться символом подстановки
*
с обеих сторон.
Если нужно искать только объекты AD типа группа, используйте такой запрос.

Как вы видите, по данному шаблону было найдено множество объектов AD (группы, компьютеры, пользователи, сервисные gMSA аккаунты).
Вы можете использовать расширенные фильтры в консоли поиска AD. Для этого включите опцию Filter в меню View и используйте расширенные фильтры для детализации поиска.


Поиск групп, пользователей и компьютеров в Active Directory с помощью PowerShell
Также для поиска объектов в AD, можно воспользоваться модулем PowerShell для ActiveDirectory.
Для поиска в Active Directory определенного типа объекта можно использовать соответствующий командлет:
Итак, сначала нужно импортировать модуль PowerShell:
Import-Module ActiveDirectory
Для поиска групп в AD по шаблону, можно воспользоваться такой командой PowerShell:

Аналогично можно выполнить поиск по имени компьютера или пользователя:
Если вы хотите выполнить универсальный поиск по всем типам объектам AD, используйте командлет Get-ADObject:

Можно использовать LDAP фильтр непосредственно в команде Get-ADObject, также добавим область поиска с помощью опции SearchBase:
Если вам нужно найти все сервисные аккаунты AD — Group Managed Service Account (MSA и gMSA), используйте команду:
Надеюсь, эти простые способы облегчат вам задачу поиска объектов в Active Directory.
Добавить пользователей в группу Active Directory
Добавить пользователей в группу Active Directory можно с помощью командлета Add-AdGroupMember. Добавим в новую группу двух пользователей:

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

Чтобы получить всех членов одной группы (groupA) и добавить их в другую группу (groupB), воспользуйтесь такой командой:
Если нужно скопировать в новую группу и членов всех вложенных групп (рекурсивно), нужно воспользоваться такой командой:
В версии Active Directory, представленной в Windows Server 2016 можно использовать функцию временного членства в группах безопасности AD (Temporary/ Time Based Group Membership). Чтобы временно добавить пользователя в группу AD (например, на 2 часа), выполните команду:
Через 2 часа этот пользователь будет автоматически удален из данной группы.
Получить информацию о группе AD
Для получения информации о группе домена AD используйте командлет Get-ADGroup:
Даная команда выводит информацию об основных атрибутах группы (DN, тип группы, имя, SID группы). Чтобы вывести значение всех атрибутов группы, выполните команду:
Get-ADGroup ‘TestADGroup’ -properties *

Как вы видите, теперь стали отображаться такие атрибуты, как время создания и модификации группы, описание и т.д.
(в первой команде используется LDAP фильтр, во второй фильтр по атрибуту AD):С помощью Get-ADGroup можно получить список членов группы (хранится в атрибуте members):
Однако для получения списка членов группы гораздо удобнее использовать другой командлет — Get-ADGroupMember.
Удалить группу AD
Чтобы удалить групп в Active Directory используется командлет Remove-ADGroup:
Remove-ADGroup -Identity MskSales

При удалении группы появляется запрос подтверждения удаления. Чтобы отключить подтверждение удаления, добавьте параметр Confirm:
Remove-ADGroup -Identity MskSales –Confirm:$false
Удаленные группы (и другие объекты AD) можно восстановить из корзины Active Directory:
Утилиты PSLoggedOn и Qwinsta
В комплекте утилит SysInternals PSTools от Microsoft есть консольная утилита PSLoggedOn.exe, которую можно использовать для получения имени пользователя, который вошел на удаленный компьютер, а также список подключенных к нему SMB сеансов.

Если нужно получить только имя пользователя, вошедшего локально, используйте опцию –l:
Psloggedon.exe \wks215s1 –l
Утилита Psloggedon подключается к реестру и проверяет в нем имя пользователя, вошедшего локально. Для этого должна быть включена служба RemoteRegistry. Вы можете запустить ее и настроить автозапуск службы с помощью PowerShell:
Set-Service RemoteRegistry –startuptype automatic –passthruStart-Service RemoteRegistry
Также можно получить список сессий на удаленном компьютере с помощью встроенной утилиты
qwinsta
. Эта утилита должна быть знакома любому администратору, управляющему терминальными серверами с Remote Desktop Services. Чтобы получить список сессий с удаленного компьютера, выполнит команду:

Если при подключении к удаленному серверу через qwinsta вы получаете ошибку Error 5 Access Denied, проверьте что на удаленном компьютере разрешено удаленное управление пользователями через RPC. Включите, если нужно через реестр следующей командой или через GPO:
reg add “HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Server” /v “AllowRemoteRPC” /t “REG_DWORD” /d “1” /f
Получаем имя пользователя на удаленном компьютере через PowerShell
Команда вернула имя пользователя, который выполнил вход на компьютер.
У командлета Get-WmiObject есть параметр –ComputerName, который можно использовать для получения доступа к WMI объектам на удаленном компьютере. Следующая команда вернет имя пользователя с удаленного компьютера:
Данная команда показывает только пользователя, вошедшего на консоль (не через RDP).
Также для получения информации с удаленных компьютеров можно использовать PSRemoting с помощью командлета Invoke-Command.
Если нужно получить только имя пользователя на компьютере (без домена), воспользуетесь следующими командами:

В современных версиях PowerShell Core (pwsh.exe) вместо Get-WmiObject нужно использовать CIM командлет Get-CimInstance:

GetCiminstance использует WinRM для подключения к удаленным компьютерам, поэтому на них нужно включить и настроить WinRM через GPO или командой:
Настройка политики аудита входа пользователей в Windows
Сначала нужно включить политик аудита входа пользователей. На отдельностоящем компьютере для настройки параметров локальной групповой политики используется оснастка gpedit.msc. Если вы хотите включить политику для компьютеров в домене Active Directorty, нужно использовать редактор доменных GPO (
gpmc.msc
).
- Запустите консоль GPMC, создайте новую GPO и назначьте ее на Organizational Units (OU) с компьютерами и / или серверами, для которых вы хотите включить политику аудита событий входа;
- Включите две политики аудита Audit Logon и Audit Logoff. Это позволит отслеживать как события входа, так и события выхода пользователей. Если вы хотите отслеживать только успешные события входа, включите в настройках политик только опцию Success;
- Закройте редактор GPO и обновите настройки политик на клиентах.
Получение информации
Get-AdGroup -filter *
* будут выбраны все группы, в названии которых встречается free.
Подробная информация о группе
* где ключ -Properties * покажет информацию о всех атрибутах группы.
Показать только SID и GUID группы:
Посмотреть членов группы
Перечень членов групп с базовой информацией о каждом пользователе:
Вывести на экран только имена пользователей:
Вывести членов групп с подробной информацией по каждому из них:
Количество пользователей в группе
Расчет выполняется методом Count:
В каких группах состоит пользователь
Задача немного обратная — работаем с пользователем и отображаем список групп, в которые он входит:
Список пустых групп
Имеются ввиду группы, в которых нет ни одного пользователя:
Cписок пользователей, которые не входят в конкретную группу
* в данном примере мы увидем список пользователей, которые не входят в группу Managers.
Создать новую группу в Active Directory
Создадим новую группу безопасности в указанном контейнере (OU) Active Directory с помощью команды New-ADGroup:
New-ADGroup “TestADGroup” -path ‘OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru’ -GroupScope Global -PassThru –Verbose
С помощью атрибута Description можно задать описание группы, а с помощью DisplayName изменить отображаемое имя.

Параметром GroupScope можно задать один из следующих типов групп:
- 0 = DomainLocal
- 1 = Global
- 2 = Universal
Создать группу распространения можно так:
New-ADGroup “TestADGroup-Distr” -path ‘OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru’ -GroupCategory Distribution -GroupScope Global -PassThru –Verbose
Группы распространения (distribution) можно использовать для рассылки писем и/или предоставления прав доступа в AD. Подробнее о группах рассылки Exchange здесь.
При создании группы AD можно сразу заполнить любые атрибуты. Проще всего задать значения различных атрибутов группы через HashTable:
Изменить атрибуты группы AD
Командлет Set-ADGroup позволяет изменить свойства (атрибуты) любой группы Active Directory. Например, можно изменить описание и название группы:
Скрыть определённую группу из адресной книги Exchange:
Можно изменить сразу несколько параметров группы. Список изменения удобно задать через HashTable:
Список атрибутов можно получить так или в консоли ADUC на вкладке редактора атрибутов

Удалить пользователей из группы
Для удаления пользователей из группы AD нужно использовать командлет Remove-ADGroupMember. Удалим из группы двух пользователей:

Если нужно удалить из группы пользователей по списку из CSV файла, воспользуйтесь такой командой:
В on-prem Active Directory отсутствует возможность создать динамические группы пользователей (в отличии от Azure AD). Однако вы можете создать небольшой PowerShell скрипт, который будет автоматически добавлять или удалять пользователей из группы с помощью командлетов Add-ADGroupMember и Remove-ADGroupMember. Подробнее об этом в статье Динамические группы пользователей Active Directory с помощью PowerShell.
PowerShell скрипт для проверки пользователей на удаленных компьютерах
Если вам нужно собрать информацию о пользователях сразу с нескольких компьютерах, можете использовать следующую PowerShell функцию получить имена пользователей.
Можно получить имена пользователей, которые работают на компьютерах в домене Active Directory. Для получения списка компьютеров нужно использовать командлет Get-ADComputer. В следующем примере мы получим имена пользователей, которые работают за активными компьютерами в определенном OU домена. Чтобы скрипт работал быстрее перед тем, как обратится к обратится к удаленному компьютеру, я добавил проверку его доступности по сети через ICMP пинг с помощью командлета Test-NetConnection:

Также обратите внимание, что вы можете хранить в свойствах компьютеров в AD имя пользователя, который выполнил вход. Для этого можно использовать логон скрипт, описанный в статье “Set-ADComputer: добавляем информацию о пользователе в свойства компьютеров AD”
Анализ событий входа пользователей в Windows с помощью PowerShell
Допустим, наша задача получить информацию о том, какие пользователи входили на этот компьютер за последнее время. Нам интересует именно события интерактивного входа (через консоль) с
LogonType =2
. Для выбора события из журналов Event Viewer мы воспользуемся командлетом Get-WinEvent.
Следующий PowerShell скрипт выведет история входа пользователей на текущий компьютер и представит ее в виде графической таблицы Out-GridView.

Если нужно выбрать события входа за последние несколько дней, можно добавить pipe с таким условием:
Командлет Get-WinEvent позволяет получить информацию с удаленных компьютеров. Например, чтобы получить историю входов с двух компьютеров, выполните следующий скрипт:
Если протокол RPC закрыт между компьютерами, вы можете получить данные с удаленных компьютеров с помощью PowerShell Remoting командлета Invoke-Command:
Поиск компьютеров в Active Directory
Для поиска компьютеров и серверов в Active Directory по точному вхождению нужно в поле Find выбрать Computers и указать имя компьютера для поиска.

Поиск событий входа пользователей в журнале событий Windows
После того как вы включили политики аудита входа, при каждом входе пользователя в Windows в журнале Event Viewer будет появляться запись о входе. Посмотрим, как она выглядит.
- Откройте оснастку Event Viewer (
eventvwr.msc
); - Разверните секцию Windows Logs и выберите журнал Security;
- Щелкните по нему правой клавишей и выберите пункт Filter Current Log;
- В поле укажите ID события 4624 и нажмите OK;
- В окне события останутся только события входа пользователей, системных служб с описанием
An account was successfully logged on
; - В описании события указано имя и домен пользователя, вошедшего в систему:
New Logon:
Security ID: WINITPROa.khramov
Account Name: a.khramov
Account Domain: WINITPRO

Ниже перечислены другие полезные EventID:
Если полистать журнал событий, можно заметить, что в нем присутствуют не только события входа пользователей на компьютер. Здесь также будут события сетевого доступа к этому компьютеру (при открытии по сети общих файлов или печати на сетевых принтерах), запуске различных служб и заданий планировщика и т.д. Т.е. очень много лишний событий, которые не относятся ко входу локального пользователя. Чтобы выбрать только события интерактивного входа пользователя на консоль компьютера, нужно дополнительно сделать выборку по значению параметра Logon Type. В таблице ниже перечислены коды Logon Type.
При удаленном подключении к рабочему столу компьютера по RDP, в журнале событий появится записи с Logon Type 10 или 3. Подробнее об анализе RDP логов в Windows.
Для фильтрации события входа по содержать Logon Type лучше использовать PowerShell.
Вывести список пользователей в группе Active Directory
Командлет Get-ADGroupMember позволяет получить членов группы AD. Это могут быть пользователи, компьютеры, другие группы или учетные записи служб (MSA/gMSA).
Вы можете вывести на экран список пользователей в доменной группе:
Чтобы оставить в результатах только имена пользователей, выполните:

Если в данную группу включены другие группы домена, чтобы вывести полный список членов, в том числе всех вложенных групп, воспользуйтесь параметром Recursive.
Чтобы экспортировать список пользователей, состоящих в определённой группе в CSV файл (для дальнейшего использования в Excel), выполните команду:
Посчитать количество пользователей в группе можно так:

Чтобы найти список пустых групп в определенном OU, воспользуйтесь такой командой:
С помощью командлета Get-ADGroupMember можно создать простой PowerShell скрипт для оповещения администратора, если кто-то добавил нового пользователя в определенную группу AD.




