Управление группами AD с помощью Get-ADGroup и других функций

С помощью модуля ActiveDirectory PowerShell вы можете запрашивать группы AD с помощью команды Get-AdGroup, добавлять, обновлять и удалять группы и их участников. В этой статье блога вы узнаете немного о командлетах PowerShell для групп Active Directory и получите множество примеров для справки.

Командлеты групп Active Directory

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

Cmdlet Name Description
Add-ADGroupMember Used to add members to an AD group.
Add-ADPrincipalGroupMembership Used to add an AD principal to AD groups.
Get-ADGroup Used to return a group or groups from AD.
Get-ADGroupMember Used to return the members of an AD group.
Get-ADPrincipalGroupMembership Used to get the groups an AD principal is a member of.
New-ADGroup Used to create a new AD group.
Remove-ADGroup Used to delete an AD group.
Remove-ADGroupMember Used to remove members from an AD group.
Remove-ADPrincipalGroupMembership Used to remove an AD principal from AD groups.
Set-ADGroup Used to set the properties of an AD group.

С помощью этих командлетов и немного PowerShell-кунг-фу вы сможете управлять каждым аспектом группы Active Directory с помощью PowerShell.

Найти участников группы с помощью Get-ADGroupMember

Команда Get-AdGroupMember возвращает всех участников группы.

PS51> Get-ADGroupMember -Identity <identity string or object>

Вместо этого вы можете использовать свойство memberOf для конкретного пользователя с помощью командлета Get-Aduser. Для освежения памяти о том, как создавать фильтры, ознакомьтесь с руководством “Изучение фильтров Active Directory и LDAP в PowerShell”.

Ниже приведены два примера.

PS51> Get-ADUser -Filter 'memberOf -eq ""'
PS51> Get-ADUser -LDAPFilter '(memberOf=)'

Это возвращает коллекцию объектов ADPrincipal.

Экспорт участников группы в файл CSV

Это экспортирует имя, фамилию и адрес электронной почты каждого пользователя. Перенаправьте результаты из Get-ADGroupMember в Get-ADUser, потому что это объекты ADPrincipal, которые не имеют всех свойств, которыми обладают объекты ADUser.

PS51> $GroupMembers = Get-ADGroupMember -Identity 'Professional Services Department'
PS51> $GroupMembers | Get-ADUser -Properties GivenName,Surname,Mail | Select-Object GivenName,Surname,Mail | Export-CSV -Path GroupMembers.CSV -NoTypeInformation

Обратите внимание на использование параметра NoTypeInformation в Export-CSV, чтобы убедиться, что CSV-файл совместим с другими приложениями.

Найдите группы без участников с помощью Get-ADGroup

Используйте Get-AdGroup, чтобы найти группы с использованием фильтров. Два примера ниже.

PS51> Get-ADGroup -Filter "Members -notlike '*'"
PS51> Get-ADGroup -LDAPFilter "(!(member=*))"

Создайте новую группу безопасности с помощью New-ADGroup

Вы создаете новую группу безопасности, используя команду New-AdGroup.

PS51> New-ADGroup -Name '<group name>' -GroupScope <scope of group> -Path '<path of the OU tht will host the new group>'

Если параметр Path не указан, новая группа будет создана в контейнере Users. Область группы должна быть либо DomainLocal, либо Global, либо Universal.

Создайте новую группу распределения с помощью New-ADGroup

Используйте New-AdGroup снова, чтобы создать группу распределения. В этот раз выберите GroupCategory Distribution.

PS51> New-ADGroup -Name '<group name>' -GroupScope <scope of group>  -GroupCategory Distribution -Path '<path of the OU tht will host the new group>'

Добавьте участников в группу с помощью Add-ADGroupMember

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

Эта команда указывает группу как Identity.

PS51> Add-ADGroupMember -Identity <identity string or object> -Members <identity string(s) or ADPrincipal(s)>

Эта команда указывает AD-принципала как Identity.

PS51> Add-ADPrincipalGroupMembership -Identity <identity string or object> -MemberOf <identity string(s) or ADGroup(s)>

Запишите в свойство Notes группы с помощью Set-AdGroup

Поле, обозначенное как Notes в ADUC, представлено свойством Info, возвращаемым из Get-AdGroup.

Сначала найдите группу для изменения, установите свойство Info, а затем используйте Set-AdGroup, чтобы внести изменения в AD.

PS51> $group = Get-ADGroup -Identity <identity string or object>
PS51> $group.Info = 'Important notes on this group'
PS51> Set-ADGroup $group

Удалите участников группы с помощью Remove-ADGroupMember

Как и все cmdlet в PowerShell, вы можете использовать параметр Confirm, чтобы получить запрос перед внесением изменений. Это поведение также применяется к cmdlet Remove-AdGroupMember и Remove-ADPrincipalGroupMembership.

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

PS51> Remove-ADGroupMember -Identity <identity string or object> -Members <identity string(s) or ADPrincipal(s)>
PS51> Remove-ADPrincipalGroupMembership -Identity <identity string or object> -MemberOf <identity string(s) or ADGroup(s)>

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

PS51> Remove-ADGroupMember -Identity <identity string or object> -Members <identity string(s) or ADPrincipal(s)> -Confirm
PS51> Remove-ADPrincipalGroupMembership -Identity <identity string or object> -MemberOf <identity string(s) or ADGroup(s)> -Confirm

Удалите группу с помощью Remove-ADGroup

Удалите группу без подтверждения и с подтверждением.

PS51> Remove-ADGroup -Identity <identity string or object>
PS51> Remove-ADGroup -Identity <identity string or object> -Confirm

Переименуйте группу с помощью Rename-ADObject

Вы можете переименовать группу одной строкой, используя Rename-ADObject.

PS51> Rename-ADObject -Identity <identity string or object> -NewName '<new name>'

Получите количество групп с помощью Get-ADGroup

Вам нужно узнать общее количество групп, возвращаемых с помощью Get-AdGroup? Используйте свойство Count.

PS51> (Get-ADGroup -Filter '*').Count

Найдите группы с менеджером с помощью Get-ADGroup

Отфильтруйте все группы, у которых назначен менеджер, с использованием Get-AdGroup и хорошо разработанного фильтра LDAP.

PS51> Get-ADGroup -LDAPFilter '(managedby=*)'

Для этого нет эквивалента фильтра PowerShell.

Найдите группы, управляемые определенным пользователем с помощью Get-ADGroup

Улучшите свои навыки фильтрации и найдите все группы, управляемые определенным пользователем, используя либо фильтр PowerShell, либо фильтр LDAP.

PS51> Get-ADGroup -Filter 'managedby -eq "<distinguished name of user>"'
PS51> Get-ADGroup -LDAPFilter '(managedby=<distinguished name of user>)'

Установите менеджера группы с помощью Set-ADGroup

Вкладка Управляется в ADUC для групп позволяет назначить ответственного за членство в группе. Это не означает, что менеджер может автоматически изменять членство в группе. Для этого необходимо изменить разрешения безопасности для свойства Member соответствующей группы.

Действие установки флажка Менеджер может обновлять список членов для группы в Пользователи и компьютеры Active Directory (ADUC) изменяет разрешения, позволяющие это.

Managed By tab in Active Directory Users and Computers

Используйте команду Set-ADGroup для установки атрибута ManagedBy:

PS51> Set-ADGroup -ManagedBy '<distinguished name, GUID, SID or SAM Account name of manager>'

Обновление списка контроля доступа требует нескольких дополнительных шагов. Следующий фрагмент кода предоставляет пользователю Кристин Диаз возможность управлять членством в группе. bf9679c0-0de6-11d0-a285-00aa003049e2 – это GUID свойства Member группы.

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

Найдите утечки и небезопасные пароли в вашем активном каталоге, проверив их по списку паролей NCSC.

$group = Get-ADGroup -Identity 'Professional Services Department'
$manager = Get-ADUser -Identity 'Kristin.Diaz'
$NTPrincipal = New-Object System.Security.Principal.NTAccount $manager.samAccountName
$objectGUID = New-Object GUID 'bf9679c0-0de6-11d0-a285-00aa003049e2'
$acl = Get-ACL "AD:$($group.distinguishedName)"
$ace = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $NTPrincipal,'WriteProperty','Allow',$objectGUID
$acl.AddAccessRule($ace)
Set-ACL -AclObject $acl -Path "AD:$($group.distinguishedName)"

Найдите все группы безопасности

Перечислите все группы безопасности в активном каталоге с помощью PowerShell, ограничив свой запрос только группами безопасности с помощью этих двух примеров. Что такое LDAP-фильтр, спрашиваете вы? Узнайте все о LDAP-фильтрах.

PS51> Get-ADGroup -Filter 'groupcategory -eq "Security"'
PS51> Get-ADGroup -LDAPFilter '(groupType:1.2.840.113556.1.4.803:=2147483648)'

Найдите группы распространения

Используйте PowerShell для перечисления групп Active Directory (распространение), исключая группы безопасности с помощью этих двух примеров.

PS51> Get-ADGroup -Filter 'groupcategory -eq "Distribution"'
PS51> Get-ADGroup -LDAPFilter '(!(groupType:1.2.840.113556.1.4.803:=2147483648))'

Найдите членство групп для пользователя с помощью Get-ADPrincipalGroupMembership

PS51> Get-ADPrincipalGroupMembership -Identity <identity string or object>

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

Найдите группы в OU, не включая подчиненные OU

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

PS51> Get-ADGroup -Filter '*' -SearchBase '<distinguished name of OU>' -SearchScope OneLevel
PS51> Get-ADGroup -LDAPFilter '(CN=*)' -SearchBase '<distinguished name of OU>' -SearchScope OneLevel

Найдите группы в OU, включая любые подчиненные OU

Нужно найти все группы в дочерних OU? Используйте SearchScope SubTree.

PS51> Get-ADGroup -Filter '*' -SearchBase '<distinguished name of OU>' -SearchScope SubTree
PS51> Get-ADGroup -LDAPFilter '(CN=*)' -SearchBase '<distinguished name of OU>' -SearchScope SubTree

Сводка

Это завершает наш пример управления группами AD с помощью PowerShell. Возьмите несколько из них, попробуйте в своей организации и начните автоматизировать!

Source:
https://adamtheautomator.com/get-adgroup/