当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 Get-AdGroup 和 PowerShell 管理 Active Directory 组

作者:精品下载站 日期:2024-12-14 13:15:36 浏览:16 分类:玩电脑

使用 Get-AdGroup 和 PowerShell 管理 Active Directory 组


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

Active Directory 组 Cmdlet

安装 ActiveDirectory PowerShell 模块后,您将发现一些可用于管理组的 cmdlet。

Cmdlet Name

描述

Add-ADGroupMember

用于将成员添加到 AD 组。

Add-ADPrincipalGroupMembership

用于将 AD 主体添加到 AD 组。

Get-ADGroup

用于从 AD 返回一个或多个组。

Get-ADGroupMember

用于返回 AD 组的成员。

Get-ADPrincipalGroupMembership

用于获取 AD 主体所属的组。

New-ADGroup

用于创建新的 AD 组。

Remove-ADGroup

用于删除AD组。

Remove-ADGroupMember

用于从 AD 组中删除成员。

Remove-ADPrincipalGroupMembership

用于从 AD 组中删除 AD 主体。

Set-ADGroup

用于设置AD组的属性。

使用这些 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 创建通讯组。这次,选择 DistributionGroupCategory

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 cmdlet 或 Add-ADPrincipalGroupMembership cmdlet 将用户添加到 PowerShell 的 Active Directory 组中。

此命令将组指定为身份

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

此命令将 AD 主体指定为身份

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 设置组管理员

ADUC 中群组的“管理者”选项卡允许您指定负责群组成员资格的人员。这并不自动意味着管理员可以更改组的组成员身份。为此,需要更改相关组的“Member”属性的安全权限。

勾选Active Directory 用户和计算机 (ADUC) 中某个组的管理员可以更新成员资格列表框的操作会更改权限以允许执行此操作。

使用 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 密码列表来查找 Active Directory 中泄露和不安全的密码。

$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 列出 Active Directory 中的所有安全组。您可能会问,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 中的所有组?使用 SubTreeSearchScope

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 组的示例驱动演示到此结束。抓住其中的一些,在您的组织中尝试一下并开始自动化!

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯