Atribuir licenças do Microsoft 365 a contas de usuário com o PowerShell
Esse artigo se aplica ao Microsoft 365 Enterprise e ao Office 365 Enterprise.
Os usuários não podem usar nenhum serviço do Microsoft 365 até que sua conta tenha recebido uma licença de um plano de licenciamento. Você pode usar o PowerShell para atribuir rapidamente licenças a contas não licenciados.
As contas de usuário devem primeiro ser atribuídas a um local. Especificar um local é uma parte necessária da criação de uma nova conta de usuário no Centro de administração do Microsoft 365.
Contas sincronizadas do seu Active Directory local Os Serviços de Domínio não têm, por padrão, um local especificado. Você pode configurar um local para essas contas de:
- O Centro de administração do Microsoft 365
- PowerShell
- O portal do Azure (conta deusuários da conta >de usuário do>Active Directory> Profile >Contact info>País ou região).
Observação
Saiba como atribuir licenças a contas de usuário com o Centro de administração do Microsoft 365. Para obter uma lista de recursos adicionais, consulte Gerenciar usuários e grupos.
Usar o SDK do Microsoft Graph PowerShell
Primeiro, conecte-se ao locatário do Microsoft 365.
Atribuir e remover licenças para um usuário requer o escopo de permissão User.ReadWrite.All ou uma das outras permissões listadas na página de referência "Atribuir licença" do Microsoft API do Graph.
O escopo de permissão Organization.Read.All é necessário para ler as licenças disponíveis no locatário.
Connect-MgGraph -Scopes User.ReadWrite.All, Organization.Read.All
Execute o Get-MgSubscribedSku
comando para exibir os planos de licenciamento disponíveis e o número de licenças disponíveis em cada plano em sua organização. O número de licenças disponíveis em cada plano é ActiveUnits - WarningUnits - ConsumedUnits. Para obter mais informações sobre planos de licenciamento, licenças e serviços, confira Exibir licenças e serviços com o PowerShell.
Para localizar as contas não habilitadas em sua organização, execute este comando.
Get-MgUser -Filter 'assignedLicenses/$count eq 0' -ConsistencyLevel eventual -CountVariable unlicensedUserCount -All
Para localizar os usuários sincronizados não autorizados em sua organização, execute este comando.
Get-MgUser -Filter 'assignedLicenses/$count eq 0 and OnPremisesSyncEnabled eq true' -ConsistencyLevel eventual -CountVariable unlicensedUserCount -All -Select UserPrincipalName
Você só pode atribuir licenças a contas de usuário que têm a propriedade UseLocation definida como um código de país iso 3166-1 alfa-2 válido. Por exemplo, US para os Estados Unidos e FR para a França. Alguns serviços do Microsoft 365 não estão disponíveis em determinados países. Para obter mais informações, consulte Sobre restrições de licença.
Para localizar contas que não têm um valor UseLocation , execute este comando.
Get-MgUser -Select Id,DisplayName,Mail,UserPrincipalName,UsageLocation,UserType | where { $_.UsageLocation -eq $null -and $_.UserType -eq 'Member' }
Para definir o valor UseLocation em uma conta, execute este comando.
$userUPN="<user sign-in name (UPN)>"
$userLoc="<ISO 3166-1 alpha-2 country code>"
Update-MgUser -UserId $userUPN -UsageLocation $userLoc
Por exemplo:
Update-MgUser -UserId "belindan@litwareinc.com" -UsageLocation US
Se você usar o cmdlet Get-MgUser sem usar o parâmetro -All , somente as primeiras 100 contas serão retornadas.
Atribuir licenças a contas de usuário
Para atribuir uma licença a um usuário, use o comando a seguir no PowerShell.
Set-MgUserLicense -UserId $userUPN -AddLicenses @{SkuId = "<SkuId>"} -RemoveLicenses @()
Este exemplo atribui uma licença do plano de licenciamento SPE_E5 (Microsoft 365 E5) ao usuário belindan@litwareinc.comnão licenciado :
$e5Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'SPE_E5'
Set-MgUserLicense -UserId "belindan@litwareinc.com" -AddLicenses @{SkuId = $e5Sku.SkuId} -RemoveLicenses @()
Este exemplo atribui SPE_E5 (Microsoft 365 E5) e EMSPREMIUM (ENTERPRISE MOBILITY + SECURITY E5) ao usuário 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 @()
Este exemplo atribui SPE_E5 (Microsoft 365 E5) com os serviços MICROSOFTBOOKINGS (Microsoft Bookings) e LOCKBOX_ENTERPRISE (Customer Lockbox) desativados:
$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 @()
Este exemplo atualiza um usuário com SPE_E5 (Microsoft 365 E5) e desativa os planos de serviço Sway e Forms, deixando os planos desabilitados existentes do usuário em seu estado atual:
$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 @()
Este exemplo atualiza um usuário com SPE_E5 (Microsoft 365 E5) e desativa os planos de serviço Sway e Forms, deixando os planos desabilitados existentes do usuário em todas as outras assinaturas em seu estado atual:
$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 @()
Atribuir licenças a um usuário copiando a atribuição de licença de outro usuário
Este exemplo atribui jamesp@litwareinc.com com o mesmo plano de licenciamento que foi aplicado a belindan@litwareinc.com:
$mgUser = Get-MgUser -UserId "belindan@litwareinc.com" -Property AssignedLicenses
Set-MgUserLicense -UserId "jamesp@litwareinc.com" -AddLicenses $mgUser.AssignedLicenses -RemoveLicenses @()
Mover um usuário para uma assinatura diferente (plano de licença)
Este exemplo atualiza um usuário do plano de licenciamento SPE_E3 (Microsoft 365 E3) para o plano de licenciamento 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 @()
Você pode verificar a alteração na assinatura da conta de usuário com este comando.
Get-MgUserLicenseDetail -UserId "belindan@litwareinc.com"
Use o PowerShell do Azure Active Directory para o módulo do gráfico
Observação
O cmdlet Set-AzureADUserLicense está programado para ser desativado. Migre seus scripts para o cmdlet Set-MgUserLicense do SDK do Microsoft Graph, conforme descrito acima. Para obter mais informações, consulte Migrar seus aplicativos para acessar as APIs de gerenciamento de licença do Microsoft Graph.
Primeiro, conecte-se ao locatário do Microsoft 365.
Em seguida, liste os planos de licença para seu locatário com este comando.
Get-AzureADSubscribedSku | Select SkuPartNumber
Em seguida, obtenha o nome de entrada da conta à qual você deseja adicionar uma licença, também conhecida como UPN (nome da entidade de usuário).
Em seguida, verifique se a conta de usuário tem um local de uso atribuído.
Get-AzureADUser -ObjectID <user sign-in name (UPN)> | Select DisplayName, UsageLocation
Se não houver nenhum local de uso atribuído, você poderá atribuir um com esses comandos:
$userUPN="<user sign-in name (UPN)>"
$userLoc="<ISO 3166-1 alpha-2 country code>"
Set-AzureADUser -ObjectID $userUPN -UsageLocation $userLoc
Por fim, especifique o nome de entrada do usuário e o nome do plano de licença e execute esses comandos.
$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 o Módulo Microsoft Azure Active Directory para Windows PowerShell.
Observação
Os cmdlets Set-MsolUserLicense e New-MsolUser (-LicenseAssignment) estão programados para serem retirados. Migre seus scripts para o cmdlet Set-MgUserLicense do SDK do Microsoft Graph, conforme descrito acima. Para obter mais informações, consulte Migrar seus aplicativos para acessar as APIs de gerenciamento de licença do Microsoft Graph.
Primeiro, conecte-se ao locatário do Microsoft 365.
Execute o Get-MsolAccountSku
comando para exibir os planos de licenciamento disponíveis e o número de licenças disponíveis em cada plano em sua organização. O número de licenças disponíveis em cada plano é ActiveUnits - WarningUnits - ConsumedUnits. Para obter mais informações sobre planos de licenciamento, licenças e serviços, confira Exibir licenças e serviços com o PowerShell.
Observação
O PowerShell Core não é compatível com o módulo do Microsoft Azure Active Directory para módulo e cmdlets do Windows PowerShell com MSol no nome. Para continuar usando esses cmdlets, você deve executá-los a partir do Windows PowerShell.
Para localizar as contas não habilitadas em sua organização, execute este comando.
Get-MsolUser -All -UnlicensedUsersOnly
Você só pode atribuir licenças a contas de usuário que têm a propriedade UseLocation definida como um código de país iso 3166-1 alfa-2 válido. Por exemplo, US para os Estados Unidos e FR para a França. Alguns serviços do Microsoft 365 não estão disponíveis em determinados países. Para obter mais informações, consulte Sobre restrições de licença.
Para localizar contas que não têm um valor UseLocation , execute este comando.
Get-MsolUser -All | where {$_.UsageLocation -eq $null}
Para definir o valor UseLocation em uma conta, execute este comando.
Set-MsolUser -UserPrincipalName "<Account>" -UsageLocation <CountryCode>
Por exemplo:
Set-MsolUser -UserPrincipalName "belindan@litwareinc.com" -UsageLocation US
Se você usar o cmdlet Get-MsolUser sem usar o parâmetro -All, somente as primeiras 500 contas serão retornadas.
Atribuir licenças a contas de usuário
Para atribuir uma licença a um usuário, use o comando a seguir no PowerShell.
Set-MsolUserLicense -UserPrincipalName "<Account>" -AddLicenses "<AccountSkuId>"
Este exemplo atribui uma licença do plano de licenciamento litwareinc:ENTERPRISEPACK (Office 365 Enterprise E3) ao usuário belindan@litwareinc.comnão licenciado :
Set-MsolUserLicense -UserPrincipalName "belindan@litwareinc.com" -AddLicenses "litwareinc:ENTERPRISEPACK"
Para atribuir uma licença a todos os usuários não licenciados, execute este comando.
Get-MsolUser -All -UnlicensedUsersOnly [<FilterableAttributes>] | Set-MsolUserLicense -AddLicenses "<AccountSkuId>"
Observação
Você não pode atribuir várias licenças a um usuário do mesmo plano de licenciamento. Se você não tiver licenças o suficiente disponíveis, as licenças serão atribuídas aos usuários na ordem em que eles forem retornados pelo cmdlet Get-MsolUser até que as licenças disponíveis esgotem.
Este exemplo atribui licenças do plano de licenciamento litwareinc:ENTERPRISEPACK (Office 365 Enterprise E3) a todos os usuários não licenciados:
Get-MsolUser -All -UnlicensedUsersOnly | Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"
Este exemplo atribui essas mesmas licenças a usuários não licenciados no departamento de Vendas no Estados Unidos:
Get-MsolUser -All -Department "Sales" -UsageLocation "US" -UnlicensedUsersOnly | Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"
Mover um usuário para uma assinatura diferente (plano de licença) com o módulo do PowerShell do Azure Active Directory para Graph
Primeiro, conecte-se ao locatário do Microsoft 365.
Em seguida, obtenha o nome de entrada da conta de usuário para a qual você deseja alternar assinaturas, também conhecida como UPN (nome da entidade de usuário).
Em seguida, liste as assinaturas (planos de licença) para seu locatário com este comando.
Get-AzureADSubscribedSku | Select SkuPartNumber
Em seguida, liste as assinaturas que a conta de usuário tem atualmente com esses comandos.
$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 a assinatura que o usuário tem atualmente (a assinatura FROM) e a assinatura para a qual o usuário está se movendo (a assinatura TO).
Por fim, especifique os nomes de assinatura TO e FROM (números de parte do SKU) e execute esses comandos.
$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
$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
Você pode verificar a alteração na assinatura da conta de usuário com esses comandos.
$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 } } }
Confira também
Gerenciar contas de usuário, licenças e grupos com o PowerShell
Gerenciar o Microsoft 365 com o PowerShell
Introdução ao PowerShell para o Microsoft 365
Usar o usuário do Microsoft Graph: atribuir APIs Desatribuídas e deSku