A popular use of PowerShell is working with Active Directory Directory Services (AD). There are so many time-saving things PowerShell can do with AD objects. Using the PowerShell Get-ADGroupMember
cmdlet and other cmdlets can save you a ton of time.
Active Directory 群組是區分使用者帳戶的好方法。群組允許管理員在許多系統上定義資源訪問權限。
在本文中,讓我們使用 PowerShell 來獲取 AD 群組成員並導出 AD 群組成員。然後,您可以使用這些資訊生成許多有趣的報告。

使用 ManageEngine ADManager Plus 管理和報告 Active Directory、Exchange 和 Microsoft 365。 免費試用!
前提條件
如果您想要在本文中跟隨操作,請確保您已準備好以下需求:
- 在 Windows 10 域加入的電腦上工作
- 以可以讀取 AD 群組和使用者帳戶的使用者身份登錄
- 已安裝PowerShell Active Directory 模組
學習基礎知識
要查詢 AD 群組和群組成員,您可以使用兩個 PowerShell 命令-let – Get-AdGroup
和 Get-AdGroupMember
。
Get-ADGroup
查詢域控制器並返回 AD 群組對象。 Get-AdGroupMember
在每個群組中查找並返回存在於該群組中的所有用戶帳戶、群組、聯絡人和其他對象。
獲取 AD 群組
要使用 PowerShell 找到 AD 群組,可以使用 Get-ADGroup
cmdlet。如果沒有指定任何參數,Get-ADGroup
將使用 Filter
參數在域中查詢並返回所有群組。 Filter
參數是必需的。它用於基於各種標準限制返回的群組。
例如,要找到不考慮任何標準的所有群組,可以使用 Get-ADGroup
命令並將 Filter
參數設置為通配符(星號)。下面是一個示例。如果您的域中有數百甚至數千個群組,滾動查看所有這些群組可能需要一些時間。
如果您需要找到單個群組,可以使用 Identity
參數。
Identity
參數是所有 Active Directory PowerShell cmdlet 中的常見參數。它允許您將查詢限制為單個 AD 對象。例如,如果您需要檢查是否存在一個名為 HR 的群組,可以運行下面的命令來查詢。
使用 Get-AdGroupMember 獲取 AD 群組成員
使用PowerShell列出AD组的成员需要使用Get-ADGroupMember
命令。该命令获取特定组中的用户、组和计算机对象。也许你需要找到Administrators组的所有成员。在最简单的形式中,你只需再次使用Identity
参数,并指定组的名称如下:
请注意,
Get-AdGroupMember
仅返回用户、组和计算机的组成员。它不会返回其他AD对象,如联系人。
枚举组成员内的组成员
你可能知道,AD组不仅可以包含用户账户,还可以包含其他组,也称为嵌套。当一个组嵌套在另一个组内时,该组的成员将继承分配给父组的相同权限。
默认情况下,PowerShell的Get-AdGroupMember
命令不会返回嵌套组成员。为了解决这个问题,你可以使用Recursive
参数。例如,你可以使用下面的命令使用Recursive
参数找到嵌套在HR组内的组的成员:
一次获取多个组/成员
如果您需要一次查詢AD中的多個不同組或組成員,您也可以使用PowerShell的foreach循環。foreach循環對集合中的每個項目運行一個命令或代碼for each。在這種情況下,該集合將是一個組名列表。
也許您需要找到HR、會計和IT組中的所有組成員。為此,首先創建這些組名的集合或數組。下面的示例將此集合定義為$groupNames
。然後,對於該集合中的每個名稱,在Identity
參數中提供每個組的名稱,運行Get-ADGroupMember
。
您還可以使用
ForEach-Object
cmdlet循環遍歷組。
使用替代憑據
與許多其他PowerShell命令,AD組命令也具有Credential
參數。默認情況下,每次運行AD組命令時,它都使用您的登錄憑據來查詢Active Directory。這種行為要求您必須在一個加入域的計算機上以Active Directory用戶身份登錄。
但如果您使用的是工作组计算机或需要使用不同的用户身份进行AD身份验证呢?在这种情况下,您可以使用
例如,也许您的用户帐户没有执行AD任务的权限,但您有一个具有额外权限的服务帐户。您可以作为标准用户登录,但仍然可以使用服务帐户进行身份验证,如下所示。
Get-Credential
cmdlet会提示输入用户名/密码以创建凭据。然后,将此凭据传递给Get-AdGroup
cmdlet进行身份验证。
参数在PowerShell中用于提供身份验证凭据。有关更多信息,请阅读使用PowerShell Get-Credential cmdlet和所有与凭据相关的内容。
如何使用Get-ADGroup获取组成员?
听起来可能有些违反直觉,但您也可以使用Get-ADGroup
cmdlet获取组成员。
事实证明,Get-ADGroup
会返回每个组的一个名为members
的属性。这是一个包含组成员的AD对象集合。
例如,要查找HR组的组成员,而不使用Get-ADGroupMember
,可以执行类似以下的操作:
為什麼要使用這種方法而不是其他方法?主要的不同之處在於 members
屬性包含了所有類型的 AD 物件 – 不僅僅是用戶、計算機和其他群組。
也許您在各種群組內有聯繫人。當您運行 Get-ADGroupMember
時,這些聯繫人不會顯示。但是,如果您告訴 Get-ADGroup
返回該群組中的所有成員並展開該集合,如下所示,您將看到這些聯繫人。
查找特定的 AD 屬性
在上面的基礎部分中,您只是返回了所有群組和群組成員。返回的每個群組和群組成員的信息只是與每種對象類型相關聯的 AD 屬性的子集。
也許您想查看用戶帳戶的電子郵件地址、上次登錄日期或其他相關的 AD 屬性?為此,您需要有創意。
也許您能夠找到 HR 群組中的所有群組成員,但需要查看每個用戶帳戶的電子郵件地址?
過濾結果
到目前為止,您已經找到了所有群組和群組成員,但在日常工作環境中,您很少需要這樣做。很有可能,您只需要找到每個項目的有限數量。AD 群組 cmdlet 有幾種處理這個問題的方法。
Filter
參數
如前所述,這兩個 cmdlet 都有 Filter
參數。該參數允許您以許多不同的方式限制返回的內容,超出本文的範圍。
使用Filter
參數,您可以通過任何AD屬性(如名稱、組類型、電子郵件地址、上次登錄等)來限制結果。
例如,也許您只想找到安全組。在這種情況下,您需要指定一個GroupCategory
屬性並設置條件,以確保只返回安全組。
也許您想要找到所有的安全組,但它們不能是域本地組。那麼,您可以添加另一個條件(這次使用-ne
運算符)來防止返回任何域本地組。
如果您想學習如何創建查詢過濾器,請務必查看在PowerShell中學習Active Directory和LDAP過濾器。
通過組織單位(OU)限制組結果
也許您在OU中有各種組嵌套。您可能不想找到所有組,而只想找到特定OU中的組。在這種情況下,您可以使用SearchBase
參數。
SearchBase
參數允許您指定OU的區別名(DN)以開始搜索組。例如,也許您的域的根目錄下有一個名為Locations的OU。在Locations OU中,您創建了每個位置OU,如Austin、NYC和洛杉磯。您只想找到NYC OU中的組,並需要限制查看其他組。
下面顯示了一個示例AD OU結構。請注意,Locations OU之外還存在其他組。
也许你需要找到仅位于NYC OU中的所有AD组。为了限制查询,你可以使用SearchBase
参数提供DN,如下所示。返回Locations OU中的所有组。
但是现在你需要找到所有位于Locations OU下的OU中的所有组。Get-ADGroup
只返回Locations OU本身的组 – 而不是子OU中的组。
要返回子OU中的组,你需要使用SearchScope
参数。该参数类似于Recursive
参数,它也会检查子对象。
例如,要查找Locations OU下任何 OU中的所有组,请指定Subtree
或2
。这个SearchScope
的值告诉Get-ADGroup
递归地查看所有子级、孙级和下级OU。
有关SearchScope
参数选项的完整说明,请参考Get-ADGroup
文档。
导出AD组和成员
所以现在你知道如何查询和返回所需的组和组成员。所有这些信息都发送到PowerShell控制台。但是现在你需要将这些信息导出到CSV文件或Excel工作表中。
现在你需要做的就是将所有这些信息发送到一个文件中。
导出到CSV
导出AD信息的一种常用格式是CSV。PowerShell有一个方便的cmdlet,可以让你轻松地从PowerShell输出创建CSV文件,叫做Export-Csv
。
您可以通过将任何本文中涉及的命令导向到Export-Csv
来创建CSV文件。使用下面的示例,将Get-AdGroup
返回的所有输出重定向到CSV文件而不是控制台。
有关此实用程序的更多信息,请参阅Export-Csv: 以PowerShell方式将CSV文件视为一等公民。
您还可以通过Get-AdGroupMember
命令轻松将结果导出为CSV。
导出至Excel
PowerShell没有本地方法将信息导出到Excel。但是,您始终可以下载名为ImportExcel的免费社区模块。该模块将类似CSV的导出功能直接带到Excel工作表中。要安装PowerShell模块,请运行Install-Module ImportExcel -Scope CurrentUser
。
使用上述示例,如果您需要将组导出到Excel工作表而不是CSV文件,则可以使用下面显示的Export-Excel
命令。
通过与NCSC密码列表进行对比,在您的Active Directory中查找泄露和不安全的密码。
ImportExcel 模組具有與 Excel 進行操作的大量功能。如果你需要更為高級的工作表,它可能有適合你的函數。
如需有關使用 ImportExcel 模組的更多信息,請閱讀本文。它提供了對它可以處理的一些常見用例的良好介紹。
使用 ManageEngine ADManager Plus 管理和報告 Active Directory、Exchange 和 Microsoft 365。 下載免費試用版!
結論
只使用兩個 PowerShell 命令,你就可以在 AD 群組中做任何事情。本文只是對你可用功能的一個簡要介紹。利用此處收集的知識,跟隨文章中的一些深入主題鏈接,看看你能夠創建什麼!