如何使用 PowerShell 批量更新 Microsoft 365 组所有者
Microsoft 365 组必须分配有所有者,这意味着如果没有分配所有者,则无法创建新组,无论您是通过 Microsoft Entra 管理中心还是通过 Microsoft Graph PowerShell 创建组,都是如此。
面对用户管理的日常挑战,您可能会发现自己需要更改现有组或多个组的所有者。在这篇文章中,我演示了如何使用 PowerShell 在组中添加和删除组所有者,以及更新组织中所有组的多个组所有者所需的脚本。
如果您尚未使用过 Microsoft Graph PowerShell,请查看以下资源:
- 如何安装 Microsoft Graph PowerShell 模块
- 如何查找 Microsoft Graph PowerShell 的权限
使用 Get-MgGroupOwner 查看当前组所有者
要查看目标组的当前所有者,首先获取并存储目标组的详细信息,使用 Get-MgGroupOwner 提取每个组所有者的 ID,然后循环遍历每个所有者并使用 Get-MgUser cmdlet 输出您的 PowerShell 会话的用户信息。
group = Get-MgGroup -Filter "DisplayName eq 'GROUP_NAME'"
$owners = Get-MgGroupOwner -GroupId $group.Id
Foreach ($owner in $owners){
Get-MgUser -userid $owner.id | Select DisplayName, ID
}另一种有意义地显示每个所有者、避免再次调用 Microsoft Graph 的解决方案是使用已存储在 $owners 变量中的信息(只是隐藏)创建一个报告,如下所示:
$OwnersList = [System.Collections.Generic.List[Object]]::new()
Foreach ($owner in $owners){
$obj = [PSCustomObject][Ordered]@{
"DisplayName" = $owner.AdditionalProperties.displayName
"ID" = $owner.Id
}
$OwnersList.Add($obj)
}
$OwnersList添加新的群组所有者
要将新的组所有者添加到现有组,我们可以使用 New-MgGroupOwner cmdlet。新所有者需要在带有 OData 链接的哈希表中定义,下面我已将新所有者定义为 $owner 变量。确保将OWNER_UPN修改为目标用户的用户名。
$owner = @{
"@odata.id" = "https://graph.microsoft.com/v1.0/users/OWNER_UPN"
}您还需要知道您尝试修改的组的 ID。最简单的方法是使用 Get-MgGroup cmdlet 和 DisplayName 上的筛选器,如下所示。确保将 GROUP_NAME 修改为目标组的名称。
$group = Get-MgGroup -Filter "DisplayName eq 'GROUP_NAME'"一旦您拥有这两条信息,您就可以将新的群组所有者添加到您的群组中。
New-MgGroupOwner -GroupId $group.Id -BodyParameter $owner删除现有群组所有者
要从现有组中删除所有者,您需要使用 Remove-MgGroupOwnerByRef cmdlet。这使我们能够从目标组中删除特定或所有所有者。
与之前类似,首先存储目标群体的信息,以便我们在下一步中使用它。
$group = Get-MgGroup -Filter "DisplayName eq 'GROUP_NAME'"然后使用上述示例之一来查看并存储当前组所有者。对于此示例,我们已将目标组的所有者保存到 $OwnersList 变量中。由于该变量是一个包含所有当前组所有者的数组,因此我们可以使用“数组切片”或方括号从数组中选择特定用户,如下所示:
$OwnersList[0]
or
$OwnersList[1]使用上面的命令评估您需要删除哪个所有者,然后使用以下命令从组中删除该所有者。
Remove-MgGroupOwnerByRef -GroupId $group.Id -DirectoryObjectID $OwnersList[1].Id 添加和替换多个群组所有者
New-MgGroupOwner cmdlet 的限制之一是它需要哈希表形式的请求正文,其中包含键值对。对于哈希表,每个键必须是唯一的,因此哈希表只能包含特定键的单个条目,在本例中是所有者用户对象的 OData 标识符。
例如,如果您需要将租户中所有群组的两个现有群组所有者替换为两个新群组所有者,则需要在他们自己的哈希表并循环添加它们。添加它们后,您将能够循环遍历现有所有者以删除它们,从而替换所有者。
下面的脚本提供了一些逻辑来替换如上所述的所有者。请注意,我使用 Get-MgGroupOwner 来存储组所有者作为第一步,这是因为组需要一个所有者,并且不能在没有分配所有者的情况下留下。这就是为什么我们必须按顺序添加所有者然后删除所有者。
Connect-MgGraph -scope group.readwrite.all
$owner1 = @{
"@odata.id" = "https://graph.microsoft.com/v1.0/users/OWNER1ID"
}
$owner2 = @{
"@odata.id" = "https://graph.microsoft.com/v1.0/users/OWNER2ID"
}
$groups = Get-MgGroup -All
Foreach ($group in $groups){
$owners = $null
$owners = Get-MgGroupOwner -GroupId $group.Id
New-MgGroupOwner -GroupId $group.Id -BodyParameter $owner1
New-MgGroupOwner -GroupId $group.Id -BodyParameter $owner2
Foreach ($owner in $owners) {
Remove-MgGroupOwnerByRef -GroupId $group.Id -DirectoryObjectID $owner.Id
}
}包起来
在现有和活动的 Microsoft 365 组中添加、删除和替换组所有者时涉及许多不同的复杂性。上面的示例演示了执行这些任务的核心功能,但它们并不代表生产就绪的脚本。始终查看别人的代码并修改它以满足您自己的要求。