«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Тематические термины: Active Directory, Powershell

Чтение информации
    Список всех групп в AD DS
    Подробная информация о группе
    Члены группы
    Сколько пользователей в группе
    В каких группах состоит пользователь
    Поиск пустых групп
    Кто не входит в конкретную группу
Действия над группами
    Добавление в группу
    Создание группы
    Удаление пользователя из группы

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

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Вы можете быстро открыть окно поиска в 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:

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Как вы видите, модуль ActiveDirectory загружен. Если нет – импортируйте его командой:

Выведем список командлетов PowerShell, позволяющих управлять группами AD:

Get-Command -Module ActiveDirectory -Name “*Group*”

Доступно 11 командлетов:

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

  • 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.

Удалить пользователя из группы

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Была ли полезна вам эта инструкция?

Поиск пользователей и групп в Active Directory из консоли ADUC

  • Для этого, откройте меню Find и в выпадающем списке типов поиска выберите Custom Search;
  • Переключитесь на вкладку Advanced;
  • В поле LDAP query, введите:
    name=*sql*

Примечание. Данный LDAP запрос говорит, что вы хотите найти все объекты AD, содержащие в имени значение sql. Для этого нужно воспользоваться символом подстановки
*
с обеих сторон.

Если нужно искать только объекты AD типа группа, используйте такой запрос.

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Как вы видите, по данному шаблону было найдено множество объектов AD (группы, компьютеры, пользователи, сервисные gMSA аккаунты).

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

:/>  Ветки реестра — REG_BINARY, REG_DWORD, REG_EXPAND_SZ, REG_MULTI_SZ и REG_SZ » Видеокурсы, полезный софт и познавательные компьютерные статьи

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Поиск групп, пользователей и компьютеров в Active Directory с помощью PowerShell

Также для поиска объектов в AD, можно воспользоваться модулем PowerShell для ActiveDirectory.

Для поиска в Active Directory определенного типа объекта можно использовать соответствующий командлет:

Итак, сначала нужно импортировать модуль PowerShell:
Import-Module ActiveDirectory

Для поиска групп в AD по шаблону, можно воспользоваться такой командой PowerShell:

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Аналогично можно выполнить поиск по имени компьютера или пользователя:

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

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Можно использовать LDAP фильтр непосредственно в команде Get-ADObject, также добавим область поиска с помощью опции SearchBase:

Если вам нужно найти все сервисные аккаунты AD — Group Managed Service Account (MSA и gMSA), используйте команду:

Надеюсь, эти простые способы облегчат вам задачу поиска объектов в Active Directory.

Добавить пользователей в группу Active Directory

Добавить пользователей в группу Active Directory можно с помощью командлета Add-AdGroupMember. Добавим в новую группу двух пользователей:

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

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

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки 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 *

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Как вы видите, теперь стали отображаться такие атрибуты, как время создания и модификации группы, описание и т.д.

(в первой команде используется LDAP фильтр, во второй фильтр по атрибуту AD):С помощью Get-ADGroup можно получить список членов группы (хранится в атрибуте members):

Однако для получения списка членов группы гораздо удобнее использовать другой командлет — Get-ADGroupMember.

Удалить группу AD

Чтобы удалить групп в Active Directory используется командлет Remove-ADGroup:

Remove-ADGroup -Identity MskSales

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

При удалении группы появляется запрос подтверждения удаления. Чтобы отключить подтверждение удаления, добавьте параметр Confirm:

Remove-ADGroup -Identity MskSales –Confirm:$false

Удаленные группы (и другие объекты AD) можно восстановить из корзины Active Directory:

Утилиты PSLoggedOn и Qwinsta

В комплекте утилит SysInternals PSTools от Microsoft есть консольная утилита PSLoggedOn.exe, которую можно использовать для получения имени пользователя, который вошел на удаленный компьютер, а также список подключенных к нему SMB сеансов.

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Если нужно получить только имя пользователя, вошедшего локально, используйте опцию –l:

Psloggedon.exe \wks215s1 –l

Утилита Psloggedon подключается к реестру и проверяет в нем имя пользователя, вошедшего локально. Для этого должна быть включена служба RemoteRegistry. Вы можете запустить ее и настроить автозапуск службы с помощью PowerShell:

Set-Service RemoteRegistry –startuptype automatic –passthruStart-Service RemoteRegistry

Также можно получить список сессий на удаленном компьютере с помощью встроенной утилиты
qwinsta
. Эта утилита должна быть знакома любому администратору, управляющему терминальными серверами с Remote Desktop Services. Чтобы получить список сессий с удаленного компьютера, выполнит команду:

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Если при подключении к удаленному серверу через 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 объектам на удаленном компьютере. Следующая команда вернет имя пользователя с удаленного компьютера:

:/>  Преобразование заголовка интерфейс командной строки и создание отличительного названия для интерпретатора командной строки или терминала PowerShell

Данная команда показывает только пользователя, вошедшего на консоль (не через RDP).

Также для получения информации с удаленных компьютеров можно использовать PSRemoting с помощью командлета Invoke-Command.

Если нужно получить только имя пользователя на компьютере (без домена), воспользуетесь следующими командами:

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

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

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

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 изменить отображаемое имя.

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Параметром 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 на вкладке редактора атрибутов

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Удалить пользователей из группы

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

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Если нужно удалить из группы пользователей по списку из 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:

:/>  Папка с временными файлами Windows и Где хранить временные файлы в Windows 10 и как их удалить

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Также обратите внимание, что вы можете хранить в свойствах компьютеров в AD имя пользователя, который выполнил вход. Для этого можно использовать логон скрипт, описанный в статье “Set-ADComputer: добавляем информацию о пользователе в свойства компьютеров AD”

Анализ событий входа пользователей в Windows с помощью PowerShell

Допустим, наша задача получить информацию о том, какие пользователи входили на этот компьютер за последнее время. Нам интересует именно события интерактивного входа (через консоль) с
LogonType =2
. Для выбора события из журналов Event Viewer мы воспользуемся командлетом Get-WinEvent.

Следующий PowerShell скрипт выведет история входа пользователей на текущий компьютер и представит ее в виде графической таблицы Out-GridView.

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Если нужно выбрать события входа за последние несколько дней, можно добавить pipe с таким условием:

Командлет Get-WinEvent позволяет получить информацию с удаленных компьютеров. Например, чтобы получить историю входов с двух компьютеров, выполните следующий скрипт:

Если протокол RPC закрыт между компьютерами, вы можете получить данные с удаленных компьютеров с помощью PowerShell Remoting командлета Invoke-Command:

Поиск компьютеров в Active Directory

Для поиска компьютеров и серверов в Active Directory по точному вхождению нужно в поле Find выбрать Computers и указать имя компьютера для поиска.

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Поиск событий входа пользователей в журнале событий 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

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Ниже перечислены другие полезные EventID:

Если полистать журнал событий, можно заметить, что в нем присутствуют не только события входа пользователей на компьютер. Здесь также будут события сетевого доступа к этому компьютеру (при открытии по сети общих файлов или печати на сетевых принтерах), запуске различных служб и заданий планировщика и т.д. Т.е. очень много лишний событий, которые не относятся ко входу локального пользователя. Чтобы выбрать только события интерактивного входа пользователя на консоль компьютера, нужно дополнительно сделать выборку по значению параметра Logon Type. В таблице ниже перечислены коды Logon Type.

При удаленном подключении к рабочему столу компьютера по RDP, в журнале событий появится записи с Logon Type 10 или 3. Подробнее об анализе RDP логов в Windows.

Для фильтрации события входа по содержать Logon Type лучше использовать PowerShell.

Вывести список пользователей в группе Active Directory

Командлет Get-ADGroupMember позволяет получить членов группы AD. Это могут быть пользователи, компьютеры, другие группы или учетные записи служб (MSA/gMSA).

Вы можете вывести на экран список пользователей в доменной группе:

Чтобы оставить в результатах только имена пользователей, выполните:

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

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

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

Посчитать количество пользователей в группе можно так:

«Просмотрите иллюстрацию текущего пользователя и групп MS Active Directory (AD DS) с помощью командной строки Powershell»

Чтобы найти список пустых групп в определенном OU, воспользуйтесь такой командой:

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