Как узнать в каких группах состоит пользователь windows

В этой статье речь пойдет о том, как вывести список групп, в которых состоит пользователь. Конечно, это можно сделать из GUI, но не всегда такой вывод

Содержание

  1. Windows admin blog
  2. Полезные команды cmd, powershell, администрирование, фичи и решения проблем на win/winserver
  3. AD: узнать в каких группах состоит пользователь / прямое и косвенное членство
  4. 1) Whoami /groups
  5. 2) Утилита dsget
  6. 3) Get-ADUser
  7. Как открыть локальных пользователей и группы в Windows 10
  8. Откройте локальные пользователи и группы в Windows 10
  9. 1]Использование утилиты управления компьютером
  10. 2]Непосредственно с помощью lusrmgr.msc
  11. Использование поля «Выполнить»
  12. Использование окна поиска Windows
  13. Использование командной строки Windows 10
  14. Использование командной строки Windows PowerShell
  15. Добавить или удалить пользователей из группы
  16. Добавить пользователя в группу с помощью командной строки
  17. Удаление пользователя из группы с помощью командной строки
  18. Добавить пользователя в группу с помощью PowerShell
  19. Удаление пользователя из группы с помощью PowerShell
  20. Работа с учётными записями Windows в оснастке «Локальные группы и пользователи»
  21. Добавление локальных пользователей
  22. Управление пользователями
  23. Группы пользователей Windows
  24. Как узнать, к каким группам относится ваша учетная запись пользователя Windows
  25. Используйте инструмент «Местные пользователи и группы» для быстрого просмотра
  26. Используйте PowerShell (или командную строку) для более подробного просмотра

Windows admin blog

Полезные команды cmd, powershell, администрирование, фичи и решения проблем на win/winserver

AD: узнать в каких группах состоит пользователь / прямое и косвенное членство

user groups 2

В этой статье речь пойдет о том, как вывести список групп, в которых состоит пользователь. Конечно, это можно сделать из GUI, но не всегда такой вывод удовлетворяет цели.

Также, через GUI вы не определите ПОЛНЫЙ список членства (т.н. косвенное членство), когда одни группы могут быть вложены в другие.

Если группа, в которой состоит пользователь, является вложенной группой другой группы — пользователь наделяется полномочиями, заданными конечной группе, хотя и не является ее членом напрямую. Эту группу вы не увидите на вкладке пользователя «Член групп» (Member of)

Рассмотрим в рамках этой статьи следующие инструменты:

1) Whoami /groups

Правда вывод не очень удобен для восприятия. Будут отображены все группы с прямым и косвенным членством

2) Утилита dsget

Вывести список групп, в которых состоит пользователь:

(в данном примере выводим список групп, в которых состоит пользователь Peter Parker, находящийся в OU «IT departmentSupport team»)

Следующая команда отобразит расширенный список групп, в т.ч. в которых косвенно состоит пользователь (ключ -expand)

Утилита dsget доступна только на контроллерах домена

3) Get-ADUser

Для выполнения командлета Get-ADUser требуется установить Powershell модуль Active-Directory.

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

Примечание: данная команда выведет прямое членство (по сути, содержимое закладки пользователя «Член групп» (Member of)

Источник

Как открыть локальных пользователей и группы в Windows 10

Помимо того, что вы видите на экране входа в систему, Windows 10 имеет тенденцию создавать несколько пользователей и групп в фоновом режиме для выполнения нескольких задач на компьютере. Однако они не видны обычному пользователю, входят в систему в фоновом режиме и играют важную роль в структурировании разрешений. Давайте узнаем, как просматривать и управлять локальными пользователями и группами в Windows 10/8/7 на компьютере.

Откройте локальные пользователи и группы в Windows 10

Следующие методы помогут вам открывать и просматривать локальные пользователи и группы в Windows 10:

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

1]Использование утилиты управления компьютером

Open Local Users and Groups

Откройте меню WinX и выберите «Управление компьютером».

На левой панели навигации выберите Локальные пользователи и группы под расширенным списком Управление компьютером (локальное).

Здесь вы увидите две папки:

Раскрытие каждого из них даст вам необходимые сведения.

2]Непосредственно с помощью lusrmgr.msc

Чтобы открыть окно «Локальные пользователи и группы», вы должны вызвать его процесс, который называется lusrmgr.msc, и вы можете сделать это следующими четырьмя способами.

Использование поля «Выполнить»

Ударь Клавиша Windows + R комбинация кнопок на клавиатуре.

Печатать lusrmgr.msc и ударил Войти.

Откроется окно «Локальные пользователи и группы».

Использование окна поиска Windows

Ударь Клавиша Windows + S комбинация кнопок на клавиатуре. Откроется окно поиска Windows.

Ищи lusrmgr.msc и ударил Войти.

Откроется окно «Локальные пользователи и группа».

Использование командной строки Windows 10

Откройте командную строку Windows и выполните следующую команду:

Вы попадете в окно пункта назначения.

Использование командной строки Windows PowerShell

Откройте Windows PowerShell и выполните следующую команду:

Он откроется в окне назначения.

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

lusrmgr

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

Чтобы добавить пользователя, нажмите кнопку «Добавить» и следуйте инструкциям.

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

Вам необходимо выполнить следующую команду:

Замените ГРУППУ и ​​ПОЛЬЗОВАТЕЛЬ настоящими именами.

Удаление пользователя из группы с помощью командной строки

Вам необходимо выполнить следующую команду:

Замените GROUP и USER настоящими именами.

Добавить пользователя в группу с помощью PowerShell

Вам необходимо выполнить следующую команду:

Замените GROUP и USER настоящими именами.

Удаление пользователя из группы с помощью PowerShell

Вам необходимо выполнить следующую команду:

Замените ГРУППУ и ​​ПОЛЬЗОВАТЕЛЬ настоящими именами.

Надеюсь, это поможет.

Пользователь Windows 10 Home? Эти ссылки могут вас заинтересовать:

Источник

Работа с учётными записями Windows в оснастке «Локальные группы и пользователи»

usergroup

Оснастка lusrmgr.msc доступна в числе прочих инструментов администрирования в системной консоли «Управление компьютером». Можем запустить её с помощью внутрисистемного поиска.

img 1 6

Здесь в древе слева раскрываем «Локальные пользователи и группы». В оснастке будет два раздела, один из них – это «Группы», где можно оперировать группами, т.е. категориями пользователей с набором определённых прав в операционной системе. Группы можно переименовывать, удалять, применять к пользователям Windows.

img 2 6

Другой раздел – «Пользователи», здесь, соответственно, можно управлять пользователями. Детально о возможностях этого раздела мы и будем говорить далее.

img 3 6

img 4 6

Добавление локальных пользователей

Оснастка lusrmgr.msc примечательна простотой и быстротой создания новых локальных пользователей. Так, в Win8.1 и Win10 новые пользователи создаются только в современных системных параметрах, где этот процесс сопровождается волокитой с отказом от способа входа нового пользователя в систему с подключением к аккаунту Microsoft, если мы хотим создать для него локальную «учётку». Новый пользователь сам может решить, хочет ли он подключать аккаунт Microsoft или нет, и если хочет, то он сам может это сделать в системных настройках, даже если у него будут только права стандартного пользователя. В оснастке же lusrmgr.msc всё делается на раз-два: на пустом месте в разделе «Пользователи» жмём контекстное меню, выбираем «Новый пользователь».

img 5 6

Вписываем имя пользователя. Далее можем установить для него пароль, а можем ничего не устанавливать, активная по умолчанию опция требования смены пароля при первом заходе этого пользователя даст ему возможность самому установить себе пароль. Мы также можем убрать галочку этой опции, тогда новая «учётка» будет незапаролена, и пользователь в любой момент позднее, если посчитает нужным, установит себе пароль в системных настройках.

img 6 6

Вот, собственно, и все телодвижения, если нам надо создать локального пользователя со стандартными правами. Если же учётную запись пользователю надо создать с правами администратора, тогда делаем на этом пользователе двойной клик. Откроется окошко свойств пользователя, в нём переходим на вкладку членства в группах. Удаляем группу «Пользователи».

img 7 6

Жмём «Добавить». В появившемся окошке выбора групп нажимаем «Дополнительно».

img 8 6

Далее – «Поиск». И кликаем «Администраторы».

img 9 6

Жмём «Ок».

img 10 5

Всё: у пользователя есть администраторские права. Теперь просто нажимаем «Применить».

img 11 4

Управление пользователями

Какие возможности по управлению учётными записями локальных пользователей нам доступны в lusrmgr.msc? Как и в других системных настройках Windows, сами обладая правами администратора, можем пользователей удалять, переименовывать, менять им пароль, менять тип «учётки» со стандартного пользователя на администратора и наоборот. Для использования этих возможностей жмём контекстное меню на нужном пользователе и выбираем что нам надо.

img 12 4

img 13 4

img 14 4

img 15 4

img 16 2

Источник

Группы пользователей Windows

Windows предусматривает возможность работы за одним ПК сразу несколько человек, причем каждый из пользователей может иметь разные права доступа. Кто-то имеет возможность менять настройки сети, пользоваться удаленным доступом, другой будет лишен таких привилегий. Все зависит от того, в какую группу входят эти люди.

Чтобы регулировать возможности разной категории пользователей, необходимы специальные группы Windows. Они нужны для настройки прав доступа к конкретным возможностям системы.

Изменение прав доступа

Чтобы изменять права доступа пользователей, в Windows предусмотрено 2 инструмента. Это консоль Управление компьютером и Редактор локальной групповой политики. С их помощью вы можете добавлять пользователей в ту или иную группу, а также исключать их оттуда.

Для добавления пользователя через Управление компьютером необходимо выполнить определенную последовательность операций. Сначала кликните правой кнопкой мыши по значку Мой компьютер. Затем выберите Управление/Локальные пользователи и группы/Группы. Далее выберите необходимую группу и откройте ее. После этого откроется окно, в котором вам следует выбрать «Добавить». В следующем окне, которое появится, задайте имя пользователя для включения в эту группу. При необходимости вы можете воспользоваться функцией «Проверить имена». Выбрав одного или нескольких пользователей, нажмите ОК.

Если вы хотите удалить пользователя из группы, делать нужно практически то же самое. Только вместо пункта «Добавить» вам надо будет нажать на «Удалить».

Для изменения прав доступа через Редактор локальной групповой политики вам нужно сначала открыть его через меню «Выполнить». Нужный вам файл называется gpedit.msc. Далее выбирайте Конфигурация компьютера/Конфигурация Windows/Параметры безопасности/Локальные политики/Назначение прав пользователей. Выберите подходящую вам политику с правами доступа, нажмите «Добавить» и «Задать имя пользователя». Сам процесс добавления и удаления пользователя происходит по аналогии с такими же действиями через Управление компьютером.

Между двумя способами настроек прав доступа существует заметная разница. Консоль дает обширные права и запреты. Здесь даются общие положения, а мельчайшие тонкости и детали не учитываются. Локальные политики работают по иному принципу. Пользователь может настроить права доступа с учетом каждой мелочи. Например, это может быть даже возможность изменения времени и часового пояса. Получается, что пользователь может выбрать любой из двух подходов, которые являются совершенно разными. Это дает определенную вариативность в настройках.

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

Это основные группы, которые могут встречаться практически на всех ПК с операционной системой Windows. Однако этих групп может быть гораздо больше. Часто можно встретить деление на группы Администраторы, Пользователи, Гости.

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

Источник

Как узнать, к каким группам относится ваша учетная запись пользователя Windows

Группа безопасности — это просто набор учетных записей пользователей. Права и разрешения назначаются группе, а затем эти права и разрешения предоставляются любой учетной записи, которая является членом группы. Членство в группах может определять доступ пользователя к файлам, папкам и даже системным настройкам. Вот как вы можете узнать, к каким группам принадлежит учетная запись пользователя Windows.

Используйте инструмент «Местные пользователи и группы» для быстрого просмотра

Если вы просто хотите быстро взглянуть на локальные группы, к которым принадлежит учетная запись пользователя, инструмент Local Users and Groups отлично справится с этой задачей. Обратите внимание, что для запуска этого инструмента вам необходимо войти в Windows с учетной записью, имеющей права администратора.

Нажмите Windows + R, введите «lusrmgr.msc» в поле «Выполнить» и нажмите Enter.

В окне «Локальные пользователи и группы» выберите папку «Пользователи», а затем дважды щелкните учетную запись пользователя, которую вы хотите просмотреть.

В окне свойств учетной записи пользователя перейдите на вкладку «Член». Эта вкладка показывает локальные группы, к которым принадлежит учетная запись пользователя, а также позволяет добавить учетную запись в другие группы.

Используйте PowerShell (или командную строку) для более подробного просмотра

Нажмите «Windows + X» и выберите «Windows PowerShell».

wg 4.png.pagespeed.ce.YXRue1CKCh

В командной строке введите следующую команду и нажмите Enter:

К сожалению, в отличие от использования инструмента «Локальные пользователи и группы», который мы рассмотрели в предыдущем разделе, команда whoami не позволяет вам проверять группы на наличие какой-либо учетной записи, кроме той, с которой вы в данный момент вошли.

Источник

В этой статье речь пойдет о том, как вывести список групп, в которых состоит пользователь. Конечно, это можно сделать из GUI, но не всегда такой вывод удовлетворяет цели.

Также, через GUI вы не определите ПОЛНЫЙ список членства (т.н. косвенное членство), когда одни группы могут быть вложены в другие.

Если группа, в которой состоит пользователь, является вложенной группой другой группы — пользователь наделяется полномочиями, заданными конечной группе, хотя и не является ее членом напрямую. Эту группу вы не увидите на вкладке пользователя «Член групп» (Member of)

Рассмотрим в рамках этой статьи следующие инструменты:

  • whoami /groups — членство в группах текущего пользователя
  • dsget user — покажет прямое и косвенное членство
  • Get-ADUser (Powershell)

1) Whoami /groups

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

whoami /groups

Правда вывод не очень удобен для восприятия. Будут отображены все группы с прямым и косвенным членством

2) Утилита dsget

Вывести список групп, в которых состоит пользователь:

(в данном примере выводим список групп, в которых состоит пользователь Peter Parker, находящийся в OU «IT departmentSupport team»)

dsget user "CN=Peter Parker,OU=Support team,OU=IT department,DC=Contoso,DC=com" -memberof

Следующая команда отобразит расширенный список групп, в т.ч. в которых косвенно состоит пользователь (ключ -expand)

dsget user "CN=Peter Parker,OU=Support team,OU=IT department,DC=Contoso,DC=com"   -expand

Утилита dsget доступна только на контроллерах домена

3) Get-ADUser

Для выполнения командлета Get-ADUser требуется установить Powershell модуль Active-Directory.

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

Get-ADUser username -properties memberof | select memberof -expandproperty memberof

Примечание: данная команда выведет прямое членство (по сути, содержимое закладки пользователя «Член групп» (Member of)

СВЯЗАННЫЕ: учетные записи пользователей, группы, разрешения и их роль в общем доступе

Группа безопасности — это просто набор учетных записей пользователей. Права и разрешения назначаются группе, а затем эти права и разрешения предоставляются любой учетной записи, которая является членом группы. Членство в группах может определять доступ пользователя к файлам, папкам и даже системным настройкам. Вот как вы можете узнать, к каким группам принадлежит учетная запись пользователя Windows.

Используйте инструмент «Местные пользователи и группы» для быстрого просмотра

Если вы просто хотите быстро взглянуть на локальные группы, к которым принадлежит учетная запись пользователя, инструмент Local Users and Groups отлично справится с этой задачей. Обратите внимание, что для запуска этого инструмента вам необходимо войти в Windows с учетной записью, имеющей права администратора.

Нажмите Windows + R, введите «lusrmgr.msc» в поле «Выполнить» и нажмите Enter.

В окне «Локальные пользователи и группы» выберите папку «Пользователи», а затем дважды щелкните учетную запись пользователя, которую вы хотите просмотреть.

В окне свойств учетной записи пользователя перейдите на вкладку «Член». Эта вкладка показывает локальные группы, к которым принадлежит учетная запись пользователя, а также позволяет добавить учетную запись в другие группы.

Используйте PowerShell (или командную строку) для более подробного просмотра

Если вы хотите более детально рассмотреть членство в группе учетной записи, которая также включает скрытые системные группы, к которым принадлежит учетная запись, вам необходимо запустить PowerShell (или командную строку; обсуждаемая здесь команда работает аналогично) ,

Нажмите «Windows + X» и выберите «Windows PowerShell».

В командной строке введите следующую команду и нажмите Enter:

  whoami / группы 

К сожалению, в отличие от использования инструмента «Локальные пользователи и группы», который мы рассмотрели в предыдущем разделе, команда whoami не позволяет вам проверять группы на наличие какой-либо учетной записи, кроме той, с которой вы в данный момент вошли.


Билл Стюарт, scripting guru, в своей статье на WindowsITPro описывает те проблемы, с которыми ему пришлось столкнуться при написании Powershell-скрипта, который бы выводил членство пользователей в группах Active Directory. Пришлось проделать 4 усовершенствования, чтобы все заработало как надо. Узнать, как Билл реализовал таки вывод членства в группах, и скачать сам Powershell-скрипт Вы можете под катом.

Ссылка на окончательный вариант скрипта.
www.windowsitpro.com/content/content/141463/141463.zip

Я сбился со счету, сколько раз я уже встречал на форумах вопрос: “Кто-нибудь знает, как получить информацию обо всех пользователях и их членстве в группах в домене AD?”. Аудиторы и консультанты по информационной безопасности также задают подобный вопрос, когда осуществляют оценку инфраструктуры (среды) Active Directory в организации. Так как этот вопрос довольно насущный, я решил написать PowerShell скрипт, который бы позволял упростить эту задачу.
Сначала я думал, что написать подобный скрипт – пара пустяков, но на моем пути встретились 4 препятствия, которые усложнили мою работу. Я опишу эти проблемы, чуть позже, но сначала мне хотелось бы рассказать об основах использования Microsoft.NET в Powershell при поиске по AD.

Использование .NET для поиска по AD

Используя .NET для поиска по AD, Вы можете использовать type accelerator в PowerShell для поиска объектов. (Type accelerator – сокращенное имя для .NET класса). Например, введите следующую команду, чтобы вывести список всех пользователей в данном домене:

PS C:> $searcher =  "(&(objectCategory=user)(objectClass=user))"
 
PS C:> $searcher.FindAll()

[ ADSISearcher] – это type accelerator для объекта .NET System.DirectoryServices.DirectorySearcher. Строка, идущая после данного type accelerator, задает свойства SearchFilter для данного объекта, чтобы найти все объекты пользователей, и метод FindAll начинает поиск. На выходе мы получаем список объектов System.DirectoryServices.SearchResult.
Затем мы хотим определить, в какой группе состоит пользователь. Чтобы узнать, мы можем использовать коллекцию свойств (Properties collection) из объекта SearchResult и извлечь такой атрибут объекта как memberof. Используя переменную $searcher из предыдущего примера, мы можем использовать метод FindOne (вместо FindAll), чтобы извлечь один результат и вывести членство пользователя в группах:

PS C:> $result = $searcher.FindOne()
 
PS C:> $result.Properties["memberof"] | sort-object

Первая команда находит первого пользователя, который удовлетворяет поисковому фильтру, а вторая команда выводит список в групп, в которых пользователь состоит.
Однако если внимательно посмотреть на этот список, то можно заметить отсутствие важной детали: основная группа (primary group) пользователя не включена в атрибут memberof. Хотелось бы получить полный список групп (включая основную группу), что приводит нас к первой проблеме.

Проблема #1: Как найти основную группу пользователя

Есть обходной путь для исключения основной группы из атрибута memberof. Он описан в этой статье support.microsoft.com/kb/321360 Совершаем следующие действия:

  1. Связываемся (connect to) с объектом пользователя, используя WinNT provider (вместо LDAP provider).
  2. Извлекайте атрибут пользователя primaryGroupID .
  3. Извлекайте имена групп пользователя, используя WinNT provider, который включает основную группу.
  4. Осуществляйте поиск в AD этих групп, используях их sAMAccountName атрибуты.
  5. Находим группу, в которой атрибут primaryGroupToken совпадает с атрибутом пользователя primaryGroupID.

Проблема с этим “обходным путем” заключается в том, что он требует, чтобы скрипт WinNT provider для подключения к объекту пользователя. То есть, необходимо, чтобы скрипт перевел различающееся имя пользователя (например, CN=Ken Myer,OU=Marketing,DC=fabrikam,DC=com) в формат, который WinNT provider может использовать (например, WinNT://FABRIKAM/kenmyer,User).

Проблема #2: Перевод из одного формата имени в другой

Объект NameTranslate является COM (ActiveX) объектом, который использует интерфейс IADsNameTranslate, осуществляющий перевод имен объектов AD в переменные (чередующиеся, alternate) форматы. Вы можете использовать объект NameTranslate, создав объект и затем вызвав его Init метод для инициализации. Например, список 1 показывает код VBScript скрипта, которые создает и инициализирует NameTranslate.

Список 1: Создание и инициализация объекта NameTranslate в VBScript

Const ADS_NAME_INITTYPE_GC = 3
 
Dim NameTranslate
 
Set NameTranslate = CreateObject("NameTranslate")
 
NameTranslate.Init ADS_NAME_INITTYPE_GC, vbNull

Однако объект NameTranslate не работает так, как ожидалось в PowerShell, что показано на рисунке 1.


Рис 1: Неожиданное поведения объекта NameTranslate в PowerShell

Проблема заключается в том, что в объекте NameTranslate отсутствует библиотека типов, которые .NET (а следовательно и PowerShell) использует для предоставление простого доступа к COM-объектам. Но к счастью и эту проблему можно обойти: метод .NET InvokeMember позволяет PowerShell получить или установить свойства или вызвать метод из COM-объекта, который отсутствует в библиотеке типов. Список 2 показывает Powershell эквивалент кода скрипта VBScript, приведенного в таблице 1

Список 2: Создание и инициализация объекта NameTranslate в PowerShell

$ADS_NAME_INITTYPE_GC = 3
 
$NameTranslate = new-object -comobject NameTranslate
 
[Void] $NameTranslate.GetType().InvokeMember("Init", "InvokeMethod",
 
  $NULL, $NameTranslate, ($ADS_NAME_INITTYPE_GC, $NULL))

Я хотел, чтобы скрипт решал другую проблему, связанную с именем. Атрибут memberof для пользователя AD содержит список различающихся имен, в которых пользователь состоит, но вместо этого я хотел получить атрибут samaccountname для каждой группы. Скрипт использует объект NameTranslate, чтобы справиться с этой проблемой.

Проблема #3: Что делать со специальными символами

Документация Microsoft относительно различающихся имен упоминает, что отдельные символы должны быть опущены (например, с префиксом “”) для того, чтобы быть правильным образом интерпретированы (в этой статье написано подробнее). К счастью, COM-объект Pathname дает такую возможность. Скрипт использует объект Pathname, чтобы пропустить те различающиеся имена, которые содержат специальные символы. Объект Pathname также требует .NET метод InvokeMember потому что, также как и объект NameTranslate, у этого объекта отсутствует библиотека типов.

Проблема #4: Повышаем производительность

Если оглянуться на Проблему #1 (Как найти основную группу пользователя), можно заметить, что обходное решение требует поиск групп пользователя. Проделав эту процедуру для нескольких учетных записей, Вы поймете, насколько она неоптимальна. Извлечение атрибута samaccountname для каждой группы в атрибуте memberof, о котором я упомянул, рассматривая Проблему #2 (Перевод из одного формата имени в другой) также неоптимально и отнимает много времени. Чтобы решить эту проблему скрипт использует две глобальные хеш-таблицы (global hash tables), которые производят хеширование результатов для повышения произодительности.

Get-UsersAndGroups.ps1

Get-UsersAndGroups.ps1 — это готовый Powershell-скрипт, который выводит список пользователей и их членства в группах. Синтаксис командной строки скрипта следующий:

 
Get-UsersAndGroups [[-SearchLocation] <String[]>] [-SearchScope <String>]

Параметр -SearchLocation представляет собой одно или несколько различающихся имен для учетных записей пользователей. Потому что различающееся имя содержит запятые (,), их необходимо помещать в скобки (одинарные или двойные) каждое различающееся имя, чтобы PowerShell не интерпретировал их как массив. Имя параметра -SearchLocation опционально. Скрипт также принимает конвейерный ввод (pipeline input); каждое значение из конвейера должно являться различающимся именем, которое необходимо искать.
Значение -SearchScope обозначает возможный масштаб поиска по AD. Это значение должно быть одним из трех: Base – Поиск ограничивается базовым объектом, не используется; OneLevel – поиск ближайших дочерних объектов базового объекта и Subtree – поиск по подветке. Если это значение не уточнено, то по умолчанию используется Subtree. Используйте -SearchScope OneLevel, если Вы хотите определенное подразделение (OU), но ни одна из OU не вложена в него. Скрипт выводит объекты, которые содержат свойства, перечисленные в таблице 1.

Преодолевая 4 проблемы

Скрипт решает вышеописанные проблемы:

  • Проблема #1: Как найти основную группу пользователя: Функция get-primarygroupname возвращает имя основной группы пользователя.
  • Проблема #2: Перевод из одного формата имени в другой: Скрипт использует COM-объект NameTranslate, чтобы осуществить перевод из одного формата имени в другое.
  • Проблема #3: Что делать со специальными символами: Скрипт использует функцию get-escaped, которая использует объект Pathname, чтобы возвратить различающиеся имена с вставленными пропущенными символами (там, где это необходимо).
  • Проблема #4: Повышаем производительность: Скрипт использует хэш-таблицы $PrimaryGroups и $Groups. Ключи в хеш-таблице $PrimaryGroups являютяются идентификаторами основной группы и их значения – атрибутами samaccountname основной группы.

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

Написание скрипта Get-UsersAndGroups.ps1 оказалось не таким уж и простым, как мне казалось с первого взгляда, но проще сделать нельзя. Простейшее приложение скрипта –следующая команда:

PS C:> Get-UsersAndGroups | Export-CSV Report.csv -NoTypeInformation

Она создает .csv файл, который содержит полный список пользователей и групп для данного домена. Имя в своем арсенале такой скрипт, мы можете быстро и без проблем создать отчет по группам и пользователям.

Еще раз продублируем ссылку на окончательный вариант скрипта.
www.windowsitpro.com/content/content/141463/141463.zip

Сам скрипт:

# Get-UsersAndGroups.ps1
# Written by Bill Stewart (bstewart@iname.com)

#requires -version 2

<#
.SYNOPSIS
Retreves users, and group membership for each user, from Active Directory.

.DESCRIPTION
Retreves users, and group membership for each user, from Active Directory. Note that each user's primary group is included in the output, and caching is used to improve performance.

.PARAMETER SearchLocation
Distinnguished name (DN) of where to begin searching for user accounts; e.g. "OU=Information Technology,DC=fabrikam,DC=com". If you omit this parameter, the default is the current domain (e.g., "DC=fabrikam,DC=com").

.PARAMETER SearchScope
Specifies the scope for the Active Directory search. Must be one of the following values: Base (Limit the search to the base object, not used), OneLevel (Searches the immediate child objects of the base object), or Subtree (Searches the whole subtree, including the base object and all its child objects). The default value is Subtree. To search only a location but not its children, specify OneLevel.

.OUTPUTS
PSObjects containing the following properties:
  DN        The user's distinguished name
  CN        The user's common name
  UserName  The user's logon name
  Disabled  True if the user is disabled; false otherwise
  Group     The groups the user is a member of (one object per group)
#>

[CmdletBinding()]
param(
  [parameter(Position=0,ValueFromPipeline=$TRUE)]
    [String[]] $SearchLocation="",
    [String][ValidateSet("Base","OneLevel","Subtree")] $SearchScope="Subtree"
)

begin {
  $ADS_NAME_INITTYPE_GC = 3
  $ADS_SETTYPE_DN = 4
  $ADS_NAME_TYPE_1779 = 1
  $ADS_NAME_TYPE_NT4 = 3
  $ADS_UF_ACCOUNTDISABLE = 2

  # Assume pipeline input if SearchLocation is unbound and doesn't exist.
  $PIPELINEINPUT = (-not $PSBOUNDPARAMETERS.ContainsKey("SearchLocation")) -and (-not $SearchLocation)
  # If -SearchLocation is a single-element array containing an emty string
  # (i.e., -SearchLocation not specified and no pipeline), then populate with
  # distinguished name of current domain. In this case, input is not coming
  # from the pipeline.
  if (($SearchLocation.Count -eq 1) -and ($SearchLocation[0] -eq "")) {
    try {
      $SearchLocation[0] = ([ADSI] "").distinguishedname[0]
    }
    catch [System.Management.Automation.RuntimeException] {
      throw "Unable to retrieve the distinguished name for the current domain."
    }
    $PIPELINEINPUT = $FALSE
  }

  # These hash tables cache primary groups and group names for performance.
  $PrimaryGroups = @{}
  $Groups = @{}

  # Create and initialize a NameTranslate object. If it fails, throw an error.
  $NameTranslate = new-object -comobject "NameTranslate"

  try {
    [Void] $NameTranslate.GetType().InvokeMember("Init", "InvokeMethod", $NULL, $NameTranslate, ($ADS_NAME_INITTYPE_GC, $NULL))
  }
  catch [System.Management.Automation.MethodInvocationException] {
    throw $_
  }

  # Create a Pathname object.
  $Pathname = new-object -comobject "Pathname"

  # Returns the last two elements of the DN using the Pathname object.
  function get-rootname([String] $dn) {
    [Void] $Pathname.GetType().InvokeMember("Set", "InvokeMethod", $NULL, $Pathname, ($dn, $ADS_SETTYPE_DN))
    $numElements = $Pathname.GetType().InvokeMember("GetNumElements", "InvokeMethod", $NULL, $Pathname, $NULL)
    $rootName = ""
    ($numElements - 2)..($numElements - 1) | foreach-object {
      $element = $Pathname.GetType().InvokeMember("GetElement", "InvokeMethod", $NULL, $Pathname, $_)
      if ($rootName -eq "") {
        $rootName = $element
      }
      else {
        $rootName += ",$element"
      }
    }
    $rootName
  }

  # Returns an "escaped" copy of the specified DN using the Pathname object.
  function get-escaped([String] $dn) {
    [Void] $Pathname.GetType().InvokeMember("Set", "InvokeMethod", $NULL, $Pathname, ($dn, $ADS_SETTYPE_DN))
    $numElements = $Pathname.GetType().InvokeMember("GetNumElements", "InvokeMethod", $NULL, $Pathname, $NULL)
    $escapedDN = ""
    for ($n = 0; $n -lt $numElements; $n++) {
      $element = $Pathname.GetType().InvokeMember("GetElement", "InvokeMethod", $NULL, $Pathname, $n)
      $escapedElement = $Pathname.GetType().InvokeMember("GetEscapedElement", "InvokeMethod", $NULL, $Pathname, (0, $element))
      if ($escapedDN -eq "") {
        $escapedDN = $escapedElement
      }
      else {
        $escapedDN += ",$escapedElement"
      }
    }
    $escapedDN
  }

  # Return the primary group name for a user. Algorithm taken from
  # http://support.microsoft.com/kb/321360
  function get-primarygroupname([String] $dn) {
    # Pass DN of user to NameTranslate object.
    [Void] $NameTranslate.GetType().InvokeMember("Set", "InvokeMethod", $NULL, $NameTranslate, ($ADS_NAME_TYPE_1779, $dn))
    # Get NT4-style name of user from NameTranslate object.
    $nt4Name = $NameTranslate.GetType().InvokeMember("Get", "InvokeMethod", $NULL, $NameTranslate, $ADS_NAME_TYPE_NT4)
    # Bind to user using ADSI's WinNT provider and get primary group ID.
    $user = [ADSI] "WinNT://$($nt4Name.Replace('', '/')),User"
    $primaryGroupID = $user.primaryGroupID[0]
    # Retrieve user's groups (primary group is included using WinNT).
    $groupNames = $user.Groups() | foreach-object {
      $_.GetType().InvokeMember("Name", "GetProperty", $NULL, $_, $NULL)
    }
    # Query string is sAMAccountName attribute for each group.
    $queryFilter = "(|"
    $groupNames | foreach-object { $queryFilter += "(sAMAccountName=$($_))" }
    $queryFilter += ")"
    # Build a DirectorySearcher object.
    $searchRootDN = get-escaped (get-rootname $dn)
    $searcher = [ADSISearcher] $queryFilter
    $searcher.SearchRoot = [ADSI] "LDAP://$searchRootDN"
    $searcher.PageSize = 128
    $searcher.SearchScope = "Subtree"
    [Void] $searcher.PropertiesToLoad.Add("samaccountname")
    [Void] $searcher.PropertiesToLoad.Add("primarygrouptoken")
    # Find the group whose primaryGroupToken attribute matches user's
    # primaryGroupID attribute.
    foreach ($searchResult in $searcher.FindAll()) {
      $properties = $searchResult.Properties
      if ($properties["primarygrouptoken"][0] -eq $primaryGroupID) {
        $groupName = $properties["samaccountname"][0]
        return $groupName
      }
    }
  }

  # Return a DN's sAMAccount name based on the distinguished name.
  function get-samaccountname([String] $dn) {
    # Pass DN of group to NameTranslate object.
    [Void] $NameTranslate.GetType().InvokeMember("Set", "InvokeMethod", $NULL, $NameTranslate, ($ADS_NAME_TYPE_1779, $dn))
    # Return the NT4-style name of the group without the domain name.
    $nt4Name = $NameTranslate.GetType().InvokeMember("Get", "InvokeMethod", $NULL, $NameTranslate, $ADS_NAME_TYPE_NT4)
    $nt4Name.Substring($nt4Name.IndexOf("") + 1)
  }

  function get-usersandgroups2($location) {
    # Finds user objects.
    $searcher = [ADSISearcher] "(&(objectCategory=User)(objectClass=User))"
    $searcher.SearchRoot = [ADSI] "LDAP://$(get-escaped $location)"

    # Setting the PageSize property prevents limiting of search results.
    $searcher.PageSize = 128
    $searcher.SearchScope = $SearchScope

    # Specify which attributes to retrieve ([Void] prevents output).
    [Void] $searcher.PropertiesToLoad.Add("distinguishedname")
    [Void] $searcher.PropertiesToLoad.Add("cn")
    [Void] $searcher.PropertiesToLoad.Add("samaccountname")
    [Void] $searcher.PropertiesToLoad.Add("useraccountcontrol")
    [Void] $searcher.PropertiesToLoad.Add("primarygroupid")
    [Void] $searcher.PropertiesToLoad.Add("memberof")
    # Sort results by CN attribute.
    $searcher.Sort = new-object System.DirectoryServices.SortOption
    $searcher.Sort.PropertyName = "cn"

    foreach ($searchResult in $searcher.FindAll()) {
      $properties = $searchResult.Properties
      $dn = $properties["distinguishedname"][0]
      write-progress "Get-UsersAndGroups" "Searching $location" -currentoperation $dn
      $cn = $properties["cn"][0]
      $userName = $properties["samaccountname"][0]
      $disabled = ($properties["useraccountcontrol"][0] -band $ADS_UF_ACCOUNTDISABLE) -ne 0
      # Create an ArrayList containing user's group memberships.
      $memberOf = new-object System.Collections.ArrayList
      $primaryGroupID = $properties["primarygroupid"][0]
      # If primary group is already cached, add the name to the array;
      # otherwise, find out the primary group name and cache it.
      if ($PrimaryGroups.ContainsKey($primaryGroupID)) {
        [Void] $memberOf.Add($PrimaryGroups[$primaryGroupID])
      }
      else {
        $primaryGroupName = get-primarygroupname $dn
        $PrimaryGroups.Add($primaryGroupID, $primaryGroupName)
        [Void] $memberOf.Add($primaryGroupName)
      }
      # If the user's memberOf attribute is defined, find the group names.
      if ($properties["memberof"]) {
        foreach ($groupDN in $properties["memberof"]) {
          # If the group name is aleady cached, add it to the array;
          # otherwise, find out the group name and cache it.
          if ($Groups.ContainsKey($groupDN)) {
            [Void] $memberOf.Add($Groups[$groupDN])
          }
          else {
            $groupName = get-samaccountname $groupDN
            $Groups.Add($groupDN, $groupName)
            [Void] $memberOf.Add($groupName)
          }
        }
      }
      # Sort the ArrayList and output one object per group.
      $memberOf.Sort()
      foreach ($groupName in $memberOf) {
        $output = new-object PSObject
        $output | add-member NoteProperty "DN" $dn
        $output | add-member NoteProperty "CN" $cn
        $output | add-member NoteProperty "UserName" $userName
        $output | add-member NoteProperty "Disabled" $disabled
        $output | add-member NoteProperty "Group" $groupName
        $output
      }
    }
  }
}

process {
  if ($PIPELINEINPUT) {
    get-usersandgroups2 $_
  }
  else {
    $SearchLocation | foreach-object {
      get-usersandgroups2 $_
    }
  }
}

via WindowsITPro

P.S. Для получения разнообразных отчетов по структуре и изменениям AD Вы можете воспользоваться NetWrix AD Change Reporter. Программа позволяет Вам быть в курсе изменений AD и при этом не требует от Вас утомительной работы с логами или ручной автоматизации посредством скриптов. Узнать больше о программе Вы сможете на сайте NetWrix

Asked
11 years, 11 months ago

Viewed
1.4m times

PowerShell’s Get-ADGroupMember cmdlet returns members of a specific group. Is there a cmdlet or property to get all the groups that a particular user is a member of?


I fixed my mistake: Get-Member should be Get-ADGroupMember.

Peter Mortensen's user avatar

asked Feb 22, 2011 at 0:57

Primoz's user avatar

2

Get-ADPrincipalGroupMembership will do this.

Get-ADPrincipalGroupMembership username | select name

name
----
Domain Users
Domain Computers
Workstation Admins
Company Users
Company Developers
AutomatedProcessingTeam

answered Mar 22, 2013 at 12:14

kstrauss's user avatar

kstrausskstrauss

3,5821 gold badge12 silver badges2 bronze badges

15

Single line, no modules necessary, uses current logged user:

(New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$($env:username)))")).FindOne().GetDirectoryEntry().memberOf

Kudos to this vbs/powershell article: http://technet.microsoft.com/en-us/library/ff730963.aspx

Jamie Ide's user avatar

Jamie Ide

47.8k16 gold badges80 silver badges116 bronze badges

answered May 13, 2014 at 9:38

Canoas's user avatar

CanoasCanoas

1,8911 gold badge13 silver badges12 bronze badges

4

Old school way from CMD:

net user mst999 /domain 

Linus Kleen's user avatar

Linus Kleen

33.5k11 gold badges90 silver badges99 bronze badges

answered Jan 30, 2015 at 13:40

user4511672's user avatar

user4511672user4511672

4414 silver badges2 bronze badges

2

(GET-ADUSER –Identity USERNAME –Properties MemberOf | Select-Object MemberOf).MemberOf

mattytommo's user avatar

mattytommo

55.3k15 gold badges126 silver badges147 bronze badges

answered Mar 26, 2012 at 20:24

schmeckendeugler's user avatar

4

This should provide you the details for current user. Powershell not needed.

whoami /groups

answered May 19, 2020 at 16:34

Nayan's user avatar

NayanNayan

3,02424 silver badges34 bronze badges

1

If you cannot get Get-ADPrincipalGroupMembership to work for you could try logging in as that user then use.

$id = [Security.Principal.WindowsIdentity]::GetCurrent()
$groups = $id.Groups | foreach-object {$_.Translate([Security.Principal.NTAccount])}
$groups | select *

answered Oct 4, 2018 at 11:09

andrew pate's user avatar

andrew pateandrew pate

3,67734 silver badges26 bronze badges

2

While there are many excellent answers here, there is one which I was personally looking for that was missing. Once I figured it out — I thought I should post it in case I want to find it later, or it actually manages to help someone else at some point:

Get-ADPrincipalGroupMembership username | Format-Table -auto

A second approach for presenting this is to specify the individual columns you are interested in eg:

Get-ADPrincipalGroupMembership username | select name, GroupScope, GroupCategory

This gives all the AD groups the username belongs to — but also presents all of the default properties of each group formatted nicely as a table.

The key benefit this gives you is you can see at a glance which are distribution lists, & which are Security groups. You can further see at a glance which are Universal, which are DomainLocal & which are Global.
Why would you care about this last bit?

  • Universal group is a security or distribution group that contains
    users, groups, and computers from any domain in its forest as
    members. You can give universal security groups rights and
    permissions on resources in any domain in the forest.
  • Global group is a group that can be used in its own domain, in member
    servers and in workstations of the domain, and in trusting domains.
    In all those locations, you can give a global group rights and
    permissions and the global group can become a member of local groups.
    However, a global group can contain user accounts that are only from
    its own domain.
  • Domain local group is a security or distribution group that can
    contain universal groups, global groups, other domain local groups
    from its own domain, and accounts from any domain in the forest. You
    can give domain local security groups rights and permissions on
    resources that reside only in the same domain where the domain local
    group is located.

answered Dec 12, 2018 at 22:20

kiltannen's user avatar

kiltannenkiltannen

1,0072 gold badges12 silver badges27 bronze badges

1

Get-Member is not for getting user’s group membership. If you want to get a list of groups a user belongs to on the local system, you can do so by:

$query = "ASSOCIATORS OF {Win32_Account.Name='DemoUser1',Domain='DomainName'} WHERE ResultRole=GroupComponent ResultClass=Win32_Account"

Get-WMIObject -Query $query | Select Name

In the above query, replace DemoUser1 with the username you want and the DomainName with either your local computer name or domain name.

answered Feb 22, 2011 at 5:40

ravikanth's user avatar

ravikanthravikanth

24.6k4 gold badges59 silver badges60 bronze badges

2

Get group membership for a user:

$strUserName = "Primoz"
$strUser = get-qaduser -SamAccountName $strUserName
$strUser.memberof

See Get Group Membership for a User

But also see Quest’s Free PowerShell Commands for Active Directory.

[Edit: Get-ADPrincipalGroupMembership command is included in Powershell since v2 with Windows 2008 R2. See kstrauss’ answer below.]

Abraham's user avatar

Abraham

4797 silver badges23 bronze badges

answered Feb 22, 2011 at 1:16

tiago2014's user avatar

tiago2014tiago2014

3,3821 gold badge20 silver badges28 bronze badges

3

Get-Member is a cmdlet for listing the members of a .NET object. This has nothing to do with user/group membership. You can get the current user’s group membership like so:

PS> [System.Security.Principal.WindowsIdentity]::GetCurrent().Groups | 
         Format-Table -auto

BinaryLength AccountDomainSid    Value
------------ ----------------    -----
          28 S-1-5-21-...        S-1-5-21-2229937839-1383249143-3977914998-513
          12                     S-1-1-0
          28 S-1-5-21-...        S-1-5-21-2229937839-1383249143-3977914998-1010
          28 S-1-5-21-...        S-1-5-21-2229937839-1383249143-3977914998-1003
          16                     S-1-5-32-545
...

If you need access to arbitrary users’ group info then @tiagoinu suggestion of using the Quest AD cmdlets is a better way to go.

answered Feb 22, 2011 at 2:03

Keith Hill's user avatar

Keith HillKeith Hill

190k40 gold badges344 silver badges365 bronze badges

I wrote a PowerShell function called Get-ADPrincipalGroupMembershipRecursive. It accepts the DSN of a user, computer, group, or service account. It retrieves an initial list of groups from the account’s memberOf attribute, then recursively checks those group’s memberships. Abbreviated code is below. Full source code with comments can be found here.

function Get-ADPrincipalGroupMembershipRecursive( ) {

    Param(
        [string] $dsn,
        [array]$groups = @()
    )

    $obj = Get-ADObject $dsn -Properties memberOf

    foreach( $groupDsn in $obj.memberOf ) {

        $tmpGrp = Get-ADObject $groupDsn -Properties memberOf

        if( ($groups | where { $_.DistinguishedName -eq $groupDsn }).Count -eq 0 ) {
            $groups +=  $tmpGrp           
            $groups = Get-ADPrincipalGroupMembershipRecursive $groupDsn $groups
        }
    }

    return $groups
}

# Simple Example of how to use the function
$username = Read-Host -Prompt "Enter a username"
$groups   = Get-ADPrincipalGroupMembershipRecursive (Get-ADUser $username).DistinguishedName
$groups | Sort-Object -Property name | Format-Table

answered Dec 5, 2013 at 21:04

Brian Reich's user avatar

Brian ReichBrian Reich

1431 gold badge2 silver badges4 bronze badges

1

No need for long scripts when it is a simple one liner..

QUEST Command

(Get-QADUser -Identity john -IncludedProperties MemberOf | Select-Object MemberOf).MemberOf

MS AD Command

(GET-ADUSER –Identity john –Properties MemberOf | Select-Object MemberOf).MemberOf

I find the MS AD cmd is faster but some people like the Quest ones better..

Steve

answered Nov 6, 2014 at 11:03

Steve Adkin's user avatar

Use:

Get-ADPrincipalGroupMembership username | select name | export-CSV username.csv

This pipes output of the command into a CSV file.

Peter Mortensen's user avatar

answered Jun 5, 2015 at 10:36

Dee's user avatar

First, import the ActiveDirectory module:

Import-Module ActiveDirectory

Then issue this command:

Get-ADGroupMember -Identity $group | foreach-object {
    Write-Host $_.SamAccountName
}

This will display the members of the specified group.

answered Dec 14, 2012 at 18:25

Jonathan Rioux's user avatar

Jonathan RiouxJonathan Rioux

1,0292 gold badges14 silver badges29 bronze badges

1

It is just one line:

(get-aduser joe.bloggs -properties *).memberof

end of :)

Peter Mortensen's user avatar

answered May 23, 2015 at 7:08

user4931356's user avatar

1

The below works well:

get-aduser $username -Properties memberof | select -expand memberof

If you have a list of users:

$list = 'administrator','testuser1','testuser2'
$list | `
    %{  
        $user = $_; 
        get-aduser $user -Properties memberof | `
        select -expand memberof | `
        %{new-object PSObject -property @{User=$user;Group=$_;}} `
    }

answered Feb 16, 2015 at 17:25

JohnLBevan's user avatar

JohnLBevanJohnLBevan

21.9k11 gold badges93 silver badges173 bronze badges

Get-QADUser -SamAccountName LoginID | % {$_.MemberOf } | Get-QADGroup | select name

answered Mar 20, 2014 at 21:22

Sathish's user avatar

   Get-ADUser -Filter { memberOf -RecursiveMatch "CN=Administrators,CN=Builtin,DC=Fabrikam,DC=com" } -SearchBase "CN=Administrator,CN=Users,DC=Fabrikam,DC=com"  -SearchScope Base
                  ## NOTE: The above command will return the user object (Administrator in this case) if it finds a match recursively in memberOf attribute. 

answered Jul 7, 2014 at 12:22

Sunil Aher's user avatar

Sunil AherSunil Aher

7473 gold badges14 silver badges34 bronze badges

I couldn’t get the following to work for a particular user:

Get-ADPrincipalGroupMembership username

It threw an error that I was not willing to troubleshoot.

I did however come up with a different solution using Get-ADUser. I like it a bit better because if you don’t know the account name then you can get it based off of a wildcard on the user’s actual name. Just fill in PartOfUsersName and away it goes.

#Get the groups that list of users are the member of using a wildcard search

[string]$UserNameLike = "*PartOfUsersName*" #Use * for wildcards here
[array]$AccountNames = $(Get-ADUser -Filter {Name -like $UserNameLike}).SamAccountName

ForEach ($AccountName In $AccountNames) {
Write-Host "`nGETTING GROUPS FOR" $AccountName.ToUpper() ":"
(Get-ADUser -Identity $AccountName -Properties MemberOf|select MemberOf).MemberOf|
    Get-ADGroup|select Name|sort name
    }

Huge props to schmeckendeugler and 8DH for getting me to this solution. +1 to both of you.

answered Apr 24, 2015 at 0:03

Adam's user avatar

AdamAdam

5411 gold badge6 silver badges8 bronze badges

To get it recursive, you can use:

<# 
    .SYNOPSIS   
        Get all the groups that a user is MemberOf.

    .DESCRIPTION
        This script retrieves all the groups that a user is MemberOf in a recursive way.

    .PARAMETER SamAccountName
        The name of the user you want to check #>

Param (
    [String]$SamAccountName = 'test',
    $DomainUsersGroup = 'CN=Domain Users,CN=Users,DC=domain,DC=net'
)


Function Get-ADMemberOf {
    Param (
        [Parameter(ValueFromPipeline)]
        [PSObject[]]$Group,
        [String]$DomainUsersGroup = 'CN=Domain Users,CN=Users,DC=grouphc,DC=net'
    )
    Process {
        foreach ($G in $Group) {
            $G | Get-ADGroup | Select -ExpandProperty Name
            Get-ADGroup $G -Properties MemberOf| Select-Object Memberof | ForEach-Object {
                Get-ADMemberOf $_.Memberof
            }
        }
    }
}


$Groups = Get-ADUser $SamAccountName -Properties MemberOf | Select-Object -ExpandProperty MemberOf
$Groups += $DomainUsersGroup
$Groups | Get-ADMemberOf | Select -Unique | Sort-Object

answered Feb 15, 2017 at 14:59

DarkLite1's user avatar

DarkLite1DarkLite1

13.1k40 gold badges113 silver badges202 bronze badges

Studying all comments presented gave me a starting point (thanks for such) but left me with several unresolved issues. As result here is my answer. The code snippet provided does a little more than what is asked for but it provides helpful debugging info.

[array] $script:groupsdns = @()
function Get-ADPrincipalGroupMembershipRecursive() 
{
  Param( [string] $dn, [int] $level = 0, [array] $groups = @() )

  #if(($groupsdns | where { $_.DistinguishedName -eq $dn }).Count -ne 0 ) { return $groups } # dependency on next statement
  #$groupsdns += (Get-ADObject $dn -Properties MemberOf) # Get-ADObject cannot find an object with identity
  if ($script:groupsdns.Contains($dn)) { return $groups }
  $script:groupsdns += $dn
  $mo = $Null
  $mo = Get-ADObject $dn -Properties MemberOf # Get-ADObject cannot find an object with identity
  $group = ($dn + " (" + $level.ToString())
  if ($mo -eq $Null) { $group += "!" }
  $group += ")"
  $groups += $group
  foreach( $groupdn in $mo.MemberOf )
  {
    $groups = Get-ADPrincipalGroupMembershipRecursive -dn $groupdn -level ($level+1) -groups $groups
  }
  if ($level -le 0) 
  { 
    $primarygroupdn = (Get-ADUser -Identity $dn -Properties PrimaryGroup).PrimaryGroup 
    $groups = Get-ADPrincipalGroupMembershipRecursive -dn $primarygroupdn -level ($level+1) -groups $groups
  }
  return $groups
}
$adusergroups = Get-ADPrincipalGroupMembershipRecursive -dn $aduser.DistinguishedName
$adusergroups | ft -AutoSize | `
              Out-File -Width 512 Get-ADPrincipalGroupMembershipRecursive.txt #-Append #-Wrap # | Sort-Object -Property Name

answered Nov 28, 2018 at 20:16

ES44AC SD70MAC's user avatar

1

When you do not have privileges to consult other member groups but you do have the privilege to consult group members, you can do the following to build a map of which user has access to which groups.

$groups = get-adgroup -Filter * | sort name | select Name
$users = @{}
foreach($group in $groups) {
    $groupUsers = @()
    $groupUsers = Get-ADGroupMember -Identity $group.Name | Select-Object SamAccountName
    $groupUsers | % {
        if(!$users.ContainsKey($_.SamAccountName)){
            $users[$_.SamAccountName] = @()
        }
        ($users[$_.SamAccountName]) += ($group.Name)
    }
}

kiltannen's user avatar

kiltannen

1,0072 gold badges12 silver badges27 bronze badges

answered Apr 25, 2018 at 10:34

Nadzzz's user avatar

NadzzzNadzzz

5303 silver badges12 bronze badges

For LOCAL users and groups (ie not in Active Directory), and if you don’t want to, or aren’t allowed to, or can’t install RSAT and/or Install-WindowsFeature RSAT-AD-PowerShell and/or import-module activedirectory then here’s a pure, pre-installed powershell (5.1+) way to do it.

(Note: Get-LocalGroup* used below are only available Powershell v5.1 and above. «…v5.1 was released along with the Windows 10 Anniversary Update on August 2, 2016, and in Windows Server 2016. …[F]or Windows 7, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, and Windows Server 2012 R2 [it] was released on January 19, 2017.» (wikipedia))

$username = "user002"
Get-LocalGroup | ForEach-Object {
    # the usernames are returned in the string form "computernameusername"
    if (Get-LocalGroupMember -Group $_ | Where-Object name -like "*$username") {
        $_.name
    } 
}

Example output:

Administrators
Users

answered Mar 9, 2021 at 23:59

john v kumpf's user avatar

3

Import-Module ActiveDirectory
Get-ADUser -SearchBase "OU=Users,DC=domain,DC=local" -Filter * | foreach-object {
write-host "User:" $_.Name -foreground green
    Get-ADPrincipalGroupMembership $_.SamAccountName | foreach-object {
        write-host "Member Of:" $_.name
    }
}

Change the value of -SearchBase to reflect the OU you need to list the users from :)

This will list all of the users in that OU and show you which groups they are a member of.

answered Jul 18, 2013 at 16:53

Stephen Galvin's user avatar

Get-ADPrincipalGroupMembership USERLOGON | select name

answered Apr 30, 2014 at 12:05

Jacob Fischlein's user avatar

This is the simplest way to just get the names:

Get-ADPrincipalGroupMembership "YourUserName"

# Returns
distinguishedName : CN=users,OU=test,DC=SomeWhere
GroupCategory : Security
GroupScope : Global
name : testGroup
objectClass : group
objectGUID : 2130ed49-24c4-4a17-88e6-dd4477d15a4c
SamAccountName : testGroup
SID : S-1-5-21-2114067515-1964795913-1973001494-71628

Add a select statement to trim the response or to get every user in an OU every group they are a user of:

foreach ($user in (get-aduser -SearchScope Subtree -SearchBase $oupath -filter * -Properties samaccountName, MemberOf | select samaccountName)){
Get-ADPrincipalGroupMembership $user.samaccountName | select name}

answered Jul 15, 2014 at 16:22

Stuart's user avatar

Almost all above solutions used the ActiveDirecotry module which might not be available by default in most cases.

I used below method. A bit indirect, but served my purpose.

List all available groups

Get-WmiObject -Class Win32_Group

And then list the groups the user belongs to

[System.Security.Principal.WindowsIdentity]::GetCurrent().Groups

Comparison can then be done via checking through the SIDs. This works for the logged in user. Please correct me if I am wrong. Completely new to PowerShell, but had to get this done for a work commitment.

answered Mar 9, 2017 at 17:07

Ruifeng Ma's user avatar

Ruifeng MaRuifeng Ma

2,2471 gold badge20 silver badges39 bronze badges

1

With user input and fancy output formatting:

[CmdletBinding(SupportsShouldProcess=$True)] 
Param( 
    [Parameter(Mandatory = $True)] 
    [String]$UserName 
) 
Import-Module ActiveDirectory 
If ($UserName) { 
    $UserName = $UserName.ToUpper().Trim() 
    $Res = (Get-ADPrincipalGroupMembership $UserName | Measure-Object).Count 
    If ($Res -GT 0) { 
        Write-Output "`n" 
        Write-Output "$UserName AD Group Membership:" 
        Write-Output "===========================================================" 
        Get-ADPrincipalGroupMembership $UserName | Select-Object -Property Name, GroupScope, GroupCategory | Sort-Object -Property Name | FT -A 
    } 
}

answered Jun 16, 2017 at 16:04

coinbird's user avatar

coinbirdcoinbird

1,1624 gold badges22 silver badges44 bronze badges

Putting this here for future reference. I’m in the midst of an email migration. I need to know each user account and its respective group membership, and also I need to know each group and its respective members.

I’m using the code block below to output a CSV for each user’s group membership.

Get-ADUser -Filter * |`
  ForEach-Object { `
    $FileName = $_.SamAccountName + ".csv" ; `
    $FileName ; `
    Get-ADPrincipalGroupMembership $_ | `
      Select-Object -Property SamAccountName, name, GroupScope, GroupCategory | `
        Sort-Object -Property SamAccountName | `
          Export-Csv -Path $FileName -Encoding ASCII ; `
  }

The export process for the groups and their respective members was a little convoluted, but the below works. The output filenames include the type of group. Therefore, the email distribution groups I need are/should be the Universal and Global Distribution groups. I should be able to just delete or move the resulting TXT files I don’t need.

Get-ADGroup -Filter * | `
 Select-Object -Property Name, DistinguishedName, GroupScope, GroupCategory | `
  Sort-Object -Property GroupScope, GroupCategory, Name | `
   Export-Csv -Path ADGroupsNew.csv -Encoding ASCII

$MyCSV = Import-Csv -Path .ADGroupsNew.csv -Encoding ASCII

$MyCSV | `
 ForEach-Object { `
  $FN = $_.GroupScope + ", " + $_.GroupCategory + ", " + $_.Name + ".txt" ; `
  $FN ; `
  Get-ADGroupMember -Identity $_.DistinguishedName | `
   Out-File -FilePath $FN -Encoding ASCII ; $FN=""; `
  }

answered May 19, 2018 at 4:37

user208145's user avatar

user208145user208145

3492 silver badges13 bronze badges

Asked
11 years, 11 months ago

Viewed
1.4m times

PowerShell’s Get-ADGroupMember cmdlet returns members of a specific group. Is there a cmdlet or property to get all the groups that a particular user is a member of?


I fixed my mistake: Get-Member should be Get-ADGroupMember.

Peter Mortensen's user avatar

asked Feb 22, 2011 at 0:57

Primoz's user avatar

2

Get-ADPrincipalGroupMembership will do this.

Get-ADPrincipalGroupMembership username | select name

name
----
Domain Users
Domain Computers
Workstation Admins
Company Users
Company Developers
AutomatedProcessingTeam

answered Mar 22, 2013 at 12:14

kstrauss's user avatar

kstrausskstrauss

3,5821 gold badge12 silver badges2 bronze badges

15

Single line, no modules necessary, uses current logged user:

(New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$($env:username)))")).FindOne().GetDirectoryEntry().memberOf

Kudos to this vbs/powershell article: http://technet.microsoft.com/en-us/library/ff730963.aspx

Jamie Ide's user avatar

Jamie Ide

47.8k16 gold badges80 silver badges116 bronze badges

answered May 13, 2014 at 9:38

Canoas's user avatar

CanoasCanoas

1,8911 gold badge13 silver badges12 bronze badges

4

Old school way from CMD:

net user mst999 /domain 

Linus Kleen's user avatar

Linus Kleen

33.5k11 gold badges90 silver badges99 bronze badges

answered Jan 30, 2015 at 13:40

user4511672's user avatar

user4511672user4511672

4414 silver badges2 bronze badges

2

(GET-ADUSER –Identity USERNAME –Properties MemberOf | Select-Object MemberOf).MemberOf

mattytommo's user avatar

mattytommo

55.3k15 gold badges126 silver badges147 bronze badges

answered Mar 26, 2012 at 20:24

schmeckendeugler's user avatar

4

This should provide you the details for current user. Powershell not needed.

whoami /groups

answered May 19, 2020 at 16:34

Nayan's user avatar

NayanNayan

3,02424 silver badges34 bronze badges

1

If you cannot get Get-ADPrincipalGroupMembership to work for you could try logging in as that user then use.

$id = [Security.Principal.WindowsIdentity]::GetCurrent()
$groups = $id.Groups | foreach-object {$_.Translate([Security.Principal.NTAccount])}
$groups | select *

answered Oct 4, 2018 at 11:09

andrew pate's user avatar

andrew pateandrew pate

3,67734 silver badges26 bronze badges

2

While there are many excellent answers here, there is one which I was personally looking for that was missing. Once I figured it out — I thought I should post it in case I want to find it later, or it actually manages to help someone else at some point:

Get-ADPrincipalGroupMembership username | Format-Table -auto

A second approach for presenting this is to specify the individual columns you are interested in eg:

Get-ADPrincipalGroupMembership username | select name, GroupScope, GroupCategory

This gives all the AD groups the username belongs to — but also presents all of the default properties of each group formatted nicely as a table.

The key benefit this gives you is you can see at a glance which are distribution lists, & which are Security groups. You can further see at a glance which are Universal, which are DomainLocal & which are Global.
Why would you care about this last bit?

  • Universal group is a security or distribution group that contains
    users, groups, and computers from any domain in its forest as
    members. You can give universal security groups rights and
    permissions on resources in any domain in the forest.
  • Global group is a group that can be used in its own domain, in member
    servers and in workstations of the domain, and in trusting domains.
    In all those locations, you can give a global group rights and
    permissions and the global group can become a member of local groups.
    However, a global group can contain user accounts that are only from
    its own domain.
  • Domain local group is a security or distribution group that can
    contain universal groups, global groups, other domain local groups
    from its own domain, and accounts from any domain in the forest. You
    can give domain local security groups rights and permissions on
    resources that reside only in the same domain where the domain local
    group is located.

answered Dec 12, 2018 at 22:20

kiltannen's user avatar

kiltannenkiltannen

1,0072 gold badges12 silver badges27 bronze badges

1

Get-Member is not for getting user’s group membership. If you want to get a list of groups a user belongs to on the local system, you can do so by:

$query = "ASSOCIATORS OF {Win32_Account.Name='DemoUser1',Domain='DomainName'} WHERE ResultRole=GroupComponent ResultClass=Win32_Account"

Get-WMIObject -Query $query | Select Name

In the above query, replace DemoUser1 with the username you want and the DomainName with either your local computer name or domain name.

answered Feb 22, 2011 at 5:40

ravikanth's user avatar

ravikanthravikanth

24.6k4 gold badges59 silver badges60 bronze badges

2

Get group membership for a user:

$strUserName = "Primoz"
$strUser = get-qaduser -SamAccountName $strUserName
$strUser.memberof

See Get Group Membership for a User

But also see Quest’s Free PowerShell Commands for Active Directory.

[Edit: Get-ADPrincipalGroupMembership command is included in Powershell since v2 with Windows 2008 R2. See kstrauss’ answer below.]

Abraham's user avatar

Abraham

4797 silver badges23 bronze badges

answered Feb 22, 2011 at 1:16

tiago2014's user avatar

tiago2014tiago2014

3,3821 gold badge20 silver badges28 bronze badges

3

Get-Member is a cmdlet for listing the members of a .NET object. This has nothing to do with user/group membership. You can get the current user’s group membership like so:

PS> [System.Security.Principal.WindowsIdentity]::GetCurrent().Groups | 
         Format-Table -auto

BinaryLength AccountDomainSid    Value
------------ ----------------    -----
          28 S-1-5-21-...        S-1-5-21-2229937839-1383249143-3977914998-513
          12                     S-1-1-0
          28 S-1-5-21-...        S-1-5-21-2229937839-1383249143-3977914998-1010
          28 S-1-5-21-...        S-1-5-21-2229937839-1383249143-3977914998-1003
          16                     S-1-5-32-545
...

If you need access to arbitrary users’ group info then @tiagoinu suggestion of using the Quest AD cmdlets is a better way to go.

answered Feb 22, 2011 at 2:03

Keith Hill's user avatar

Keith HillKeith Hill

190k40 gold badges344 silver badges365 bronze badges

I wrote a PowerShell function called Get-ADPrincipalGroupMembershipRecursive. It accepts the DSN of a user, computer, group, or service account. It retrieves an initial list of groups from the account’s memberOf attribute, then recursively checks those group’s memberships. Abbreviated code is below. Full source code with comments can be found here.

function Get-ADPrincipalGroupMembershipRecursive( ) {

    Param(
        [string] $dsn,
        [array]$groups = @()
    )

    $obj = Get-ADObject $dsn -Properties memberOf

    foreach( $groupDsn in $obj.memberOf ) {

        $tmpGrp = Get-ADObject $groupDsn -Properties memberOf

        if( ($groups | where { $_.DistinguishedName -eq $groupDsn }).Count -eq 0 ) {
            $groups +=  $tmpGrp           
            $groups = Get-ADPrincipalGroupMembershipRecursive $groupDsn $groups
        }
    }

    return $groups
}

# Simple Example of how to use the function
$username = Read-Host -Prompt "Enter a username"
$groups   = Get-ADPrincipalGroupMembershipRecursive (Get-ADUser $username).DistinguishedName
$groups | Sort-Object -Property name | Format-Table

answered Dec 5, 2013 at 21:04

Brian Reich's user avatar

Brian ReichBrian Reich

1431 gold badge2 silver badges4 bronze badges

1

No need for long scripts when it is a simple one liner..

QUEST Command

(Get-QADUser -Identity john -IncludedProperties MemberOf | Select-Object MemberOf).MemberOf

MS AD Command

(GET-ADUSER –Identity john –Properties MemberOf | Select-Object MemberOf).MemberOf

I find the MS AD cmd is faster but some people like the Quest ones better..

Steve

answered Nov 6, 2014 at 11:03

Steve Adkin's user avatar

Use:

Get-ADPrincipalGroupMembership username | select name | export-CSV username.csv

This pipes output of the command into a CSV file.

Peter Mortensen's user avatar

answered Jun 5, 2015 at 10:36

Dee's user avatar

First, import the ActiveDirectory module:

Import-Module ActiveDirectory

Then issue this command:

Get-ADGroupMember -Identity $group | foreach-object {
    Write-Host $_.SamAccountName
}

This will display the members of the specified group.

answered Dec 14, 2012 at 18:25

Jonathan Rioux's user avatar

Jonathan RiouxJonathan Rioux

1,0292 gold badges14 silver badges29 bronze badges

1

It is just one line:

(get-aduser joe.bloggs -properties *).memberof

end of :)

Peter Mortensen's user avatar

answered May 23, 2015 at 7:08

user4931356's user avatar

1

The below works well:

get-aduser $username -Properties memberof | select -expand memberof

If you have a list of users:

$list = 'administrator','testuser1','testuser2'
$list | `
    %{  
        $user = $_; 
        get-aduser $user -Properties memberof | `
        select -expand memberof | `
        %{new-object PSObject -property @{User=$user;Group=$_;}} `
    }

answered Feb 16, 2015 at 17:25

JohnLBevan's user avatar

JohnLBevanJohnLBevan

21.9k11 gold badges93 silver badges173 bronze badges

Get-QADUser -SamAccountName LoginID | % {$_.MemberOf } | Get-QADGroup | select name

answered Mar 20, 2014 at 21:22

Sathish's user avatar

   Get-ADUser -Filter { memberOf -RecursiveMatch "CN=Administrators,CN=Builtin,DC=Fabrikam,DC=com" } -SearchBase "CN=Administrator,CN=Users,DC=Fabrikam,DC=com"  -SearchScope Base
                  ## NOTE: The above command will return the user object (Administrator in this case) if it finds a match recursively in memberOf attribute. 

answered Jul 7, 2014 at 12:22

Sunil Aher's user avatar

Sunil AherSunil Aher

7473 gold badges14 silver badges34 bronze badges

I couldn’t get the following to work for a particular user:

Get-ADPrincipalGroupMembership username

It threw an error that I was not willing to troubleshoot.

I did however come up with a different solution using Get-ADUser. I like it a bit better because if you don’t know the account name then you can get it based off of a wildcard on the user’s actual name. Just fill in PartOfUsersName and away it goes.

#Get the groups that list of users are the member of using a wildcard search

[string]$UserNameLike = "*PartOfUsersName*" #Use * for wildcards here
[array]$AccountNames = $(Get-ADUser -Filter {Name -like $UserNameLike}).SamAccountName

ForEach ($AccountName In $AccountNames) {
Write-Host "`nGETTING GROUPS FOR" $AccountName.ToUpper() ":"
(Get-ADUser -Identity $AccountName -Properties MemberOf|select MemberOf).MemberOf|
    Get-ADGroup|select Name|sort name
    }

Huge props to schmeckendeugler and 8DH for getting me to this solution. +1 to both of you.

answered Apr 24, 2015 at 0:03

Adam's user avatar

AdamAdam

5411 gold badge6 silver badges8 bronze badges

To get it recursive, you can use:

<# 
    .SYNOPSIS   
        Get all the groups that a user is MemberOf.

    .DESCRIPTION
        This script retrieves all the groups that a user is MemberOf in a recursive way.

    .PARAMETER SamAccountName
        The name of the user you want to check #>

Param (
    [String]$SamAccountName = 'test',
    $DomainUsersGroup = 'CN=Domain Users,CN=Users,DC=domain,DC=net'
)


Function Get-ADMemberOf {
    Param (
        [Parameter(ValueFromPipeline)]
        [PSObject[]]$Group,
        [String]$DomainUsersGroup = 'CN=Domain Users,CN=Users,DC=grouphc,DC=net'
    )
    Process {
        foreach ($G in $Group) {
            $G | Get-ADGroup | Select -ExpandProperty Name
            Get-ADGroup $G -Properties MemberOf| Select-Object Memberof | ForEach-Object {
                Get-ADMemberOf $_.Memberof
            }
        }
    }
}


$Groups = Get-ADUser $SamAccountName -Properties MemberOf | Select-Object -ExpandProperty MemberOf
$Groups += $DomainUsersGroup
$Groups | Get-ADMemberOf | Select -Unique | Sort-Object

answered Feb 15, 2017 at 14:59

DarkLite1's user avatar

DarkLite1DarkLite1

13.1k40 gold badges113 silver badges202 bronze badges

Studying all comments presented gave me a starting point (thanks for such) but left me with several unresolved issues. As result here is my answer. The code snippet provided does a little more than what is asked for but it provides helpful debugging info.

[array] $script:groupsdns = @()
function Get-ADPrincipalGroupMembershipRecursive() 
{
  Param( [string] $dn, [int] $level = 0, [array] $groups = @() )

  #if(($groupsdns | where { $_.DistinguishedName -eq $dn }).Count -ne 0 ) { return $groups } # dependency on next statement
  #$groupsdns += (Get-ADObject $dn -Properties MemberOf) # Get-ADObject cannot find an object with identity
  if ($script:groupsdns.Contains($dn)) { return $groups }
  $script:groupsdns += $dn
  $mo = $Null
  $mo = Get-ADObject $dn -Properties MemberOf # Get-ADObject cannot find an object with identity
  $group = ($dn + " (" + $level.ToString())
  if ($mo -eq $Null) { $group += "!" }
  $group += ")"
  $groups += $group
  foreach( $groupdn in $mo.MemberOf )
  {
    $groups = Get-ADPrincipalGroupMembershipRecursive -dn $groupdn -level ($level+1) -groups $groups
  }
  if ($level -le 0) 
  { 
    $primarygroupdn = (Get-ADUser -Identity $dn -Properties PrimaryGroup).PrimaryGroup 
    $groups = Get-ADPrincipalGroupMembershipRecursive -dn $primarygroupdn -level ($level+1) -groups $groups
  }
  return $groups
}
$adusergroups = Get-ADPrincipalGroupMembershipRecursive -dn $aduser.DistinguishedName
$adusergroups | ft -AutoSize | `
              Out-File -Width 512 Get-ADPrincipalGroupMembershipRecursive.txt #-Append #-Wrap # | Sort-Object -Property Name

answered Nov 28, 2018 at 20:16

ES44AC SD70MAC's user avatar

1

When you do not have privileges to consult other member groups but you do have the privilege to consult group members, you can do the following to build a map of which user has access to which groups.

$groups = get-adgroup -Filter * | sort name | select Name
$users = @{}
foreach($group in $groups) {
    $groupUsers = @()
    $groupUsers = Get-ADGroupMember -Identity $group.Name | Select-Object SamAccountName
    $groupUsers | % {
        if(!$users.ContainsKey($_.SamAccountName)){
            $users[$_.SamAccountName] = @()
        }
        ($users[$_.SamAccountName]) += ($group.Name)
    }
}

kiltannen's user avatar

kiltannen

1,0072 gold badges12 silver badges27 bronze badges

answered Apr 25, 2018 at 10:34

Nadzzz's user avatar

NadzzzNadzzz

5303 silver badges12 bronze badges

For LOCAL users and groups (ie not in Active Directory), and if you don’t want to, or aren’t allowed to, or can’t install RSAT and/or Install-WindowsFeature RSAT-AD-PowerShell and/or import-module activedirectory then here’s a pure, pre-installed powershell (5.1+) way to do it.

(Note: Get-LocalGroup* used below are only available Powershell v5.1 and above. «…v5.1 was released along with the Windows 10 Anniversary Update on August 2, 2016, and in Windows Server 2016. …[F]or Windows 7, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, and Windows Server 2012 R2 [it] was released on January 19, 2017.» (wikipedia))

$username = "user002"
Get-LocalGroup | ForEach-Object {
    # the usernames are returned in the string form "computernameusername"
    if (Get-LocalGroupMember -Group $_ | Where-Object name -like "*$username") {
        $_.name
    } 
}

Example output:

Administrators
Users

answered Mar 9, 2021 at 23:59

john v kumpf's user avatar

3

Import-Module ActiveDirectory
Get-ADUser -SearchBase "OU=Users,DC=domain,DC=local" -Filter * | foreach-object {
write-host "User:" $_.Name -foreground green
    Get-ADPrincipalGroupMembership $_.SamAccountName | foreach-object {
        write-host "Member Of:" $_.name
    }
}

Change the value of -SearchBase to reflect the OU you need to list the users from :)

This will list all of the users in that OU and show you which groups they are a member of.

answered Jul 18, 2013 at 16:53

Stephen Galvin's user avatar

Get-ADPrincipalGroupMembership USERLOGON | select name

answered Apr 30, 2014 at 12:05

Jacob Fischlein's user avatar

This is the simplest way to just get the names:

Get-ADPrincipalGroupMembership "YourUserName"

# Returns
distinguishedName : CN=users,OU=test,DC=SomeWhere
GroupCategory : Security
GroupScope : Global
name : testGroup
objectClass : group
objectGUID : 2130ed49-24c4-4a17-88e6-dd4477d15a4c
SamAccountName : testGroup
SID : S-1-5-21-2114067515-1964795913-1973001494-71628

Add a select statement to trim the response or to get every user in an OU every group they are a user of:

foreach ($user in (get-aduser -SearchScope Subtree -SearchBase $oupath -filter * -Properties samaccountName, MemberOf | select samaccountName)){
Get-ADPrincipalGroupMembership $user.samaccountName | select name}

answered Jul 15, 2014 at 16:22

Stuart's user avatar

Almost all above solutions used the ActiveDirecotry module which might not be available by default in most cases.

I used below method. A bit indirect, but served my purpose.

List all available groups

Get-WmiObject -Class Win32_Group

And then list the groups the user belongs to

[System.Security.Principal.WindowsIdentity]::GetCurrent().Groups

Comparison can then be done via checking through the SIDs. This works for the logged in user. Please correct me if I am wrong. Completely new to PowerShell, but had to get this done for a work commitment.

answered Mar 9, 2017 at 17:07

Ruifeng Ma's user avatar

Ruifeng MaRuifeng Ma

2,2471 gold badge20 silver badges39 bronze badges

1

With user input and fancy output formatting:

[CmdletBinding(SupportsShouldProcess=$True)] 
Param( 
    [Parameter(Mandatory = $True)] 
    [String]$UserName 
) 
Import-Module ActiveDirectory 
If ($UserName) { 
    $UserName = $UserName.ToUpper().Trim() 
    $Res = (Get-ADPrincipalGroupMembership $UserName | Measure-Object).Count 
    If ($Res -GT 0) { 
        Write-Output "`n" 
        Write-Output "$UserName AD Group Membership:" 
        Write-Output "===========================================================" 
        Get-ADPrincipalGroupMembership $UserName | Select-Object -Property Name, GroupScope, GroupCategory | Sort-Object -Property Name | FT -A 
    } 
}

answered Jun 16, 2017 at 16:04

coinbird's user avatar

coinbirdcoinbird

1,1624 gold badges22 silver badges44 bronze badges

Putting this here for future reference. I’m in the midst of an email migration. I need to know each user account and its respective group membership, and also I need to know each group and its respective members.

I’m using the code block below to output a CSV for each user’s group membership.

Get-ADUser -Filter * |`
  ForEach-Object { `
    $FileName = $_.SamAccountName + ".csv" ; `
    $FileName ; `
    Get-ADPrincipalGroupMembership $_ | `
      Select-Object -Property SamAccountName, name, GroupScope, GroupCategory | `
        Sort-Object -Property SamAccountName | `
          Export-Csv -Path $FileName -Encoding ASCII ; `
  }

The export process for the groups and their respective members was a little convoluted, but the below works. The output filenames include the type of group. Therefore, the email distribution groups I need are/should be the Universal and Global Distribution groups. I should be able to just delete or move the resulting TXT files I don’t need.

Get-ADGroup -Filter * | `
 Select-Object -Property Name, DistinguishedName, GroupScope, GroupCategory | `
  Sort-Object -Property GroupScope, GroupCategory, Name | `
   Export-Csv -Path ADGroupsNew.csv -Encoding ASCII

$MyCSV = Import-Csv -Path .ADGroupsNew.csv -Encoding ASCII

$MyCSV | `
 ForEach-Object { `
  $FN = $_.GroupScope + ", " + $_.GroupCategory + ", " + $_.Name + ".txt" ; `
  $FN ; `
  Get-ADGroupMember -Identity $_.DistinguishedName | `
   Out-File -FilePath $FN -Encoding ASCII ; $FN=""; `
  }

answered May 19, 2018 at 4:37

user208145's user avatar

user208145user208145

3492 silver badges13 bronze badges

Get-ADGroup — это команда, которая возвращает список групп в Powershell. Для того что бы вывести список пользователей в группе есть другая команда Get-ADGroupMember и мы ее тоже рассмотрим. В этих командлетах есть один обязательный ключ. Для примера так мы выведем весь список групп AD в Powershell:

Get-ADGroup -Filter *

Примеры с Get-ADGroup Filter 

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

Get-ADGroup -Filter {GroupCategory -eq "Security"}

GroupCategory — это свойство, а eq ищет точное соответствие.  Операторы сравнения powershell разбирались тут. 

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

Get-ADGroup -Filter * -Properties * | Get-Member -MemberType Properties

Get-ADGroup Property

Можно делать сравнивание по нескольким значениям. Если я хочу получить группы созданные 20 дней назад, а так же что бы их тип был Distribution (группа распространения), мне следует сделать так:

$date = (Get-Date).AddDays(-20)
Get-ADGroup -Filter {(GroupCategory -eq "Distribution") -and (WhenCreated -gt $date)} -Properties *

Get-ADGroup filter примеры

Другие примеры рассматриваются дальше…

Получаем список пользователей группы в Powershell Get-ADGroup

Мы можем найти данные по группе указав только имя. В моем случае я ищу группу, где имя заканчивается на marketing:

Get-ADGroup -Filter {Name -like "*marketing"} -Properties Members | SELECT *

Где:

  • Properties — расширяет список стандартных свойств. В нашем случае указываем, что нам нужно получить список пользователей группы в Powershell
  • Select — в таком варианте команда выводит список всех свойств, а не только стандартный список

 У нас есть и другой способ получить список пользователей группы — это через Get-ADGroupMember. Принцип такой же как и в предыдущих вариантах:

Get-ADGroup -Filter {Name -like "*marketing"} -Properties Members | Get-ADGroupMember

Разница этих двух вариантов в том, что в первом случае мы получаем укороченную информацию о пользователях, а во втором более подробный список.

Список пользователей групп Powershell

Для получение пользователей можно сделать и так, но в этом варианте есть минус, что мы должны писать точное соответствие имени:

Get-ADGroupMember -Identity Marketing

В описании на сайте Microsoft пишут, что в нем появляется ошибка только в случае, если командлет возвращает более одной группы (в случае использования масок), но у меня так и не получилось это сделать. Вместо имени мы можем использовать SID и GUID.

Получение в Powershell групп пользователя

Обратная ситуация, когда мы хотим узнать в каких группах наш пользователь. Для этого тоже есть несколько вариантов. Первый — это через команду получения пользователей со свойством MemberOf:

Get-ADUser -Filter {Name -eq "Test User (0001)"} -Properties MemberOF

Получение групп пользователя Powershell

Если мы хотим узнать какую либо подробную информацию о группе сделайте так:

$groups = Get-ADUser -Filter {Name -eq "Test User (0001)"} -Properties MemberOF
$groups.MemberOF | Get-ADGroup

Мы можем найти группы пользователя и так:

Get-ADGroup -Filter * -Properties Member | where -Property Member -Like "*Test User (0001)*"

Но минус этого способа в том, что он будет выполняться дольше. Возможно это будет не заметно с 1000 пользователями, а вот с 50000 может.

Группы пользователя AD Powershell

Теги:

#powershell

#ad

Понравилась статья? Поделить с друзьями:
  • Как узнать в какие программы заходили на компьютере windows 10
  • Как узнать в какие группы входит пользователь домена windows
  • Как узнать в домене компьютер или нет windows 10
  • Как узнать быстродействие системы windows 10
  • Как узнать быстродействие компьютера windows 10