1)查询Azure AD租户中的所有组信息

若要查询Azure AD租户中的所有组信息,可以通过执行"Get-AzureADGroup -All $true"命令来查询检索当前Azure AD租户中所有组的完整列表。该命令会绕过默认的分页限制,返回当前Azure AD租户中全部的群组信息,如下图所示。

2)查询Azure AD租户中的特定组信息

若已获取了Azure AD租户中某个组的ObjectId后,可以通过执行"Get-AzureADGroup -ObjectId <ID>"命令来查询该Azure AD组的详细属性信息(如:名称、描述、组成员身份等信息),在执行该命令时,我们需要将 <ID>替换为已经获取到的实际组的ObjectId,如下图所示,我们通过ObjectId查询出该组为"AAD DC Administrators组",该组是Azure AD中负责管理域控制器 (DC) 的管理员组,其具有对Azure AD环境中所有目录、身份和相关资源的管理权限。

3)通过SearchString参数查询Azure AD租户中包含字符串"AAD"的Azure AD组所有属性信息

若想对包含某个字符串的Azure AD组进行信息查询,可通过执行"Get-AzureADGroup -SearchString "<某组包含的字符串〉" | fl "命令来查询并列出所有与该字符(不区分大小写)相关的Azure AD群组的所有可用属性详细信息,在本例中,笔者将执行"Get-AzureADGroup -SearchString "AAD" | fl "命令来对"AAD DC Administrators"组进行查询,当我们执行完上述命令后可以看到其会输出一组对象,如下图所示,每个对象代表一个与搜索条件匹配的 Azure AD 组。每个对象将包含各种字段属性,具体每个对象字段属性如下表所示

提示:"AAD DC Administrators" 组是在Azure Active Directory Domain Services (Azure AD DS) 环境中的一个特殊管理员组。这个组的成员拥有对Azure AD DS托管域的管理权限,可以执行如创建和管理用户账户、配置域服务等高级任务。这个组类似于传统Active Directory环境中的“Domain Admins”组,但专门用于Azure AD DS环境。

字段

描述

示例

DeletionTimestamp

如果组已删除,则此字段包含组的删除时间戳。

2023-11-16T12:34:56.789Z

ObjectId

组的唯一标识符是用于标识组的 GUID。

123e4567-e89b-12d3-a456-426655440000

ObjectType

组的类型可以是安全组、分发组或动态组。安全组用于控制对资源的访问权限。分发组用于向组成员发送电子邮件或消息。动态组根据用户属性自动成员身份。

SecurityGroup

Description

组的描述是可选的,可以提供有关组用途的更多信息。

此组用于管理 Azure AD 租户。

DirSyncEnabled

如果组启用 DirSync,则此字段设置为 True。

TRUE

DisplayName

组的显示名称是用户在 Azure AD 中看到的名称。

Azure AD 管理员组

LastDirSyncTime

如果组启用 DirSync,则此字段包含组的上次 DirSync 时间。

2023-11-15T12:34:56.789Z

Mail

组的电子邮件地址是用于向组成员发送电子邮件的地址。

MailEnabled

如果组启用邮件,则此字段设置为 True。

TRUE

MailNickName

组的邮件昵称是用于在电子邮件中标识组的名称。

Admins

OnPremisesSecurityIdentifier

组的本地安全标识符是用于在本地 Active Directory 中标识组的 GUID。

S-1-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0

ProvisioningErrors

如果组的预配出现任何错误,则此字段将包含错误消息。

[]

ProxyAddresses

组的代理地址是用于在电子邮件中标识组的其他地址。

SecurityEnabled

如果组启用安全性,则此字段设置为 True。

TRUE

4) 查询所有未与本地AD同步的Azure AD安全标识符(SID)的组

假设我们所获取到的核心域控制器(DC)部署并使用了Azure AD Connect,在对Azure AD用户信息查询阶段,可执行"Get-AzureADGroup -All $true | ?{$_.OnPremisesSecurityIdentifier -eq $null}"命令来查询所有未与本地AD同步的Azure AD组,如下图所示,即在Azure AD控制台直接创建的"纯云组",而非通过Azure AD Connect同步到Azure AD中的"同步组"。

5)查询所有从本地 AD同步到Azure AD的所有组

相对来讲,我们也可以执行"Get-AzureADGroup -All $true | ?{$_.OnPremisesSecurityIdentifier -ne $null}"命令来查询出所有从本地 AD同步到Azure AD的所有组,如下图所示。

注意:使用-eq $null参数选项会筛选出那些没有本地Active Directory安全标识符的Azure AD组,这些通常是仅在Azure环境中创建的云原生组,而使用-ne $null参数选项则会筛选出那些有本地Active Directory安全标识符的Azure AD组,这些组通常是从本地AD环境同步到Azure AD的。

6)查询用户所属的组和成员角色

在对AzureAD租户中用户所属的组和角色进行查询时,我们可以通过如下powershell脚本来查询出当前Azure AD中所有组及其成员角色信息。该脚本首先会创建一个"$roleUsers"的空数组(用于存储有关用户及其组成员关系的信息),并检索当前Azure AD中的所有MSI 组并将其存储在名为 $roles 的变量中。随后使用Get-AzureADMSGroup命令来获取所有Azure AD组。对于获取的每个Azure AD组,将会使用Get-AzureADGroupMember来获取其成员,并为每个成员创建一个包含组名、成员显示名称、成员的用户主体名称和用户类型的自定义对象。该脚本执行结果如下图所示,在该脚本中,每个成员的信息被添加到$roleUsers数组中,该数组包含了所有组及其成员的列表,如下图所示,我们可以在当前的powershell中执行"$roleUsers"来查看查询出来的用户组及其成员角色信息。

代码清单3-1 查询指定用户所属的组和角色脚本

$roleUsers = @() 
$roles=Get-AzureADMSGroup
ForEach($role in $roles) {
$roles=Get-AzureADMSGroup
 $users=Get-AzureADGroupMember -ObjectId $role.Id
  ForEach($user in $users) {
    write-host $role.DisplayName, $user.DisplayName, $user.UserPrincipalName, $user.UserType
    $obj = New-Object PSCustomObject
    $obj | Add-Member -type NoteProperty -name GroupName -value ""
    $obj | Add-Member -type NoteProperty -name UserDisplayName -value ""
    $obj | Add-Member -type NoteProperty -name UserEmailID -value ""
    $obj | Add-Member -type NoteProperty -name UserAccess -value ""
    $obj.GroupName=$role.DisplayName
    $obj.UserDisplayName=$user.DisplayName
    $obj.UserEmailID=$user.UserPrincipalName
    $obj.UserAccess=$user.UserType
    $roleUsers+=$obj
  }
}