Asignación de licencias de Microsoft 365 a cuentas de usuario con PowerShell

Este artículo afecta tanto a Office 365 Enterprise como a Microsoft 365 Enterprise

Los usuarios no pueden usar ningún servicio de Microsoft 365 hasta que su cuenta tenga asignada una licencia de un plan de licencias. Puede usar PowerShell para asignar rápidamente licencias a cuentas sin licencia.

Primero se debe asignar una ubicación a las cuentas de usuario. Especificar una ubicación es una parte necesaria de la creación de una nueva cuenta de usuario en el Centro de administración de Microsoft 365.

Las cuentas sincronizadas desde el Active Directory local Servicios de dominio no tienen una ubicación especificada de forma predeterminada. Puede configurar una ubicación para estas cuentas desde:

  • Centro de administración de Microsoft 365
  • PowerShell
  • El Azure Portal (regióno país de información decontacto> de la> cuenta > de usuariode usuarios> de Active Directory>).

Nota:

Obtenga información sobre cómo asignar licencias a cuentas de usuario con el Centro de administración de Microsoft 365. Para obtener una lista de recursos adicionales, consulte Administración de usuarios y grupos.

Asignación de licencias de Microsoft 365 a cuentas de usuario con el SDK de PowerShell de Microsoft Graph

Nota:

El siguiente script usa Microsoft Graph PowerShell. Para obtener más información, consulte Introducción a PowerShell de Microsoft Graph.

Para obtener información sobre cómo usar diferentes métodos para autenticarse Connect-Graph en un script desatendido, consulte el artículo Cmdlets del módulo de autenticación en Microsoft Graph PowerShell.

En primer lugar, conéctese a su inquilino de Microsoft 365.

La asignación y eliminación de licencias para un usuario requiere el ámbito de permisos User.ReadWrite.All o uno de los demás permisos enumerados en la página de referencia de Microsoft Graph API "Asignar licencia".

El ámbito de permisos Organization.Read.All es necesario para leer las licencias disponibles en el inquilino.

Connect-MgGraph -Scopes User.ReadWrite.All, Organization.Read.All

Ejecute el Get-MgSubscribedSku comando para ver los planes de licencias disponibles y el número de licencias disponibles en cada plan de la organización. El número de licencias disponibles en cada plan es ActiveUnits - WarningUnits - ConsumedUnits. Para obtener más información sobre los planes de licencias, las licencias y los servicios, consulte Visualización de licencias y servicios con PowerShell.

Para buscar las cuentas sin licencia en su organización, ejecute este comando.

Get-MgUser -Filter 'assignedLicenses/$count eq 0' -ConsistencyLevel eventual -CountVariable unlicensedUserCount -All

Para buscar los usuarios sincronizados sin licencia de la organización, ejecute este comando.

Get-MgUser -Filter 'assignedLicenses/$count eq 0 and OnPremisesSyncEnabled eq true' -ConsistencyLevel eventual -CountVariable unlicensedUserCount -All -Select UserPrincipalName

Solo puede asignar licencias a cuentas de usuario que tengan la propiedad UsageLocation establecida en un código de país iso 3166-1 alfa-2 válido. Por ejemplo, US para Estados Unidos y FR para Francia. Algunos servicios de Microsoft 365 no están disponibles en determinados países o regiones. Para obtener más información, consulte Sobre las restricciones de licencia.

Para buscar cuentas que no tienen un valor UsageLocation , ejecute este comando.

Get-MgUser -Select Id,DisplayName,Mail,UserPrincipalName,UsageLocation,UserType | where { $_.UsageLocation -eq $null -and $_.UserType -eq 'Member' }

Para establecer el valor UsageLocation en una cuenta, ejecute este comando.

$userUPN="<user sign-in name (UPN)>"
$userLoc="<ISO 3166-1 alpha-2 country code>"

Update-MgUser -UserId $userUPN -UsageLocation $userLoc

Por ejemplo:

Update-MgUser -UserId "belindan@litwareinc.com" -UsageLocation US

Si usa el cmdlet Get-MgUser sin usar el parámetro -All , solo se devuelven las primeras 100 cuentas.

Asignación de licencias a cuentas de usuario

Para asignar una licencia a un usuario, use el siguiente comando en PowerShell.

Set-MgUserLicense -UserId $userUPN -AddLicenses @{SkuId = "<SkuId>"} -RemoveLicenses @()

En este ejemplo se asigna una licencia del plan de licencias de SPE_E5 (Microsoft 365 E5) al usuario belindan@litwareinc.comsin licencia:

$e5Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'SPE_E5'
Set-MgUserLicense -UserId "belindan@litwareinc.com" -AddLicenses @{SkuId = $e5Sku.SkuId} -RemoveLicenses @()

En este ejemplo se asignan SPE_E5 (Microsoft 365 E5) y EMSPREMIUM (ENTERPRISE MOBILITY + SECURITY E5) al usuario 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 @()

En este ejemplo se asignan SPE_E5 (Microsoft 365 E5) con los servicios MICROSOFTBOOKINGS (Microsoft Bookings) y LOCKBOX_ENTERPRISE (Caja de seguridad del cliente) desactivados:

$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 @()

En este ejemplo se actualiza un usuario con SPE_E5 (Microsoft 365 E5) y se desactivan los planes de servicio Sway y Forms al tiempo que se dejan los planes deshabilitados existentes del usuario en su estado actual:

$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 @()

En este ejemplo se actualiza un usuario con SPE_E5 (Microsoft 365 E5) y se desactivan los planes de servicio Sway y Forms al tiempo que se dejan los planes deshabilitados existentes del usuario en todas las demás suscripciones en su estado actual:

$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 @()

Asignar licencias a un usuario copiando la asignación de licencias de otro usuario

En este ejemplo se asigna jamesp@litwareinc.com con el mismo plan de licencias que se ha aplicado a belindan@litwareinc.com:

$mgUser = Get-MgUser -UserId "belindan@litwareinc.com" -Property AssignedLicenses
Set-MgUserLicense -UserId "jamesp@litwareinc.com" -AddLicenses $mgUser.AssignedLicenses -RemoveLicenses @()

Traslado de un usuario a otra suscripción (plan de licencia)

En este ejemplo se actualiza un usuario del plan de licencias de SPE_E3 (Microsoft 365 E3) al plan de licencias de 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 @()

Puede comprobar el cambio en la suscripción de la cuenta de usuario con este comando.

Get-MgUserLicenseDetail -UserId "belindan@litwareinc.com"

Consulte también

Administrar Microsoft 365 con PowerShell

Administrar Microsoft 365 con PowerShell

Introducción al SDK de Microsoft Graph de Powershell

Uso del usuario de Microsoft Graph : assignLicense y subscribedSku API