Asignar licencias de 365 de Microsoft a cuentas de usuario con PowerShellAssign Microsoft 365 licenses to user accounts with PowerShell

Este artículo afecta tanto a Office 365 Enterprise como a Microsoft 365 EnterpriseThis article applies to both Microsoft 365 Enterprise and Office 365 Enterprise.

Los usuarios no pueden usar ninguno de los servicios de Microsoft 365 hasta que su cuenta tenga asignada una licencia de un plan de licencias.Users can't use any Microsoft 365 services until their account has been assigned a license from a licensing plan. Puede usar PowerShell para asignar licencias rápidamente a cuentas sin licencia.You can use PowerShell to quickly assign licenses to unlicensed accounts.

Las cuentas de usuario primero deben asignarse a una ubicación.User accounts must first be assigned a location. La especificación de una ubicación es una parte obligatoria de la creación de una nueva cuenta de usuario en el centro de administración de Microsoft 365.Specifying a location is a required part of creating a new user account in the Microsoft 365 admin center.

Las cuentas sincronizadas desde los servicios de dominio de Active Directory local no tienen una ubicación especificada de forma predeterminada.Accounts synchronized from your on-premises Active Directory Domain Services do not by default have a location specified. Puede configurar una ubicación para estas cuentas desde:You can configure a location for these accounts from:

  • Centro de administración de Microsoft 365The Microsoft 365 admin center
  • PowerShellPowerShell
  • El portal de Azure (usuarios deActiveDirectory > Users > cuenta de usuario > perfil > información > de contacto país o región).The Azure portal (Active Directory > Users > user account > Profile > Contact info > Country or region).

Nota

Obtenga información sobre cómo asignar licencias a cuentas de usuario con el centro de administración de Microsoft 365.Learn how to assign licenses to user accounts with the Microsoft 365 admin center. Para obtener una lista de recursos adicionales, consulte Manage Users and Groups.For a list of additional resources, see Manage users and groups.

Use el módulo de PowerShell Azure Active Directory para GraphUse the Azure Active Directory PowerShell for Graph module

En primer lugar, Conéctese a su inquilino de Microsoft 365.First, connect to your Microsoft 365 tenant.

A continuación, enumere los planes de licencia para el inquilino con este comando.Next, list the license plans for your tenant with this command.

Get-AzureADSubscribedSku | Select SkuPartNumber

A continuación, obtenga el nombre de inicio de sesión de la cuenta a la que desea agregar una licencia, también conocida como nombre principal de usuario (UPN).Next, get the sign-in name of the account to which you want add a license, also known as the user principal name (UPN).

A continuación, asegúrese de que la cuenta de usuario tiene asignada una ubicación de uso.Next, ensure that the user account has a usage location assigned.

Get-AzureADUser -ObjectID <user sign-in name (UPN)> | Select DisplayName, UsageLocation

Si no hay ninguna ubicación de uso asignada, puede asignar una con estos comandos:If there is no usage location assigned, you can assign one with these commands:

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

Por último, especifique el nombre de inicio de sesión del usuario y el nombre del plan de licencia y ejecute estos comandos.Finally, specify the user sign-in name and license plan name and run these commands.

$userUPN="<user sign-in name (UPN)>"
$planName="<license plan name from the list of license plans>"
$License = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
$License.SkuId = (Get-AzureADSubscribedSku | Where-Object -Property SkuPartNumber -Value $planName -EQ).SkuID
$LicensesToAssign = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$LicensesToAssign.AddLicenses = $License
Set-AzureADUserLicense -ObjectId $userUPN -AssignedLicenses $LicensesToAssign

Use el Módulo Microsoft Azure Active Directory para Windows PowerShellUse the Microsoft Azure Active Directory Module for Windows PowerShell

En primer lugar, Conéctese a su inquilino de Microsoft 365.First, connect to your Microsoft 365 tenant.

Ejecute el Get-MsolAccountSku comando para ver los planes de licencias disponibles y el número de licencias disponibles en cada plan de la organización.Run the Get-MsolAccountSku command to view the available licensing plans and the number of available licenses in each plan in your organization. El número de licencias disponibles en cada plan es ActiveUnits - WarningUnits - ConsumedUnits.The number of available licenses in each plan is ActiveUnits - WarningUnits - ConsumedUnits. Para obtener más información acerca de los planes de licencias, las licencias y los servicios, consulte ver licencias y servicios con PowerShell.For more information about licensing plans, licenses, and services, see View licenses and services with PowerShell.

Nota

PowerShell Core no es compatible con el Módulo Microsoft Azure Active Directory para Windows PowerShell ni los cmdlet que llevan Msol en su nombre.PowerShell Core does not support the Microsoft Azure Active Directory Module for Windows PowerShell module and cmdlets with Msol in their name. Para seguir usando estos cmdlets, debe ejecutarlos desde Windows PowerShell.To continue using these cmdlets, you must run them from Windows PowerShell.

Para buscar las cuentas sin licencia de la organización, ejecute este comando.To find the unlicensed accounts in your organization, run this command.

Get-MsolUser -All -UnlicensedUsersOnly

Solo se pueden asignar licencias a cuentas de usuario que tengan la propiedad UsageLocation establecida en un código de país ISO 3166-1 alpha-2 válido.You can only assign licenses to user accounts that have the UsageLocation property set to a valid ISO 3166-1 alpha-2 country code. Por ejemplo, US para Estados Unidos y FR para Francia.For example, US for the United States, and FR for France. Algunos servicios de Microsoft 365 no están disponibles en determinados países.Some Microsoft 365 services aren't available in certain countries. Para obtener más información, consulte Sobre las restricciones de licencia.For more information, see About license restrictions.

Para buscar las cuentas que no tienen un valor UsageLocation , ejecute este comando.To find accounts that don't have a UsageLocation value, run this command.

Get-MsolUser -All | where {$_.UsageLocation -eq $null}

Para establecer el valor UsageLocation en una cuenta, ejecute este comando.To set the UsageLocation value on an account, run this command.

Set-MsolUser -UserPrincipalName "<Account>" -UsageLocation <CountryCode>

Por ejemplo:For example:

Set-MsolUser -UserPrincipalName "belindan@litwareinc.com" -UsageLocation US

Si usa el cmdlet Get-MsolUser sin usar el parámetro All, solo se devuelven las 500 primeras cuentas.If you use the Get-MsolUser cmdlet without using the -All parameter, only the first 500 accounts are returned.

Asignar licencias a cuentas de usuarioAssigning licenses to user accounts

Para asignar una licencia a un usuario, use el siguiente comando en PowerShell.To assign a license to a user, use the following command in PowerShell.

Set-MsolUserLicense -UserPrincipalName "<Account>" -AddLicenses "<AccountSkuId>"

En este ejemplo se asigna una licencia desde el plan de licencias litwareinc: ENTERPRISEPACK (Office 365 Enterprise E3) al usuario sin licencia ** @ litwareinc.com**:This example assigns a license from the litwareinc:ENTERPRISEPACK (Office 365 Enterprise E3) licensing plan to the unlicensed user belindan@litwareinc.com:

Set-MsolUserLicense -UserPrincipalName "belindan@litwareinc.com" -AddLicenses "litwareinc:ENTERPRISEPACK"

Para asignar una licencia a todos los usuarios sin licencia, ejecute este comando.To assign a license to all unlicensed users, run this command.

Get-MsolUser -All -UnlicensedUsersOnly [<FilterableAttributes>] | Set-MsolUserLicense -AddLicenses "<AccountSkuId>"

Nota

No se pueden asignar varias licencias a un usuario desde el mismo plan de licencias.You can't assign multiple licenses to a user from the same licensing plan. Si no dispone de licencias suficientes, las licencias se asignan a los usuarios en el orden en que los devuelve el cmdlet Get-MsolUser hasta que se agoten las licencias disponibles.If you don't have enough available licenses, the licenses are assigned to users in the order that they're returned by the Get-MsolUser cmdlet until the available licenses run out.

En este ejemplo se asignan licencias desde el plan de licencias litwareinc: ENTERPRISEPACK (Office 365 Enterprise E3) a todos los usuarios sin licencia:This example assigns licenses from the litwareinc:ENTERPRISEPACK (Office 365 Enterprise E3) licensing plan to all unlicensed users:

Get-MsolUser -All -UnlicensedUsersOnly | Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"

En este ejemplo se asignan las mismas licencias a los usuarios sin licencia del Departamento de ventas de Estados Unidos:This example assigns those same licenses to unlicensed users in the Sales department in the United States:

Get-MsolUser -All -Department "Sales" -UsageLocation "US" -UnlicensedUsersOnly | Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"

Mover un usuario a una suscripción diferente (plan de licencia) con el módulo Azure Active Directory PowerShell para GraphMove a user to a different subscription (license plan) with the Azure Active Directory PowerShell for Graph module

En primer lugar, Conéctese a su inquilino de Microsoft 365.First, connect to your Microsoft 365 tenant.

A continuación, obtenga el nombre de inicio de sesión de la cuenta de usuario para la que desea cambiar las suscripciones, también conocido como nombre principal de usuario (UPN).Next, get the sign-in name of the user account for which you want switch subscriptions, also known as the user principal name (UPN).

A continuación, enumere las suscripciones (planes de licencia) para el inquilino con este comando.Next, list the subscriptions (license plans) for your tenant with this command.

Get-AzureADSubscribedSku | Select SkuPartNumber

A continuación, enumere las suscripciones que la cuenta de usuario tiene actualmente con estos comandos.Next, list the subscriptions that the user account currently has with these commands.

$userUPN="<user account UPN>"
$licensePlanList = Get-AzureADSubscribedSku
$userList = Get-AzureADUser -ObjectID $userUPN | Select -ExpandProperty AssignedLicenses | Select SkuID 
$userList | ForEach { $sku=$_.SkuId ; $licensePlanList | ForEach { If ( $sku -eq $_.ObjectId.substring($_.ObjectId.length - 36, 36) ) { Write-Host $_.SkuPartNumber } } }

Identifique la suscripción que el usuario tiene actualmente (la suscripción de) y la suscripción a la que está moviendo el usuario (la suscripción a).Identify the subscription the user currently has (the FROM subscription) and the subscription to which the user is moving (the TO subscription).

Por último, especifique los nombres de suscripción para y de (números de parte de SKU) y ejecute estos comandos.Finally, specify the TO and FROM subscription names (SKU part numbers) and run these commands.

$subscriptionFrom="<SKU part number of the current subscription>"
$subscriptionTo="<SKU part number of the new subscription>"
# Unassign
$license = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
$licenses = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$license.SkuId = (Get-AzureADSubscribedSku | Where-Object -Property SkuPartNumber -Value $subscriptionFrom -EQ).SkuID
$licenses.AddLicenses = $license
Set-AzureADUserLicense -ObjectId $userUPN -AssignedLicenses $licenses
$licenses.AddLicenses = @()
$licenses.RemoveLicenses =  (Get-AzureADSubscribedSku | Where-Object -Property SkuPartNumber -Value $subscriptionFrom -EQ).SkuID
Set-AzureADUserLicense -ObjectId $userUPN -AssignedLicenses $licenses
# Assign
$license.SkuId = (Get-AzureADSubscribedSku | Where-Object -Property SkuPartNumber -Value $subscriptionTo -EQ).SkuID
$licenses = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$licenses.AddLicenses = $License
Set-AzureADUserLicense -ObjectId $userUPN -AssignedLicenses $licenses

Puede comprobar el cambio de suscripción de la cuenta de usuario con estos comandos.You can verify the change in subscription for the user account with these commands.

$licensePlanList = Get-AzureADSubscribedSku
$userList = Get-AzureADUser -ObjectID $userUPN | Select -ExpandProperty AssignedLicenses | Select SkuID 
$userList | ForEach { $sku=$_.SkuId ; $licensePlanList | ForEach { If ( $sku -eq $_.ObjectId.substring($_.ObjectId.length - 36, 36) ) { Write-Host $_.SkuPartNumber } } }

Consulte tambiénSee also

Administrar cuentas de usuario, licencias y grupos con PowerShellManage user accounts, licenses, and groups with PowerShell

Administrar Microsoft 365 con PowerShellManage Microsoft 365 with PowerShell

Introducción a PowerShell para Microsoft 365Getting started with PowerShell for Microsoft 365