使用 Get-ADGroup 等工具管理 AD 群組

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

Active Directory组Cmdlet

安装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將成員添加到群組

使用PowerShell將用戶添加到Active Directory群組可以使用Add-AdGroupMember命令或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

命令。在 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 命令一樣,您可以使用 Confirm 參數在進行更改之前進行提示。這種行為也適用於 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中的“Managed By”选项卡允许您指定负责群组成员资格的责任人。这并不意味着管理者可以自动更改群组的成员资格。为了实现这一点,需要更改有关所讨论的群组的“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密碼列表,找到在您的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中查找所有組嗎?將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

總結

這就是我們用示例演示使用PowerShell管理AD組的演示。在您的組織中嘗試使用其中幾個示例,開始自動化吧!

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