Добавить пользователей в группу ad powershell из файла
Всё о PowerShell в Windows и на Linux. Системное администрирование Windows
В этой статье мы рассмотрим функции PowerShell для управления группами домена Active Directory. Мы увидим, как создать новую группу в AD, добавить в неё пользователей и удалить их, отобразить список пользователей группы и некоторые другие полезные действия с группами домена, которые чрезвычайно полезны для повседневного администрирования. Для управления группами AD в модуле Active Directory для Windows PowerShell доступны следующие базовые командлеты:
- New-ADGroup – для создания новой группы AD
- Add-AdGroupMember – добавление пользователя в группу AD
- Remove-ADGroupMember – удаление пользователей из группы AD
- Get-ADGroup – получение информации о группе AD
- Get-ADGroupMember – отображение списка пользователей в группе AD
Чтобы использовать эти командлеты, у вас должен быть специальный модуль для взаимодействия с AD — модуль Active Directory для Windows PowerShell. Этот модуль был представлен в Windows Server 2008 R2. В Windows Server 2012/2012R2/2016/2019/2022 он включён по умолчанию на контроллерах домена. Вы можете установить и включить его на клиентских компьютерах (Windows 11, 10, 8.1 и 7) как один из компонентов RSAT: «Как установить и использовать модуль Active Directory PowerShell». На рабочих станциях данный модуль вы можете установить следующей командой:
Убедиться в доступности модуля можно следующим образом:
Как видите, модуль ActiveDirectory загружен.
Вы можете получить полный список команд модуля, выполнив следующее:
В модуле доступно 147 командлетов, 11 из которых относятся к управлению группами AD.
Обратите внимание: в последующих командах имя группы, если оно состоит из одного слова, необязательно заключать в одинарные или двойные кавычки. Тем не менее, если имя группы состоит из более чем одного слова, то его обязательно заключать в кавычки.
New-ADGroup — Создание новой группы AD
Создадим новую группу в указанном подразделении Active Directory (OU) с помощью команды New-ADGroup:
С помощью опции -Description вы можете установить описание группы, а с помощью опции -DisplayName можно изменить отображаемое имя.
Параметром -GroupScope можно задать один из следующих типов групп:
Вы можете создать группу рассылки (дистрибуции) следующим образом:
Add-AdGroupMember — Добавление пользователей в группу AD
Вы можете добавлять пользователей в группу Active Directory с помощью командлета Add-AdGroupMember. Добавьте двух новых пользователей в новую группу:
Если список пользователей, добавляемых в группу, довольно велик, вы можете сохранить список учётных записей пользователей в файл CSV, затем импортировать этот файл и добавить каждого пользователя в группу.
Формат файла CSV должен быть следующим: пользователи должны быть перечислены по одному в строке с пользователями в качестве заголовка столбца.
Чтобы получить всех членов группы (groupX) и добавить их в другую группу (groupY), используйте эту команду:
Если вам нужно скопировать членов всех подгрупп (рекурсивно) в новую группу, выполните эту команду:
Remove-ADGroupMember — Удаление пользователей из группы AD
Чтобы удалить пользователей из группы AD, используйте командлет Remove-ADGroupMember. Удалим двух пользователей из группы:
Подтвердите удаление пользователей:
Если вам нужно удалить пользователей из группы в соответствии со списком пользователей из файла CSV, используйте эту команду:
Get-ADGroup — получение информации о группе AD
Получить информацию о группе поможет командлет Get-ADGroup:
Эта команда отображает информацию об основных атрибутах группы (DN, тип группы, имя, SID). Чтобы отобразить значения всех атрибутов группы домена AD, выполните следующую команду:
Как видите, теперь отображаются такие атрибуты, как время создания и модификации группы, описание и так далее.
Командлет Get-ADGroup позволяет находить группы по определённому шаблону. Например, вам нужно найти все группы AD, в названии которых содержится фраза admins:
Get-ADGroupMember — отображение списка пользователей в группе AD
Чтобы отобразить список пользователей в группе:
Чтобы оставить в результатах только имена пользователей, запустите:
Если в эту группу включены другие группы домена, используйте опцию -Recursive для отображения полного списка членов, включая все вложенные группы.
Чтобы экспортировать список учётных записей, входящих в определённую группу, в файл CSV (для дальнейшего использования в Excel), выполните следующую команду:
Чтобы добавить данные учётной записи пользователя AD в текстовый файл, используйте командлет Get-ADUser. Например, помимо учётной записи пользователя вам необходимо отобразить должность и номер телефона пользователя:
Подсчитать количество пользователей в группе можно так:
Чтобы получить список пустых групп в конкретном OU, используйте эту команду:
В этой статье мы рассмотрим возможности PowerShell по управлению группами домена Active Directory. Мы рассмотрим, как создать новую группу в AD, добавить в нее пользователей (или удалить), вывести список пользователей группы и несколько других полезных действия с доменными группами, которые чрезвычайно полезны при повседневном администрировании. Для управления группами AD в модуле PowerShell для Active Directory имеются следующие основные командлеты:
Как вы видите, модуль ActiveDirectory загружен. Если нет – импортируйте его командой:
Полный список команд модуля можно получить так:
Get-Command -Module ActiveDirectory
В модуле всего доступно 147 командлетов, из которых с группами могут работать 11.
Get-Command -Module ActiveDirectory -Name "*Group*"
New-ADGroup – создаем новую группу AD
Создадим новую группу в указанном контейнере (OU) Active Directory с помощью команды New-ADGroup:
New-ADGroup "TestADGroup" -path 'OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru' -GroupScope Global -PassThru –Verbose
С помощью атрибута Description можно задать описание группы, а с помощью DisplayName изменить отображаемое имя.
Параметром GroupScope можно задать один из следующих типов групп:
- 0 = DomainLocal
- 1 = Global
- 2 = Universal
Создать группу распространения можно так:
New-ADGroup "TestADGroup-Distr" -path 'OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru' -GroupCategory Distribution -GroupScope Global -PassThru –Verbose
Add-AdGroupMember – добавить пользователей в группу AD
Добавить пользователей в группу Active Directory можно с помощью командлета Add-AdGroupMember. Добавим в новую группу двух пользователей:
Add-AdGroupMember -Identity TestADGroup -Members user1, user2
Если список пользователей, которых нужно добавить в группу довольно большой, можно сохранить список учетных записей в CSV файл, затем импортировать данный файл и добавить каждого пользователя в группу.
Формат CSV файла такой (список пользователей по одному в строке, имя столбца – users)
Import-CSV .\users.csv -Header users | ForEach-Object
Чтобы получить всех членов одной группы (groupA) и добавить их в другую группу (groupB), воспользуйтесь такой командой:
Get-ADGroupMember “GroupA” | Get-ADUser | ForEach-Object
В том случае, если нужно скопировать в новую группу и членов всех вложенных групп (рекурсивно), нужно воспользоваться такой командой:
Get-ADGroupMember -Identity “GroupA” -Recursive | Get-ADUser | ForEach-Object
Remove-ADGroupMember – удалить пользователей из группы
Для удаления пользователей из группы AD нужно использовать командует Remove-ADGroupMember. Удалим из группы двух пользователей:
Remove-ADGroupMember -Identity TestADGroup -Members user1, user2
Подтвердите удаление пользователей из группы:
Если нужно удалить из группы пользователей по списку из CSV файла, воспользуйтесь такой командой:
Import-CSV .\users.csv -Header users | ForEach-Object
Get-ADGroup – получить информацию о группе AD
Получить информацию о группе поможет командлет Get-ADGroup:
Даная команда выводит информацию об основных атрибутах группы (DN, тип группы, имя, SID). Чтобы вывести значение всех атрибутов группы домена AD, выполните такую команду:
Get-ADGroup 'TestADGroup' -properties *
Как вы видите, теперь стали отображаться такие атрибуты, как время создания и модификации группы, описание и т.д.
С помощью командлета Get-ADGroup можно найти все интересующие вас группы по определенному шаблону. Например, нужно найти все группы AD, в имени которых содержится фраза admins :
Get-ADGroup -LDAPFilter “(name=*admins*)” | Format-Table
Get-ADGroupMember – вывести список пользователей группы AD
Вывести на экран список пользователей группы:
Чтобы оставить в результатах только имена пользователей, выполните:
Get-ADGroupMember 'TestADGroup'| ft name
Если в данную группу включены другие группы домена, чтобы вывести полный список членов, в том числе всех вложенных групп, воспользуйтесь параметром Recursive.
Get-ADGroupMember ‘server-admins' -recursive| ft name
Чтобы выгрузить список учетных записей, состоящих в определённой группе в CSV файл (для дальнейшего использования в Excel), выполните такую команду:
Get-ADGroupMember ‘server-admins' -recursive| ft samaccountname| Out-File c:\ps\admins.csv
Чтобы добавить в текстовый файл данные учетных записей пользователей в AD, воспользуемся командлетом Get-ADUser. Например, помимо учетной записи нужно вывести должность и телефон пользователя группы:
Get-ADGroupMember -Identity ’server-admins’ -recursive| foreach
Посчитать количество пользователей в группе можно так:
(Get-ADGroupMember -Identity 'domain admins').Count
Оказалось, что в группе «domain admins» у нас состоит 7 учетных записей администраторов.
Чтобы найти список пустых групп в определенном OU, воспользуйтесь такой командой:
Get-ADGroup -Filter * -Properties Members -searchbase “OU=Moscow,DC=corp,dc=winitpro,DC=ru” | where | select Name
Для добавления в группу в Powershell есть команда Add-ADGroupMember. С помощью нее мы можем добавить любой объект, который есть в AD. Для примера так мы добавим пользователя Administrator в группу IT_Group:
Кроме имени группы и имени пользователя мы так же можем использовать:
Мы так же можем добавлять не одного будущего участника, а сразу несколько. На примере пользователей это может выглядеть так:
Навигация по посту
Примеры добавления пользователей в группу c Powershell используя фильтры
Допустим в компании появился новый сотрудник и его нужно добавить в группы аналогичные другому сотруднику. В моем случае старый сотрудник это "Test User (0004)". Для этого мы должны получить свойство участников через командлет Get-ADGroup и найти в нем упоминание старого сотрудника:
Мы уже разбирали примеры с Get-ADGroup, но нужно отметить что такой вариант, в больших AD, может работать долго и могут быть ошибки т.к. мы ищем строки похожие на "Test User (0004)" и вариант "Test User (00041)" тоже подойдет. Что бы избежать этого попробуйте использовать SID например.
Примеры добавления компьютера в группу с Powershell используя фильтры
Компьютеры добавляются примерно таким же способом, но если мы добавим его так:
У нас могут появиться ошибки:
Add-ADGroupMember : Cannot find an object with identity
Add-ADGroupMember не удается найти объект с удостоверением
Я не могу сказать почему этот способ не работает с компьютерами, но есть несколько способов решения. Дело в том ключ Member принимает на имя типа Distinguished name. В моем случа компьютер лежит в контейнере Computers, на домене domain.local:
Второй вариант это использовать SID или GUID:
В конце концов мы можем отфильтровать результаты через одну команду и передать результат в другую. В своем примере я выбираю компьютеры которые включены и созданы за последние 15 дней:
Если вам интересно, то мы разбирали примеры с датой в Powershell
Удаление из группы в Powershell Remove-ADGroupMember
Удаление происходит примерно таким же способом и возможными ошибками разобранными выше:
Тут так же в ключе Members и Identity могут применяться:
В качестве примера приведу удаление пользователей, которые никогда не проходили аутентификацию в системе:
Т.к. мы не можем удалить пользователя из последней группы Domain Users у нас появится ошибка, что бы она не выводилась, а скрипт продолжал работать стоит ключ -ErrorAction SilentlyContinue.
Удаление пользователей спустя определенное время с Powershell Add-ADGroupMember -MemberTimeLive
В Windows Server 2016 появилась возможность автоматического удаления пользователей спустя время (временное членство) и без планировщика задач. Для работы ключа нам нужен 2016 уровень леса, который мы можем проверить так:
Кроме этого требуется активация PAM (Privileged Access Management). После однократного включения компонента его нельзя будет удалить. Проверить включен он у вас или нет можно так:
Если результата от команды нет, то он выключен. Для включения выполните:
Для установки временного интервала используется командлет New-TimeSpan:
Если мы выполним следующую команду, то сможем узнать о ходе времени членства в группе:
Значение TTL отображается в секундах.
Другие ошибки Add-ADGroupMember
Среди других ошибок может быть:
Add-ADGroupMember insufficient access rights to perform the operation
Add-ADGroupMember для выполнения операции права недостаточны
Нужно всегда помнить, что большинство операций в PS выполняются только от имени администратора и проблема может быть в этом. Среди других решений - это добавить себя в группу менеджеров:
Эту операцию можно сделать через PS, но возможно у вас появится та же ошибка:
Сегодня покажу вам, как можно очень быстро добавить кучу пользователей в группы Active Directory, при помощи простенького скрипта PowerShell.
Сразу покажу скрипт, чтобы не томить.
Как, наверное, процентов 80 админов добавляют пользователей? Правильно – при помощи оснастки пользователи и компьютеры.
ОК, если так нужно добавить одного-двух в пару групп, в принципе можно и так, но вот если пользователей больше – то это уже крайне неэффективно.
Тут может помочь команда из модуля activedirectory для powershell:
Вот, так уже на много быстрее и эффективнее, но всё равно… А если будет несколько десятков пользователей и столько же групп, куда нужно всех раскидать? То же замучаешься набирать эту команду. Кроме того, когда набираешь кучу однотипных команд крайне велика вероятность, где то ошибиться. И тут нам на помощь приходит скрипт.
Все версии PowerShell умеют парсить CSV файлы, по крайней мере начиная с версии 2, чем мы и воспользуемся, создадим файл users.csv с примерно таким содержанием:
соответственно первый столбец – имя пользователя, второй – группа куда этого пользователя нужно добавить.
Кидаем файл в папку со скриптом, выполняем скрипт с компьютера, который находится в домене, от имени пользователя, который имеет право добавлять пользователей в нужные группы. Готово.
Тем самым можно сэкономить кучу времени и главное избежать ошибок при добавлении.
Немного разберем скрипт.
В первой строчке – мы указываем, что, если будет ошибка, что бы скрипт продолжил выполняться, пропустив ошибку.
Далее отчищаем прошлые ошибки.
Импортируем модуль activedirectory, что бы PowerShell узнал о заветной команде.
Указываем путь до CSV файла и импортируем его.
Проходимся по каждой строке в файле: заносим в переменные имя пользователя и группу, куда его нужно добавить. Добавляем пользователя в группу.
Исключительно в целях эстетики
Смотрим на количество ошибок, и выводим это количество.
Смотрим на количество успешных выполнений и выводим это количество.
Да, скрипт не оптимизирован, и его можно очень хорошо улучшить, например выбирать группу, искать всех пользователей, кого нужно в эту группу добавить, и добавлять одной командой всех пользователей в нужную группу, но у меня не было времени этим заниматься, скрипт понадобился срочно, по этому был написан очень быстро, на коленке. Но тем не менее, он вполне рабочий.
И на последок, хочу сказать – учите PowerShell, даже если вы работаете в очень маленькой организации и у вас нет необходимости что-то автоматизировать.
Дело в том, что Microsoft уже начала активные и очень агрессивные действия по избавлению от GUI в серверных ОС. Например, Windows Server 2016 1709, которая сейчас доступна только корпоративным клиентам по VL каналам, уже лишена возможности установки ОС с Desktop Experience, и включить эту фичу после установки нельзя (речь конечно о чистой, новой установке). Только Core, только хардкор. Так что, так или иначе, рано или поздно придется отказаться от использования GUI в серверных виндах, и лучше заранее к этому подготовиться.
Читайте также: