用于组管理的 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 -Scopes "Group.ReadWrite.All"
该 cmdlet 会提示用户输入访问目录时需要使用的凭据。 在此示例中,我们将使用 karen@drumkit.onmicrosoft.com 访问演示目录。 该 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.onmicrosoft.com
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 -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 -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 -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
组写回到本地
如今,许多组仍在本地 Active Directory 中管理。 为满足将云组同步回本地的要求,现已推出使用 Microsoft Entra 云同步的 Microsoft Entra ID 的组写回功能。
重要
2024 年 6 月 30 日之后,Microsoft Entra Connect Sync 将不再提供组写回 V2 (GWB) 的公共预览版。 此功能将于该日期停止使用,Connect Sync 不再支持将云安全组预配到 Active Directory。 该功能将在停止使用日期之后继续运行;但是,在此日期之后将不再获得支持,并且可能随时停止运行,恕不另行通知。
我们在 Microsoft Entra Cloud Sync 中提供了类似的功能,称为将组预配到 Active Directory,可以用来代替使用组写回 V2 将云安全组预配到 Active Directory。 我们正致力于在 Cloud Sync 中增强此功能,并增强我们在 Cloud Sync 中开发的其他新功能。
在 Connect Sync 中使用此预览功能的客户应将其配置从 Connect Sync 切换到 Cloud Sync。可以选择将所有混合同步移动到 Cloud Sync(如果其支持这种需求)。 还可以并行运行 Cloud Sync,并仅将云安全组预配移动到 Cloud Sync 中的 Active Directory。
对于将 Microsoft 365 组预配到 Active Directory 的客户,可以继续使用组写回 v1 实现此功能。
可以通过使用用户同步向导来评估只移动到 Cloud Sync 的操作。
后续步骤
如需更多 Azure Active Directory PowerShell 文档,可参阅 Microsoft Entra Cmdlet。