[玩转系统] 如何在分配给 Entra ID 帐户之前检查许可证
作者:精品下载站 日期:2024-12-14 04:11:21 浏览:15 分类:玩电脑
如何在分配给 Entra ID 帐户之前检查许可证
许可证分配可能会遇到故障
最近关于使用 Microsoft Graph PowerShell SDK 创建 Entra ID 帐户的讨论询问是否可以在同一命令中创建帐户并分配许可证。我找不到办法做到这一点,于是询问了微软。他们确认,New-MgUser cmdlet 在创建新帐户时无法分配许可证。
考虑到这种情况,最好先确认是否存在新帐户,然后再继续将许可证分配给单个帐户或使用批量分配的一批帐户。一开始错误处理会更容易。
一次分配多个许可证
另一种讨论是一次分配多个许可证还是单独分配许可证。例如,您可以通过构建许可证分配数组并将该数组用作 Set-MgUserLicense cmdlet 的输入,将多个产品许可证分配给一个帐户。
为了说明我的意思,此代码创建一个数组,其中包含 Viva、SharePoint-Syntax 高级管理和 Office 365 E3 产品许可证的 SKU 标识符:
$DepartmentSkus = @(
@{SkuId = '61902246-d7cb-453e-85cd-53ee28eec138'},
@{SkuId = '6ee9b90c-0a7a-46c4-bc96-6698aa3bf8d2'},
@{SkuId = '6fd2c87f-b296-42f0-b197-1e91e994b900'}
)
在单个操作中分配许可证集是通过以下方式完成的:
Set-MgUserLicense -UserId $UserId -AddLicenses $DepartmentSKUs -RemoveLicenses @()
如果一切顺利并且所有指定的许可证均可用,则此方法非常有效。同样,如果出现问题,错误处理就会变得更加困难。
检查账户是否已有License
说到错误条件,我想到两个明显的问题:
- 用户帐户已分配有产品许可证。
- 租户没有可供分配的产品的更多许可证。
针对这些条件建立检查很容易。让我们探讨一下如何做。
假设我们想要将一组许可证分配给帐户,我们已经将其加载到数组中。许可证的 SKU 标识符定义如下:
[array]$DesiredSKUs = '6fd2c87f-b296-42f0-b197-1e91e994b900', 'f30db892-07e9-47e9-837c-80727f46fd3d', '1f2f344a-700d-42c9-9427-5cea1d5d7ba6', '6ee9b90c-0a7a-46c4-bc96-6698aa3bf8d2'
要检查用户帐户是否已拥有这些许可证中的任何一个,我们首先使用 Get-MgUserLicenseDetail cmdlet 检索该帐户持有的许可证,然后对照用户的许可证检查集合中的每个许可证。例如:
[array]$AdjustedSKUs = $Null
[array]$CurrentLicenses = Get-MgUserLicenseDetail -UserId $User | Select-Object -ExpandProperty SkuId
ForEach ($Sku in $DesiredSkus) {
If ($Sku -in $CurrentLicenses) {
Write-Host ("SKU {0} is already assigned to {1} so its assignment will be ignored" -f $Sku, $User) -ForegroundColor DarkRed
$LicenseFound = $True
} Else {
$AdjustedSKUs += $Sku
}
} # End Foreach SKU1
如果用户还没有许可证,代码将添加到 $AdjustedSKUs 数组中。然后,该数组作为我们第二次检查的输入,以查看许可证是否可用于分配。
检查许可证可用性
要了解哪些许可证可用,该脚本会获取租户已知的一组产品订阅,并构建一个哈希表,其中包含 SKU 标识符的键和可用许可证数量的值:
[array]$Skus = Get-MgSubscribedSku
$AvailableLicenses = @{}
ForEach ($S in $Skus) {
$AvailableUnits = ($S.PrepaidUnits.Enabled - $S.ConsumedUnits)
$AvailableLicenses.Add([string]$S.SkuId, $AvailableUnits)
}
哈希表如下所示:
Name Value
---- -----
26d45bd9-adf1-46cd-a9e1-51e9a… 2
a403ebcc-fae0-4ca2-8c8c-7a907… 999995
6ee9b90c-0a7a-46c4-bc96-6698a… 0
b05e124f-c7cc-45a0-a6aa-8cf78… -2
SKU 具有负值可能是由于订阅已过期,其中用户帐户仍分配有许可证。但是,这些许可证不再有效,因为它们已过期。我们的代码可以使用哈希表来检查我们想要分配给用户的每个产品的许可证是否可用:
ForEach ($Sku in $AdjustedSkus) {
If ($AvailableLicenses[$Sku] -gt 0) {
$SkusToAssign += $Sku
} Else {
Write-Host ("No licenses are available to assign SKU {0} to user {1}" -f $Sku, $User) -ForegroundColor Red
}
} # End ForEach SKU
充满信心地进行许可证分配
检查可用许可证的输出是一个数组,其中包含脚本可以分配的 SKU 标识符集。我们通过调用Set-MgUserLicense来处理每个分配来做到这一点。为了防止其他分配许可证的尝试因不可用而失败,该脚本包含用于在成功分配后减少哈希表中记录的可用许可证数量的代码。
ForEach ($Sku in $SkusToAssign) {
Write-Host ("Assiging SKU {0} to user {1}" -f $SKU, $User)
Try {
$Status = Set-MgUserLicense -UserId $User -AddLicenses @{SkuId = $SKU} -RemoveLicenses @()
# Remove the assigned license from the available count
$AvailableLicenses[$SKU] = ($AvailableLicenses[$SKU] - 1)
} Catch {
Write-Host ("Whoops - Error assiging SKU {0} to user {1}" -f $SKU, $User)
}
}
图 1 显示了生成的有关脚本所执行操作的报告。
您可以从 GitHub 下载完整的脚本。
删除许可证
我们上面讨论了如何使用单个命令分配多个许可证。您也可以使用单个命令删除多个许可证。最大的区别在于传递的数组仅包含产品标识符而不是哈希表。这是 Microsoft Graph PowerShell SDK 的缺点之一。
此示例演示如何从用户帐户中删除两个产品许可证:
[array]$LicensesToRemove = "f30db892-07e9-47e9-837c-80727f46fd3d", "6fd2c87f-b296-42f0-b197-1e91e994b900"
Set-MgUserLicense -UserId [email protected] -AddLicenses @() -RemoveLicenses $LicensesToRemove
计划许可证分配的成功或失败
做一些准备工作可以使通过 PowerShell 处理的许可证分配更加成功。可能会出现其他故障,例如暂时性网络问题或影响 Entra ID 后端许可证管理问题的问题,但最常见的问题是这里介绍的两个问题。与 Practical365.com 发布的其他示例脚本一样,本文中的代码说明了原理,而不是完整的解决方案。我希望您可以使用此处概述的建议。
Active Directory 的网络安全风险管理
了解如何通过这些网络安全风险管理解决方案预防 AD 攻击并从中恢复。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag