用于组管理的 Microsoft Entra 版本 2 cmdlet
本文包含有关如何使用 PowerShell 在属于 Microsoft Entra 的 Microsoft Entra ID 中管理组的示例。 此外,本文还介绍如何安装 Microsoft Graph PowerShell 模块。 首先,必须下载 Microsoft Graph PowerShell 模块。
安装 Microsoft Graph PowerShell 模块
若要安装 MgGroup PowerShell 模块,请使用以下命令:
PS C:\Windows\system32> Install-module Microsoft.Graph
若要验证模块是否可供使用,请运行下面的命令:
PS C:\Windows\system32> Get-Module -Name "*graph*"
ModuleType Version PreRelease Name ExportedCommands
---------- ------- ---------- ---- ----------------
Script 1.27.0 Microsoft.Graph.Authentication {Add-MgEnvironment, Connect-MgGraph, Disconnect-MgGraph, Get-MgContext…}
Script 1.27.0 Microsoft.Graph.Groups {Add-MgGroupDriveListContentTypeCopy, Add-MgGroupDriveListContentTypeCopyF…
现在可以开始使用模块中的 cmdlet 了。 有关 Microsoft Graph 模块中的 cmdlet 的完整说明,请查看关于 Microsoft Graph PowerShell 的在线参考文档。
连接到目录
必须将 PowerShell 会话连接到要管理的目录,然后才能开始使用 Microsoft Graph PowerShell cmdlet 管理组。 请使用以下命令:
PS C:\Windows\system32> Connect-MgGraph -Environment China -ClientId 'YOUR_CLIENT_ID' -TenantId 'YOUR_TENANT_ID' -Scopes "Group.ReadWrite.All"
该 cmdlet 会提示用户输入访问目录时需要使用的凭据。 在此示例中,我们将使用 karen@drumkit.partner.onmschina.cn 访问演示目录。 该 cmdlet 会返回一个确认,表明会话已成功连接到目录:
Welcome To Microsoft Graph!
现在可以开始使用 MgGraph cmdlet 管理目录中的组。
检索组
若要从目录中检索现有组,请使用 Get-MgGroups cmdlet。
若要检索目录中的所有组,请使用不带参数的 cmdlet:
PS C:\Windows\system32> Get-MgGroup -All
该 cmdlet 会返回已连接目录中的所有组。
可以使用 -GroupId 参数检索已指定组 objectID 的特定组:
PS C:\Windows\system32> Get-MgGroup -GroupId 5e3eba05-6c2b-4555-9909-c08e997aab18 | fl
该 cmdlet 现在会返回其 objectID 与用户输入的参数值匹配的组:
AcceptedSenders :
AllowExternalSenders :
AppRoleAssignments :
AssignedLabels :
AssignedLicenses :
AutoSubscribeNewMembers :
Calendar : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCalendar
CalendarView :
Classification :
Conversations :
CreatedDateTime : 14-07-2023 14:25:49
CreatedOnBehalfOf : Microsoft.Graph.PowerShell.Models.MicrosoftGraphDirectoryObject
DeletedDateTime :
Description : Sales and Marketing
DisplayName : Sales and Marketing
Id : f76cbbb8-0581-4e01-a0d4-133d3ce9197f
IsArchived :
IsAssignableToRole :
IsSubscribedByMail :
LicenseProcessingState : Microsoft.Graph.PowerShell.Models.MicrosoftGraphLicenseProcessingState
Mail : SalesAndMarketing@M365x64647001.partner.onmschina.cn
MailEnabled : True
MailNickname : SalesAndMarketing
RejectedSenders :
RenewedDateTime : 14-07-2023 14:25:49
SecurityEnabled : True
可以使用 -filter 参数搜索特定组。 此参数采用 ODATA 筛选器子句,并返回与筛选器匹配的所有组,如以下示例所示:
PS C:\Windows\system32> Get-MgGroup -Filter "DisplayName eq 'Intune Administrators'"
DeletionTimeStamp :
ObjectId : aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
ObjectType : Group
Description : Intune Administrators
DirSyncEnabled :
DisplayName : Intune Administrators
LastDirSyncTime :
Mail :
MailEnabled : False
MailNickName : 4dd067a0-6515-4f23-968a-cc2ffc2eff5c
OnPremisesSecurityIdentifier :
ProvisioningErrors : {}
ProxyAddresses : {}
SecurityEnabled : True
注意
MgGroup PowerShell cmdlet 会实现 OData 查询标准。 有关详细信息,请参阅使用 OData 终结点的 OData 系统查询选项中的 $filter。
这里有一个示例,演示如何拉取未应用过期策略的所有组
Connect-MgGraph -Environment China -ClientId 'YOUR_CLIENT_ID' -TenantId 'YOUR_TENANT_ID' -Scopes 'Group.Read.All'
Get-MgGroup -ConsistencyLevel eventual -Count groupCount -Filter "NOT (expirationDateTime+ge+1900-01-01T00:00:00Z)" | Format-List Id
此示例与上一个示例相同,但脚本还将结果导出到 CSV。
Connect-MgGraph -Environment China -ClientId 'YOUR_CLIENT_ID' -TenantId 'YOUR_TENANT_ID' -Scopes 'Group.Read.All'
Get-MgGroup -ConsistencyLevel eventual -Count groupCount -Filter "NOT (expirationDateTime+ge+1900-01-01T00:00:00Z)" | Format-List Id |Export-Csv -Path {path} -NoTypeInformation
最后一个示例演示如何仅检索属于 Teams 的组
Get-MgGroup -ConsistencyLevel eventual -Count groupCount -Filter "NOT (expirationDateTime+ge+1900-01-01T00:00:00Z) and resourceProvisioningOptions/any(p:p eq 'Team')" | Format-List Id, expirationDateTime, resourceProvisioningOptions
创建组
若要在目录中创建新组,可使用 New-MgGroup cmdlet。 此 cmdlet 创建名为“Marketing”的新安全组:
$param = @{
description="My Demo Group"
displayName="DemoGroup"
mailEnabled=$false
securityEnabled=$true
mailNickname="Demo"
}
New-MgGroup @param
更新组
若要更新现有组,请使用 Update-MgGroup cmdlet。 在此示例中,我们将更改“Intune 管理员”组的 DisplayName 属性。 首先,我们将使用 Get-MgGroup cmdlet 查找该组,然后使用 DisplayName 属性进行筛选:
PS C:\Windows\system32> Get-MgGroup -Filter "DisplayName eq 'Intune Administrators'"
DeletionTimeStamp :
ObjectId : aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
ObjectType : Group
Description : Intune Administrators
DirSyncEnabled :
DisplayName : Intune Administrators
LastDirSyncTime :
Mail :
MailEnabled : False
MailNickName : 4dd067a0-6515-4f23-968a-cc2ffc2eff5c
OnPremisesSecurityIdentifier :
ProvisioningErrors : {}
ProxyAddresses : {}
SecurityEnabled : True
接下来,我们会将 Description 属性更改为新值“Intune 设备管理员”:
PS C:\Windows\system32> Update-MgGroup -GroupId 958d212c-14b0-43d0-a052-d0c2bb555b8b -Description "Demo Group Updated"
现在,如果我们再次找到该组,我们会看到 Description 属性已更新以反映新值:
PS C:\Windows\system32> Get-MgGroup -GroupId 958d212c-14b0-43d0-a052-d0c2bb555b8b | select displayname, description
DisplayName Description
----------- -----------
DemoGroup Demo Group Updated
删除组
若要从目录中删除组,请使用 Remove-MgGroup cmdlet,如下所示:
PS C:\Windows\system32> Remove-MgGroup -GroupId 958d212c-14b0-43d0-a052-d0c2bb555b8b
管理组成员身份
添加成员
若要向组添加新成员,请使用 New-MgGroupMember cmdlet。 该命令将成员添加到我们在上一示例中使用的“Intune 管理员”组:
PS C:\Windows\system32> New-MgGroupMember -GroupId f76cbbb8-0581-4e01-a0d4-133d3ce9197f -DirectoryObjectId a88762b7-ce17-40e9-b417-0add1848eb68
-GroupId 参数是要将成员添加到的组的 ObjectID,-DirectoryObjectId 是要作为成员添加到组的用户的 ObjectID。
获取成员
若要获取组的现有成员,请使用 Get-MgGroupMember cmdlet,如以下示例所示:
PS C:\Windows\system32> Get-MgGroupMember -GroupId 2c52c779-8587-48c5-9d4a-c474f2a66cf4
Id DeletedDateTime
-- ---------------
aaaaaaaa-bbbb-cccc-1111-222222222222
bbbbbbbb-cccc-dddd-2222-333333333333
移除成员
若要删除之前添加到组的成员,请使用 Remove-MgGroupMember cmdlet,如下所示:
PS C:\Windows\system32> Remove-MgGroupMemberByRef -DirectoryObjectId 00aa00aa-bb11-cc22-dd33-44ee44ee44ee -GroupId 2c52c779-8587-48c5-9d4a-c474f2a66cf4
验证成员
若要验证用户的组成员身份,请使用 Select-MgGroupIdsUserIsMemberOf cmdlet。 该 cmdlet 使用用户的 ObjectId 作为参数,以便检查组成员身份;同时使用组列表作为参数来检查成员身份。 组列表必须以类型为“Microsoft.Open.AzureAD.Model.GroupIdsForMembershipCheck”的复合变量形式提供,因此必须先创建该类型的变量:
Get-MgUserMemberOf -UserId 00aa00aa-bb11-cc22-dd33-44ee44ee44ee
Id DisplayName Description GroupTypes AccessType
-- ----------- ----------- ---------- ----------
5dc16449-3420-4ad5-9634-49cd04eceba0 demogroup demogroup {Unified}
返回的值是该用户所在组的列表。 也可通过 Select-MgGroupIdsContactIsMemberOf、Select-MgGroupIdsGroupIsMemberOf 或 Select-MgGroupIdsServicePrincipalIsMemberOf 应用此方法,来检查特定组列表的联系人、组或服务主体成员身份
禁止用户创建组
可以禁止非管理员用户创建安全组。 Microsoft Online Directory Services (MSODS) 的默认行为是允许非管理员用户创建组,无论是否还启用了自助服务组管理 (SSGM)。 SSGM 设置仅控制“我的组”门户中的行为。
若要对非管理员用户禁用组创建,请执行以下操作:
验证是否允许非管理员用户创建组:
PS C:\> Get-MgBetaDirectorySetting | select -ExpandProperty values Name Value ---- ----- NewUnifiedGroupWritebackDefault true EnableMIPLabels false CustomBlockedWordsList EnableMSStandardBlockedWords false ClassificationDescriptions DefaultClassification PrefixSuffixNamingRequirement AllowGuestsToBeGroupOwner false AllowGuestsToAccessGroups true GuestUsageGuidelinesUrl GroupCreationAllowedGroupId AllowToAddGuests true UsageGuidelinesUrl ClassificationList EnableGroupCreation true
如果它返回
EnableGroupCreation : True
,则非管理员用户可以创建组。 若要禁用此功能,请执行以下操作:Install-Module Microsoft.Graph.Beta.Identity.DirectoryManagement Import-Module Microsoft.Graph.Beta.Identity.DirectoryManagement $params = @{ TemplateId = "62375ab9-6b52-47ed-826b-58e47e0e304b" Values = @( @{ Name = "EnableGroupCreation" Value = "false" } ) } Connect-MgGraph -Environment China -ClientId 'YOUR_CLIENT_ID' -TenantId 'YOUR_TENANT_ID' -Scopes "Directory.ReadWrite.All" New-MgBetaDirectorySetting -BodyParameter $params
管理组的所有者
若要向组添加所有者,请使用 New-MgGroupOwner cmdlet:
PS C:\Windows\system32> New-MgGroupOwner -GroupId 0e48dc96-3bff-4fe1-8939-4cd680163497 -DirectoryObjectId 92a0dad0-7c9e-472f-b2a3-0fe2c9a02867
-GroupId 参数是要将所有者添加到的组的 ObjectID,-DirectoryObjectId 是要作为所有者添加的用户或服务主体的 ObjectID。
若要检索组的所有者,请使用 Get-MgGroupOwner cmdlet:
PS C:\Windows\system32> Get-MgGroupOwner -GroupId 0e48dc96-3bff-4fe1-8939-4cd680163497
该 cmdlet 将返回指定组的所有者(用户和服务主体)的列表:
Id DeletedDateTime
-- ---------------
8ee754e0-743e-4231-ace4-c28d20cf2841
85b1df54-e5c0-4cfd-a20b-8bc1a2ca7865
4451b332-2294-4dcf-a214-6cc805016c50
若需从组中移除所有者,请使用 Remove-MgGroupOwnerByRef cmdlet:
PS C:\Windows\system32> Remove-MgGroupOwnerByRef -GroupId 0e48dc96-3bff-4fe1-8939-4cd680163497 -DirectoryObjectId 92a0dad0-7c9e-472f-b2a3-0fe2c9a02867
保留的别名
创建组后,某些终结点允许最终用户指定一个 mailNickname 或别名,用作组的电子邮件地址的一部分。 仅 Microsoft Entra 全局管理员可以创建具有以下权限较高的电子邮件别名的组。
- abuse
- admin
- 主要区域中的
- hostmaster
- majordomo
- postmaster
- root
- secure
- security
- ssl-admin
- webmaster
组写回到本地
重要
2024 年 6 月 30 日之后,Microsoft Entra Connect Sync 将不再提供组写回 V2 (GWB) 的公共预览版。 此功能将于该日期停止使用,Connect Sync 不再支持将云安全组预配到 Active Directory。 该功能将在停止使用日期之后继续运行;但是,在此日期之后将不再获得支持,并且可能随时停止运行,恕不另行通知。
对于将 Microsoft 365 组预配到 Active Directory 的客户,可以继续使用组写回 v1 实现此功能。
后续步骤
如需更多 Azure Active Directory PowerShell 文档,可参阅 Microsoft Entra Cmdlet。