使用 PowerShell 将 Microsoft 365 许可证分配给用户帐户

此文章适用于 Microsoft 365 企业版和 Office 365 企业版。

除非其帐户已分配了许可计划中的许可证,否则用户无法使用任何 Microsoft 365 服务。 可以使用 PowerShell 快速将许可证分配给未授权的帐户。

必须先为用户帐户分配位置。 在Microsoft 365 管理中心中创建新用户帐户时,必须指定位置。

默认情况下,从本地 Active Directory 域服务同步的帐户没有指定位置。 可以从以下位置为这些帐户配置位置:

  • Microsoft 365 管理员中心
  • PowerShell
  • Azure 门户 (Active Directory>用户帐户>>配置文件>联系人信息>国家或地区) 。

使用 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 用户:assignLicensesubscribedSku API