Как в Powershell добавить в группу пользователей AD через Add-ADGroupMember


29 июля 2019


Как в Powershell добавить в группу пользователей через Add-ADGroupMember

Для добавления в группу в Powershell есть команда Add-ADGroupMember. С помощью нее мы можем добавить любой объект, который есть в AD. Для примера так мы добавим пользователя Administrator в группу IT_Group:

Add-ADGroupMember -Identity "IT_Group" -Members "Administrator"

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

  • GUID
  • SID
  • SAM имена

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

Add-ADGroupMember -Identity "S-1-5-21-2759028551-2797867812-2307351887-1238" -Members "Test User (0004)","3660c562-be1d-40f8-8062-9ba4f52635c7"

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

Примеры добавления пользователей в группу c Powershell используя фильтры

Допустим в компании появился новый сотрудник и его нужно добавить в группы аналогичные другому сотруднику. В моем случае старый сотрудник это "Test User (0004)". Для этого мы должны получить свойство участников через командлет Get-ADGroup и найти в нем упоминание старого сотрудника:

#Получаем все группы старого пользователя
$old_user_group = Get-ADGroup -Filter * -Properties "Member" | Where-Object -Property Member -Like "*Test User (0004)*"
#Добавляем нового пользователя
$old_user_group | Add-ADGroupMember -Members "Test User (0005)"

Мы уже разбирали примеры с Get-ADGroup, но нужно отметить что такой вариант, в больших AD, может работать долго и могут быть ошибки т.к. мы ищем строки похожие на "Test User (0004)" и вариант "Test User (00041)" тоже подойдет. Что бы избежать этого попробуйте использовать SID например.

 

Примеры добавления компьютера в группу с Powershell используя фильтры

Компьютеры добавляются примерно таким же способом, но если мы добавим его так: 

Add-ADGroupMember -Identity "IT_Group" -Members "TestComputer"

У нас могут появиться ошибки:
Add-ADGroupMember : Cannot find an object with identity
Add-ADGroupMember не удается найти объект с удостоверением

Я не могу сказать почему этот способ не работает с компьютерами, но есть несколько способов решения. Дело в том ключ Member принимает на имя типа Distinguished name. В моем случа компьютер лежит в контейнере Computers, на домене domain.local:

Powershell добавление компьютера в группу

Второй вариант это использовать SID или GUID:

Add-ADGroupMember -Identity "IT_Group" -Members "S-1-5-21-2759028551-2797867812-2307351887-1239"

В конце концов мы можем отфильтровать результаты через одну команду и передать результат в другую. В своем примере я выбираю компьютеры которые включены и созданы за последние 15 дней:

#Получаю дату 15 дней назад
$date = (Get-Date).AddDays(-15)
#провожу сравнение, что дата больше и компьютер активен
$computers = Get-ADComputer -Filter {(WhenCreated -gt $date) -and (Enabled -eq $True)}
#для каждого объекта переменной компьютер выполняю команду Add-ADGRoupMember
$computers | ForEach-Object  {Add-ADGroupMember -Identity "IT_Group" -Members $_.Sid}

Если вам интересно, то мы разбирали примеры с датой в Powershell

 

Удаление из группы в Powershell Remove-ADGroupMember

Удаление происходит примерно таким же способом и возможными ошибками разобранными выше:

Remove-ADGroupMember -Identity "IT_Group" -Members "CN=TestComputer,CN=Computers,DC=domain,DC=local"

Тут так же в ключе Members и Identity могут применяться:

  • distinguished name
  • GUID
  • SID
  • SAM

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

#Получаю всех пользователей, у которых нет значения LastLogon
$users = Get-ADUser -Filter * -Properties Lastlogon | where -Property LastLogon -eq $False
#Удаляю пользователей по SID
Get-ADGroup -Filter * | Remove-ADGroupMember -Members $users.SID -ErrorAction SilentlyContinue

Т.к. мы не можем удалить пользователя из последней группы Domain Users у нас появится ошибка, что бы она не выводилась, а скрипт продолжал работать стоит ключ -ErrorAction SilentlyContinue.

 

Удаление пользователей спустя определенное время с Powershell Add-ADGroupMember -MemberTimeLive

В Windows Server 2016 появилась возможность автоматического удаления пользователей спустя время (временное членство) и без планировщика задач. Для работы ключа нам нужен 2016 уровень леса, который мы можем проверить так:

(Get-ADForest).ForestMode

Кроме этого требуется активация PAM (Privileged Access Management). После однократного включения компонента его нельзя будет удалить. Проверить включен он у вас или нет можно так:

(Get-ADOptionalFeature -filter {name -like "Privileged*"}).EnabledScopes

Если результата от команды нет, то он выключен. Для включения выполните:

#Имя домена
$domain = "domain.local"
#Включение роли
Enable-ADOptionalFeature "Privileged Access Management Feature" -Scope ForestOrConfigurationSet -Target $domain

Для установки временного интервала используется командлет New-TimeSpan:

#Задаем интервал в одном и более ключей
$time = New-TimeSpan -Days 1 -Hours 1 -Minutes 2 -Seconds 3
#Добавляем пользователя в группу с переменной времени
Add-ADGroupMember -Identity "IT_Group" -Members Administrator -MemberTimeToLive $time

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

Get-ADGroup -Identity "IT_Group" -ShowMemberTimeToLive -Properties Member | SELECT *

Powershell Add-ADGroupMember TTL MemberTimeToLive

Значение TTL отображается в секундах.

 

Другие ошибки Add-ADGroupMember

Среди других ошибок может быть:

Add-ADGroupMember insufficient access rights to perform the operation
Add-ADGroupMember для выполнения операции права недостаточны

Нужно всегда помнить, что большинство операций в PS выполняются только от имени администратора и проблема может быть в этом. Среди других решений - это добавить себя в группу менеджеров:

AD Manager By

Эту операцию можно сделать через PS, но возможно у вас появится та же ошибка:

Set-ADGroup -Identity "IT_Group" -ManagedBy Administrator

 

...

Теги: #powershell #ad


Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, преобретенного опыта и лучшие практики в системном администрировании и программировании.