使用Get-ADGroup等管理AD组

使用ActiveDirectory PowerShell模块,您可以使用Get-AdGroup查询AD组,添加、更新和删除组及组成员。在这篇博文中,您将了解有关Active Directory组PowerShell cmdlet的一些内容,并附有大量示例供参考。

Active Directory组Cmdlets

一旦您安装了ActiveDirectory PowerShell模块,您将找到一些可用于管理组的cmdlet。

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.

使用这些cmdlet和一些PowerShell技巧,您可以通过PowerShell管理Active Directory组的各个方面。

使用Get-ADGroupMember查找组的成员

Get-AdGroupMember cmdlet返回组中的所有成员。

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

或者,您可以使用Get-Aduser cmdlet引用特定用户的memberOf属性。有关如何构建过滤器的刷新,请查看在PowerShell中学习Active Directory和LDAP过滤器

以下是两个示例。

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

注意使用Export-CSVNoTypeInformation参数,以确保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容器中创建。组范围必须是DomainLocalGlobalUniversal之一。

使用New-ADGroup创建新的分发组

再次使用New-AdGroup创建分发组。这次,选择GroupCategoryDistribution

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将成员添加到组中

可以使用Add-AdGroupMember命令或Add-ADPrincipalGroupMembership命令将用户添加到Active Directory组中。

此命令将组指定为Identity

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

此命令将AD principal指定为Identity

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

将文本写入具有Set-AdGroup的Notes属性。

ADUC中标记为Notes的字段由Get-AdGroup返回的Info属性表示。

首先,找到要更改的组,设置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移除组成员

像所有PowerShell cmdlet一样,您可以使用Confirm参数在进行更改之前提示。此行为也适用于Remove-AdGroupMemberRemove-ADPrincipalGroupMembership cmdlet。

您可以在不确认的情况下移除组成员。

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

设置组经理Managed By选项卡在ADUC中允许您指定负责组成员资格的人。这并不自动意味着经理可以更改组的成员资格。为了实现这一点,需要更改有关问题组的Member属性的安全权限。

Active Directory Users and Computers(ADUC)中为组选中Manager can update membership list框将更改权限以允许此操作。

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>'

更新访问控制列表需要更多步骤。以下代码片段授予用户Kristin Diaz管理组成员资格的权限。bf9679c0-0de6-11d0-a285-00aa003049e2是组Member属性的GUID。

如果Kristin还被设置为组的经理,则将选中复选框。如果没有,Kristin仍然能够管理组的成员资格,但在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列出活动目录组(分发),其中排除了安全组,使用这两个示例。

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>

请注意,此命令需要访问全局目录。

在组织单位中查找组,不包括任何子组织单位

通过使用SearchBase参数,以这两个示例限制搜索范围为单个组织单位,进行细化搜索。

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

在组织单位中查找组,包括任何子组织单位

需要在子组织单位中查找所有组吗?使用SearchScopeSubTree

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

摘要

这就结束了我们基于示例的使用PowerShell管理AD组的演示。在您的组织中尝试其中一些,并开始自动化吧!

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