使用 PowerShell 将 Microsoft 365 许可证分配给用户帐户
此文章适用于 Microsoft 365 企业版和 Office 365 企业版。
除非其帐户已分配了许可计划中的许可证,否则用户无法使用任何 Microsoft 365 服务。 可以使用 PowerShell 快速将许可证分配给未授权的帐户。
必须先为用户帐户分配位置。 在Microsoft 365 管理中心中创建新用户帐户时,必须指定位置。
默认情况下,从本地 Active Directory 域服务同步的帐户没有指定位置。 可以从以下位置为这些帐户配置位置:
- Microsoft 365 管理员中心
- PowerShell
- Azure 门户 (Active Directory>用户帐户>>配置文件>联系人信息>国家或地区) 。
注意
了解如何使用 Microsoft 365 管理中心将许可证分配给用户帐户。 有关其他资源的列表,请参阅 管理用户和组。
使用 Microsoft Graph PowerShell SDK 将 Microsoft 365 许可证分配给用户帐户
注意
以下脚本使用 Microsoft Graph Powershell。 有关详细信息,请参阅 Microsoft Graph PowerShell 概述。
有关如何使用不同的方法在无人参与的脚本中进行身份验证 Connect-Graph
的信息,请参阅 Microsoft Graph PowerShell 中的身份验证模块 cmdlet 一文。
首先, 连接到 Microsoft 365 租户。
为用户分配和删除许可证需要 User.ReadWrite.All 权限范围或“分配许可证”Microsoft 图形 API参考页中列出的其他权限之一。
读取租户中可用的许可证需要 Organization.Read.All 权限范围。
Connect-MgGraph -Scopes User.ReadWrite.All, Organization.Read.All
Get-MgSubscribedSku
运行 命令以查看可用的许可计划以及组织中每个计划中可用的许可证数。 每个计划中的可用许可证数为 ActiveUnits - WarningUnits - ConsumedUnits。 有关许可计划、许可证和服务的详细信息,请参阅 使用 PowerShell 查看许可证和服务。
若要在组织中查找未授权的帐户,请运行以下命令。
Get-MgUser -Filter 'assignedLicenses/$count eq 0' -ConsistencyLevel eventual -CountVariable unlicensedUserCount -All
若要在组织中查找未经许可的同步用户,请运行此命令。
Get-MgUser -Filter 'assignedLicenses/$count eq 0 and OnPremisesSyncEnabled eq true' -ConsistencyLevel eventual -CountVariable unlicensedUserCount -All -Select UserPrincipalName
只能将许可证分配给 将 UsageLocation 属性设置为有效的 ISO 3166-1 alpha-2 国家/地区代码的用户帐户。 例如,US 代表美国,FR 代表法国。 某些 Microsoft 365 服务在某些国家/地区不可用。 有关详细信息,请参阅关于许可证限制。
若要查找没有 UsageLocation 值的帐户,请运行以下命令。
Get-MgUser -Select Id,DisplayName,Mail,UserPrincipalName,UsageLocation,UserType | where { $_.UsageLocation -eq $null -and $_.UserType -eq 'Member' }
若要设置帐户的 UsageLocation 值,请运行此命令。
$userUPN="<user sign-in name (UPN)>"
$userLoc="<ISO 3166-1 alpha-2 country code>"
Update-MgUser -UserId $userUPN -UsageLocation $userLoc
例如:
Update-MgUser -UserId "belindan@litwareinc.com" -UsageLocation US
如果在不使用 -All 参数的情况下使用 Get-MgUser cmdlet,则仅返回前 100 个帐户。
将许可证分配给用户帐户
若要向用户分配许可证,请在 PowerShell 中使用以下命令。
Set-MgUserLicense -UserId $userUPN -AddLicenses @{SkuId = "<SkuId>"} -RemoveLicenses @()
此示例将SPE_E5 (Microsoft 365 E5) 许可计划中的许可证分配给未授权的用户belindan@litwareinc.com:
$e5Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'SPE_E5'
Set-MgUserLicense -UserId "belindan@litwareinc.com" -AddLicenses @{SkuId = $e5Sku.SkuId} -RemoveLicenses @()
此示例向用户分配SPE_E5 (Microsoft 365 E5) 和 EMSPREMIUM (企业移动性 + 安全性 E5) belindan@litwareinc.com:
$e5Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'SPE_E5'
$e5EmsSku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'EMSPREMIUM'
$addLicenses = @(
@{SkuId = $e5Sku.SkuId},
@{SkuId = $e5EmsSku.SkuId}
)
Set-MgUserLicense -UserId "belinda@litwareinc.com" -AddLicenses $addLicenses -RemoveLicenses @()
此示例使用 MICROSOFTBOOKINGS (Microsoft Bookings) 分配SPE_E5 (Microsoft 365 E5) , (客户密码箱) 服务关闭LOCKBOX_ENTERPRISE:
$e5Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'SPE_E5'
$disabledPlans = $e5Sku.ServicePlans | `
Where ServicePlanName -in ("LOCKBOX_ENTERPRISE", "MICROSOFTBOOKINGS") | `
Select -ExpandProperty ServicePlanId
$addLicenses = @(
@{
SkuId = $e5Sku.SkuId
DisabledPlans = $disabledPlans
}
)
Set-MgUserLicense -UserId "belinda@litwareinc.com" -AddLicenses $addLicenses -RemoveLicenses @()
此示例使用SPE_E5 (Microsoft 365 E5) 更新用户,并关闭Sway和窗体服务计划,同时使用户的现有禁用计划保持其当前状态:
$userLicense = Get-MgUserLicenseDetail -UserId "belinda@litwareinc.com"
$userDisabledPlans = $userLicense.ServicePlans | `
Where ProvisioningStatus -eq "Disabled" | `
Select -ExpandProperty ServicePlanId
$e5Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'SPE_E5'
$newDisabledPlans = $e5Sku.ServicePlans | `
Where ServicePlanName -in ("SWAY", "FORMS_PLAN_E5") | `
Select -ExpandProperty ServicePlanId
$disabledPlans = ($userDisabledPlans + $newDisabledPlans) | Select -Unique
$addLicenses = @(
@{
SkuId = $e5Sku.SkuId
DisabledPlans = $disabledPlans
}
)
Set-MgUserLicense -UserId "belinda@litwareinc.com" -AddLicenses $addLicenses -RemoveLicenses @()
此示例使用SPE_E5 (Microsoft 365 E5) 更新用户,并关闭Sway和窗体服务计划,同时将用户的现有禁用计划保留在所有其他订阅中的当前状态:
$userLicense = Get-MgUserLicenseDetail -UserId belinda@litwareinc.com
$userDisabledPlans = $userLicense.ServicePlans | Where-Object ProvisioningStatus -eq "Disabled" | Select -ExpandProperty ServicePlanId
$e5Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'SPE_E5'
$newDisabledPlans = $e5Sku.ServicePlans | Where ServicePlanName -in ("SWAY", "FORMS_PLAN_E5") | Select -ExpandProperty ServicePlanId
$disabledPlans = ($userDisabledPlans + $newDisabledPlans) | Select -Unique
$result=@()
$allPlans = $e5Sku.ServicePlans | Select -ExpandProperty ServicePlanId
foreach($disabledPlan in $disabledPlans)
{
foreach($allPlan in $allPlans)
{
if($disabledPlan -eq $allPlan)
{
$property = @{
Disabled = $disabledPlan
}
}
}
$result += New-Object psobject -Property $property
}
$finalDisabled = $result | Select-Object -ExpandProperty Disabled
$addLicenses = @(
@{
SkuId = $e5Sku.SkuId
DisabledPlans = $finalDisabled
}
)
Set-MgUserLicense -UserId belinda@litwareinc.com -AddLicenses $addLicenses -RemoveLicenses @()
通过复制其他用户的许可证分配,将许可证分配给用户
此示例使用已应用于 的相同许可计划进行belindan@litwareinc.com分配jamesp@litwareinc.com:
$mgUser = Get-MgUser -UserId "belindan@litwareinc.com" -Property AssignedLicenses
Set-MgUserLicense -UserId "jamesp@litwareinc.com" -AddLicenses $mgUser.AssignedLicenses -RemoveLicenses @()
将用户移动到其他订阅 (许可证计划)
此示例将用户从SPE_E3 (Microsoft 365 E3) 许可计划升级到SPE_E5 (Microsoft 365 E5) 许可计划:
$e3Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'SPE_E3'
$e5Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'SPE_E5'
# Unassign E3
Set-MgUserLicense -UserId "belindan@litwareinc.com" -AddLicenses @{} -RemoveLicenses @($e3Sku.SkuId)
# Assign E5
Set-MgUserLicense -UserId "belindan@litwareinc.com" -AddLicenses @{SkuId = $e5Sku.SkuId} -RemoveLicenses @()
可以使用此命令验证用户帐户的订阅更改。
Get-MgUserLicenseDetail -UserId "belindan@litwareinc.com"
另请参阅
使用 PowerShell 管理 Microsoft 365
使用 PowerShell 管理 Microsoft 365
Microsoft Graph PowerShell SDK 入门
使用 Microsoft Graph 用户:assignLicense 和 subscribedSku API