当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何切换 Entra ID 帐户的 Microsoft 365 许可证

作者:精品下载站 日期:2024-12-14 04:12:18 浏览:13 分类:玩电脑

如何切换 Entra ID 帐户的 Microsoft 365 许可证


切换 Microsoft 365 许可证,同时保留服务计划集

在阅读有关使用 Microsoft Graph PowerShell SDK 进行许可证管理的文章后,一位读者询问了在保持服务连续性的同时为 Entra ID 帐户切换 Microsoft 365 许可证的最佳方法(这是完整的问题)。这里的问题是,需要处理的每个帐户许可证可能有一组不同的禁用服务计划。手动切换一两个许可证很容易;快速切换数百个变得非常无聊。那时,通过 PowerShell 进行的自动化将成为租户管理员的宝贵工具。

该练习涉及将用户许可证从 Exchange Online 计划 2 切换到 Microsoft 365 E3。我预计,对于拥有 Office 365 E3 或 Office 365 E5 许可证的租户来说,如果他们发现自己必须升级到 Microsoft 365 E3 或 Microsoft 365 E5 才有资格使用 Microsoft 365 Copilot,则会出现此要求。许可证升级必须先进行,然后租户才能继续购买至少 300 个 Copilot 席位并决定谁获得昂贵的每月 30 美元的 Copilot 许可证。

基于组的许可是自动化许可证分配的良好解决方案。管理员可以通过禁用功能来自定义许可证配置。我们在这里探索的是通过删除旧许可证并将其替换为新许可证来编写许可证切换脚本。租户可能决定采用这种方法来完全控制许可证分配的流程。

关于服务计划的一切

通常,在升级许可证时维护用户可用的功能集是没有问题的。较高级别的许可证总是比较低级别的许可证提供更多的功能。 Microsoft 通过服务计划控制功能可用性。服务计划决定其控制的功能是启用还是禁用。例如,如果租户不想使用 Viva Engage (Yammer),则应在分配给用户帐户的许可证中禁用 Viva Engage Core 服务计划。租户经常禁用 Microsoft 仍然捆绑的过时服务计划,例如 StaffHub、Sway 和 Kaizala。图 1 显示了具有 Office 365 E3 许可证且具有两个禁用服务计划的帐户。

[玩转系统] 如何切换 Entra ID 帐户的 Microsoft 365 许可证

任务是确保分配给用户帐户的升级许可证保持相同的功能。换句话说,如果某个服务计划在旧许可证中被禁用,那么它也应该在新许可证中被禁用。

AssignedLicenses属性存储用户帐户的许可证信息。为许可证保留的信息包括一组残疾人服务计划。例如,此输出显示 Microsoft 365 E5 许可证存在四个已禁用的服务计划。

$User = Get-MgUser -UserId [email protected] -Property AssignedLicenses

$User.Assignedlicenses | fl

DisabledPlans        : {0d0c0d31-fae7-41f2-b909-eaf4d7f26dba, 0898bdbb-73b0-471a-81e5-20f1fe4dd66e, 8c7d2df8-86f0-4902-b2ed-a0458298f3b3, 7547a3fe-08ee-4ccb-b430-5077c5041653…}
SkuId                : 06ebc4ee-1bb5-47dd-8120-11324bc54e06

记住产品和服务计划 GUID 并不是一件容易的事。您可以下载 CSV 文件,其中包含有关产品和服务计划的 GUID 以及关联名称的信息。 Microsoft 会定期刷新 CSV 文件,并且可以将 CSV 中的信息读取到数组中,以便可以在 PowerShell 脚本中访问数据。

您可以采用一组已禁用的服务计划并在分配新产品许可证时使用它。如果新许可证支持与旧许可证相同的服务计划,这将起作用。不幸的是,事实并非如此。例如,针对待办事项、表单和 Exchange Online 等应用程序存在不同版本的服务计划。为了确保一组已禁用的服务计划延续到新许可证,您必须计算出旧许可证中已禁用计划的等效值,并在分配新许可证时使用这些值。

构建用于切换 Microsoft 365 许可证的脚本

为了弄清楚切换用户帐户许可证所需的步骤,我决定编写一个脚本来将帐户从 Office 365 E3 许可证升级到 Microsoft 365 许可证。代码:

  • 检索租户的订阅集(购买的产品)。
  • 导入Microsoft 发布的产品和服务计划信息。
  • 为租户和服务计划中使用的产品构建哈希表。这些哈希表用于快速查找,以将 GUID 解析为产品和服务计划名称。
  • 在新旧许可证中构建服务计划数组,并使用此数据找出匹配的服务计划 GUID,以确保禁用的功能得以延续。输出是一个数组,脚本可以检查旧许可证中是否有已禁用的服务计划,以找出分配新许可证时要使用的正确值。该脚本对数组进行了进一步更改以添加 Kaizala 条目,因为两个许可证(KAIZALA_O365_P3 和 KAIZALA_STANDALONE)中的服务计划名称完全不同。
  • 查找具有 Office 365 E3 许可证的用户帐户集。
  • 构建帐户和禁用服务计划信息的列表。列表中的条目如下所示:
UserId        : 96155a51-6885-4c8f-a8b6-e1614af08675
DisplayName   : John James
SkuId         : 6fd2c87f-b296-42f0-b197-1e91e994b900
DisabledPlans : {aebd3021-9f8f-4bf8-bbe3-0ed2f4f047a1, 7547a3fe-08ee-4ccb-b430-5077c5041653}
  • 循环遍历列表。对于每个帐户,找出新许可证的禁用服务计划集,然后运行 Set-MgUserLicense cmdlet 将新许可证添加到帐户。如果许可证分配成功,单独的 Set-MgUserLicense 命令将删除旧许可证。尽管 Exchange Online 等应用程序支持“许可证堆叠”,但只有在确定有替换许可证时才删除许可证会更安全。以下是添加新许可证和删除旧许可证的代码。您可以看到禁用的服务计划集作为数组传递到 DisabledPlans 参数中:
$Status = Set-MgUserLicense -UserId $User.UserId -AddLicenses @{SkuId = $NewSKU; DisabledPlans = $DisabledServicePlansToUse} `
        -RemoveLicenses @() -ErrorAction SilentlyContinue
If (!($Status)) {
    Write-Host "Error assigning license - please check availability" -ForegroundColor Red
} Else {
    Write-Host ("{0} license assigned to account {1}" -f ($TenantSkuHash[$NewSKU]), $User.DisplayName )
    # Now to remove the old license
    $Status = Set-MgUserLicense -UserId $User.UserId -AddLicenses @() -RemoveLicenses $OriginalSku -ErrorAction SilentlyContinue
    If ($Status) {
        Write-Host ("{0} license removed from account {1}" -f ($TenantSkuHash[$OriginalSKU]), $User.DisplayName )
    }
}

您可以从 GitHub 下载该脚本。与往常一样,需要注意的是,尽管代码可以工作,但它还不能用于生产。需要进行一些额外的测试,可能还需要进行一些开发,以确保代码安全并使其可以在您的租户中使用。例如,考虑在继续分配许可证之前添加检查以确保许可证可用。但代码是简单的 PowerShell,应该很容易理解。

解决方案的多种途径

使用 PowerShell 自动化 Microsoft 365 中的管理活动的优势在于其灵活性和提供的控制程度。当有现成的软件可用时,没有理由总是选择 PowerShell。基于组的许可可能会处理您将遇到的许多许可证分配场景。但是,如果基于组的许可无法满足您的要求,那么很高兴知道总有 PowerShell。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯