Atribuir licenças do Microsoft 365 a contas de utilizador com o PowerShell

Este artigo aplica-se tanto a Microsoft 365 Enterprise como a Office 365 Enterprise.

Os utilizadores não podem utilizar nenhum serviço do Microsoft 365 até que a respetiva conta tenha sido atribuída uma licença de um plano de licenciamento. Pode utilizar o PowerShell para atribuir rapidamente licenças a contas não licenciadas.

As contas de utilizador têm de ser atribuídas primeiro a uma localização. Especificar uma localização é uma parte necessária da criação de uma nova conta de utilizador no centro de administração do Microsoft 365.

As contas sincronizadas a partir do seu Active Directory no local Domain Services não têm, por predefinição, uma localização especificada. Pode configurar uma localização para estas contas a partir de:

  • A centro de administração do Microsoft 365
  • PowerShell
  • O portal do Azure (Conta de utilizador >utilizador do>Active Directory> Informações deContacto> do Perfil>País ou região).

Nota

Saiba como atribuir licenças a contas de utilizador com o centro de administração do Microsoft 365. Para obter uma lista de recursos adicionais, veja Gerir utilizadores e grupos.

Atribuir licenças do Microsoft 365 a contas de utilizador com o SDK do PowerShell do Microsoft Graph

Nota

O script seguinte utiliza o PowerShell do Microsoft Graph. Para obter mais informações, veja Microsoft Graph PowerShell overview (Descrição geral do PowerShell do Microsoft Graph).

Para obter informações sobre como utilizar métodos diferentes para autenticar Connect-Graph num script sem supervisão, consulte o artigo Cmdlets do módulo de autenticação no Microsoft Graph PowerShell.

Primeiro, ligue-se ao seu inquilino do Microsoft 365.

Atribuir e remover licenças de um utilizador requer o âmbito de permissão User.ReadWrite.All ou uma das outras permissões listadas na página de referência "Atribuir licença" da Microsoft Graph API.

O âmbito de permissão Organization.Read.All é necessário para ler as licenças disponíveis no inquilino.

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

Execute o Get-MgSubscribedSku comando para ver os planos de licenciamento disponíveis e o número de licenças disponíveis em cada plano na 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, veja Ver licenças e serviços com o PowerShell.

Para localizar as contas não licenciadas na sua organização, execute este comando.

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

Para localizar os utilizadores sincronizados não licenciados na sua organização, execute este comando.

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

Só pode atribuir licenças a contas de utilizador que tenham a propriedade UsageLocation definida como um código de país iso 3166-1 alfa-2 válido. Por exemplo, E.U.A. para o Estados Unidos e FR para França. Alguns serviços do Microsoft 365 não estão disponíveis em determinados países/regiões. Para obter mais informações, veja Acerca das restrições de licenças.

Para localizar contas que não tenham um valor UsageLocation , execute este comando.

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

Para definir o valor UsageLocation numa 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 utilizar o cmdlet Get-MgUser sem utilizar o parâmetro -All , só são devolvidas as primeiras 100 contas.

Atribuir licenças a contas de utilizador

Para atribuir uma licença a um utilizador, utilize o seguinte comando no PowerShell.

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

Este exemplo atribui uma licença do plano de licenciamento do SPE_E5 (Microsoft 365 E5) ao utilizador 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 utilizadorbelindan@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 utilizador com SPE_E5 (Microsoft 365 E5) e desativa os planos de serviço Sway e Formulários, deixando os planos desativados existentes do utilizador no 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 utilizador com SPE_E5 (Microsoft 365 E5) e desativa os planos de serviço Sway e Formulários, deixando os planos desativados existentes do utilizador em todas as outras subscrições no 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 utilizador ao copiar a atribuição de licença de outro utilizador

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 utilizador para uma subscrição diferente (plano de licença)

Este exemplo atualiza um utilizador do plano de licenciamento do 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 @()

Pode verificar a alteração na subscrição da conta de utilizador com este comando.

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

Consulte também

Gerir o Microsoft 365 com o PowerShell

Gerir o Microsoft 365 com o PowerShell

Introdução ao SDK do PowerShell do Microsoft Graph

Utilizar o utilizador do Microsoft Graph : atribuir APIsDeSku subscritas e de Subscrição