[玩转系统] 如何在 PowerShell 中使用 Get-ADGroup
作者:精品下载站 日期:2024-12-14 03:43:33 浏览:15 分类:玩电脑
如何在 PowerShell 中使用 Get-ADGroup
您是否需要获取 Active Directory 中的所有组,或者只需要查找隐藏在 OU 中某处的一个组的位置?在PowerShell中,我们可以使用Get-ADGroup
cmdlet从AD中快速提取有关我们组的所有信息。
Active Directory 中的组确实可以帮助您保持 AD 井井有条。它允许您向属于单个组成员的多个用户分配权限或许可证。例如,当管理层需要访问 PowerBi 时,您只需将许可证分配给 PowerBi 组。
在本文中,我们将了解如何在 PowerShell 中使用 Get-ADGroup cmdlet。在本文末尾,您还将找到一个完整的脚本,可将 Active Directory 中的所有组导出到 CSV。
要求
在使用 Get-ADGroup cmdlet 之前,您需要在 PowerShell 中安装 Active Directory 模块。它默认安装在域控制器上,但在 Windows 10 或 11 上,您将需要安装它。
在 PowerShell 中运行以下命令来安装模块:
Add-WindowsCapability -online -Name “Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0”
在 PowerShell 中使用 Get ADGroup 查找组
Get Get-ADGroup cmdlet 允许我们查找 Active Directory 中的所有组对象并从中提取信息。此 cmdlet 的优点是我们可以使用不同的参数来查找 AD 中的组。
在查找组时,我们可以使用以下参数:
- 身份 - 根据群组名称查找群组。这将只返回一个组
- 过滤器 - 根据过滤器查询检索多个组
- LDAPFilter - 使用 LDAP 查询字符串来过滤组对象
- SearchBase - 指定要在其中搜索的 Active Directory 路径 (OU)
- 搜索范围 - 指定您要搜索的深度(基本级别、一级或完整子树)
获取组的最常见方法是使用identity 参数。但为此,您需要知道该组的名称。它将返回具有最重要属性的单个组:
Get-ADGroup -identity SG_M365_E5
如您所见,仅从组中返回基本属性。我们可以使用 -properties
参数来检索该组的所有属性。稍后我将详细解释如何检索不同的属性,但如果您想查看组中的所有信息,请使用以下命令:
Get-ADGroup -identity SG_M365_E5 -properties *
使用过滤器参数
当您搜索特定组并且不知道确切名称时,可以使用过滤器参数。这使我们能够根据名称或其他属性的一部分搜索所有组。
筛选器参数还可用于从 Active Directory 检索多个组或所有组。
让我们看一下几个常用的查找组的示例:
要根据名称的一部分查找组,您可以使用 -like
过滤器:
Get-ADGroup -Filter "Name -like 'SG_*'" | ft
这将返回名称以 SG_ 开头的所有组。
要获取所有安全组,我们可以根据组类别值过滤组:
Get-ADGroup -Filter "GroupCategory -eq 'Security'" | ft
如果运行上面的命令,您会注意到它还返回所有内置组。大多数时候,您的导出中不需要这些。那么让我们过滤掉它们:
Get-ADGroup -Filter "GroupCategory -eq 'Security' -and GroupScope -ne 'Domainlocal'" | ft
现在您仍然剩下一些内置组。这些组位于 Active Directory 中的默认用户 OU 容器中。还有两个选项可以过滤掉这些内容,您可以指定搜索库,请参阅下一章,或者过滤掉 DistinguishedName
以 OU=Users,DC= 结尾的所有结果域,DC=本地。
# Replace DC=Domain,DC=Local with your AD domain name
Get-ADGroup -Filter "GroupCategory -eq 'Security' -and GroupScope -ne 'Domainlocal'" | Where-Object { $_.DistinguishedName -notlike "*,CN=user,DC=Domain,DC=local" } | ft
您还可以使用以下 cmdlet 获取域的 DN 路径:
Get-ADDomain | Select -ExpandProperty DistinguishedName
获取 ADGroup 搜索库
当您想要从 Active Directory 检索多个组时,您可能需要缩小搜索范围。如上一章所述,当您列出所有组时,也会列出所有内置组。大多数情况下,您的群组都组织在单独的组织单位中,因此我们可以使用 SearchBase (distinguishedName) 参数来指定要搜索的组织单位。
DistinguishedName 是 OU 的完整路径,我们将其从 OU 沿树向上写入 AD 域名。
采用以下 AD 结构,我们希望获取阿姆斯特丹站点的所有计算机:
在这种情况下,搜索基础字符串将是:
1 2 3 4 5
"OU=Computers,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL"
例如,要获取 OU 阿姆斯特丹的所有组,我们可以使用以下 SearchBase 路径:
Get-ADGroup -Filter * -SearchBase "OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL" | ft
使用搜索范围
-SearchBase 参数将返回指定和嵌套 OU 中的所有计算机。通过使用 -SearchScope 参数,我们可以指定要在 Active Directory 树中搜索的深度。
例如,我们想要从阿姆斯特丹站点获取除测试组之外的所有组:
要获取阿姆斯特丹的所有组(子 OU“test”中的组除外),我们可以使用 searchScope 参数将 searchBase 限制为仅当前级别:
$searchBase = "OU=Groups,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL"
Get-ADGroup -Filter * -SearchBase $searchBase -SearchScope OneLevel
获取群组经理
Active Directory 组可以由用户管理。通过这种方式,用户可以添加或删除组的成员,这对于通讯组或当组中有许多突变时非常有用。
要获取组的管理者,我们可以使用 Get-ADGroup cmdlet 和属性 managementBy
:
# You can also use a filter or searchbase to get the manager of multiple groups
Get-ADGroup -Identity management -Properties managedby | select name, managedBy | ft
正如您在上面的屏幕截图中看到的,managementBy 属性返回用户的可分辨名称。如果您只需要名称,可以通过管道在其后面输入 Get-ADUser cmdlet:
Get-ADGroup -Identity management -Properties ManagedBy | % {Get-ADUser -Identity $_.managedBy} | select name
获取组的组成员资格
组也可以是其他组的成员,当您想要根据组成员身份分配许可证或其他权限时,这特别有用。例如,所有经理都应该有权访问 PowerBi。现在,您可以将每个管理器单独添加到 SG_M365_PowerBi 组,但您也可以使组管理成为 SG_M365_PowerBi 的成员。
要列出某个组所属的所有组,您可以使用 memberOf 属性:
Get-ADGroup -Identity management -Properties memberOf | select name,memberOf
但正如您在上面的屏幕截图中看到的,这并不是一个真正可读的名称。就像组管理器一样,我们需要查找每个组才能获取名称。
幸运的是,还有另一个选项,我们可以使用 Get-ADPrincipalGroupMembership cmdlet 来仅获取组所属的组的名称:
Get-ADPrincipalGroupMembership -identity management | ft
使用 PowerShell 将所有 AD 组导出到 CSV
如果您想获得 Active Directory 中所有组的概览,那么导出到 CSV 是一个不错的方法。例如,这使您可以浏览 Excel 中的所有组并列出所有组管理员或成员资格。
我已经编写了有关 Export-CSV cmdlet 的完整指南,但我还想为您提供一些使用 Get-ADGroup cmdlet 时有用的示例。
要简单地导出所有 AD Group 对象,我们可以使用以下命令:
Get-ADGroup -filter * | Export-csv c:\temp\adgroups.csv -NoTypeInformation
这将列出所有组,包括仅具有默认属性的内置组。大多数时候并不是您真正需要的信息。
完成将 AD 组导出到 CSV 脚本
我创建了一个 PowerShell 脚本,它将使用最常用的属性将所有 AD 组导出为 CSV。
运行脚本时,您指定几个选项:
- 指定搜索库(OU),默认整个Active Directory
- 包含或排除内置组(默认排除)
- 导出路径CSV文件(默认无,控制台输出)
如果您不指定 searchBase (OU),该脚本将从 Active Directory 获取所有组。也可以指定多个 OU:
.\Get-ADGroups.ps1 -searchBase "OU=groups,OU=Amsterdam,DC=LazyAdmin,DC=Local","OU=groups,OU=Oslo,DC=LazyAdmin,DC=Local" -csvpath c:\temp\computers.csv
请按照以下步骤使用 PowerShell 脚本导出 AD 组:
- 从我的 Github 下载完整的导出 AD 组脚本
- 打开 PowerShell 并导航到脚本
- 运行导出脚本:Get-ADGroups.ps1
完成后,脚本将自动为您打开 Excel。
param(
[Parameter(
Mandatory = $false,
HelpMessage = "Enter the searchbase between quotes or multiple separated with a comma"
)]
[string[]]$searchBase,
[Parameter(
Mandatory = $false,
HelpMessage = "Include built-in groups or exclude"
)]
[ValidateSet("include", "exclude")]
[string]$builtin = "exclude",
[Parameter(
Mandatory = $false,
HelpMessage = "Enter path to save the CSV file"
)]
[string]$CSVpath
)
Function Get-Groups{
<#
.SYNOPSIS
Get groups from the requested DN
#>
param(
[Parameter(
Mandatory = $true
)]
$dn
)
process{
# Set the properties to retrieve
$properties = @(
'Name',
'CanonicalName',
'GroupCategory',
'GroupScope',
'ManagedBy',
'MemberOf',
'created',
'whenChanged',
'mail',
'info',
'description'
)
# Get all groups, or exclude the builtin groups
# Get the computers
switch ($builtin)
{
"include" {
Get-ADGroup -filter * -searchBase $dn -Properties $properties | select $properties
}
"exclude" {
$builtinUsers = "CN=users,$dn"
$filter = "GroupScope -ne 'Domainlocal'"
Get-ADGroup -filter $filter -searchBase $dn -Properties $properties | Where-Object { $_.DistinguishedName -notlike "*,$builtinUsers" } | select $properties
}
}
}
}
Function Get-ADGroups {
<#
.SYNOPSIS
Get all AD Groups
#>
process {
Write-Host "Collecting groups" -ForegroundColor Cyan
$groups = @()
# Collect groups
if ($searchBase) {
# Get the requested groups
foreach ($dn in $searchBase) {
Write-Host "- Get groups in $dn" -ForegroundColor Cyan
$groups += Get-Groups -dn $dn
}
}else{
# Get distinguishedName of the domain
$dn = Get-ADDomain | Select -ExpandProperty DistinguishedName
Write-Host "- Get groups in $dn" -ForegroundColor Cyan
$groups += Get-Groups -dn $dn
}
# Loop through all computers
$groups | ForEach {
$managedBy = ''
$memberOf = ''
# If the group is managed, get the users name
if ($null -ne $_.ManagedBy) {
$managedBy = Get-ADUser -Identity $_.ManagedBy | select -ExpandProperty name
}
# If the group is member of other groups, get the group names
if ($_.MemberOf.count -gt 0) {
$memberOf = Get-ADPrincipalGroupMembership $_.name | select -ExpandProperty name
}
[pscustomobject]@{
"Name" = $_.Name
"CanonicalName" = $_.CanonicalName
"GroupCategory" = $_.GroupCategory
"GroupScope" = $_.GroupScope
"Mail" = $_.Mail
"Description" = $_.Description
"Info" = $_.info
"ManagedBy" = $managedBy
"MemberOf" = ($memberOf | out-string).Trim()
"Date created" = $_.created
"Date changed" = $_.whenChanged
}
}
}
}
If ($CSVpath) {
# Get mailbox status
Get-ADGroups | Export-CSV -Path $CSVpath -NoTypeInformation -Encoding UTF8
if ((Get-Item $CSVpath).Length -gt 0) {
Write-Host "Report finished and saved in $CSVpath" -ForegroundColor Green
Invoke-Item $CSVpath
}
else {
Write-Host "Failed to create report" -ForegroundColor Red
}
}
Else {
Get-ADGroups
}
总结
当您需要从 Active Directory 获取所有组时,Get-ADGroup cmdlet 非常有用。借助过滤器和/或搜索库参数,您可以快速仅选择您需要的组。
如果您有任何疑问,请在下面发表评论。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag