Assegnare licenze di Microsoft 365 agli account utente con PowerShellAssign Microsoft 365 licenses to user accounts with PowerShell

Questo articolo può essere applicato sia a Microsoft 365 Enterprise che a Office 365 Enterprise.This article applies to both Microsoft 365 Enterprise and Office 365 Enterprise.

Gli utenti non possono utilizzare alcun servizio di Microsoft 365 finché all'account non viene assegnata una licenza da un piano di licenze.Users can't use any Microsoft 365 services until their account has been assigned a license from a licensing plan. È possibile usare PowerShell per assegnare rapidamente le licenze agli account senza licenza.You can use PowerShell to quickly assign licenses to unlicensed accounts.

Agli account utente deve prima essere assegnata una posizione.User accounts must first be assigned a location. La specifica di una posizione è una parte obbligatoria della creazione di un nuovo account utente nell'interfaccia di amministrazione di Microsoft 365.Specifying a location is a required part of creating a new user account in the Microsoft 365 admin center.

Per impostazione predefinita, agli account sincronizzati da Servizi di dominio Active Directory locale non è stato specificato un percorso.Accounts synchronized from your on-premises Active Directory Domain Services do not by default have a location specified. È possibile configurare un percorso per questi account da:You can configure a location for these accounts from:

  • L'interfaccia di amministrazione di Microsoft 365The Microsoft 365 admin center
  • PowerShellPowerShell
  • Il portale di Azure ( Utenti di Active Directory > > account utente > profilo > Informazioni contatto Paese o area > geografica).The Azure portal (Active Directory > Users > user account > Profile > Contact info > Country or region).

Nota

Informazioni su come assegnare licenze agli account utente con l'interfaccia di amministrazione di Microsoft 365.Learn how to assign licenses to user accounts with the Microsoft 365 admin center. Per un elenco delle risorse aggiuntive, vedere Manage users and groups.For a list of additional resources, see Manage users and groups.

Usare il modulo di Azure Active Directory PowerShell per GraphUse the Azure Active Directory PowerShell for Graph module

Innanzitutto, connettersi al tenant di Microsoft 365.First, connect to your Microsoft 365 tenant.

Successivamente, elencare i piani di licenza per il tenant con questo comando.Next, list the license plans for your tenant with this command.

Get-AzureADSubscribedSku | Select SkuPartNumber

Successivamente, ottenere il nome di accesso dell'account a cui si desidera aggiungere una licenza, noto anche come nome dell'entità utente (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).

Assicurarsi quindi che all'account utente sia assegnata una posizione di utilizzo.Next, ensure that the user account has a usage location assigned.

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

Se non è assegnata alcuna posizione di utilizzo, è possibile assegnare una con questi comandi: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

Infine, specificare il nome di accesso utente e il nome del piano di licenza ed eseguire questi comandi.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

Usare il Modulo di Microsoft Azure Active Directory per Windows PowerShellUse the Microsoft Azure Active Directory Module for Windows PowerShell

Innanzitutto, connettersi al tenant di Microsoft 365.First, connect to your Microsoft 365 tenant.

Eseguire il Get-MsolAccountSku comando per visualizzare i piani di licenza disponibili e il numero di licenze disponibili in ogni piano dell'organizzazione.Run the Get-MsolAccountSku command to view the available licensing plans and the number of available licenses in each plan in your organization. Il numero di licenze disponibili in ogni piano è ActiveUnits - WarningUnits - ConsumedUnits.The number of available licenses in each plan is ActiveUnits - WarningUnits - ConsumedUnits. Per ulteriori informazioni su piani di licenza, licenze e servizi, vedere Visualizzare licenze e servizi con PowerShell.For more information about licensing plans, licenses, and services, see View licenses and services with PowerShell.

Nota

PowerShell Core non supporta il modulo di Microsoft Azure Active Directory per Windows PowerShell e i cmdlet con MSOL all'interno del nome.PowerShell Core does not support the Microsoft Azure Active Directory Module for Windows PowerShell module and cmdlets with Msol in their name. Per continuare a usare i cmdlet, è necessario eseguirli in Windows PowerShell.To continue using these cmdlets, you must run them from Windows PowerShell.

Per trovare gli account senza licenza nell'organizzazione, eseguire questo comando.To find the unlicensed accounts in your organization, run this command.

Get-MsolUser -All -UnlicensedUsersOnly

È possibile assegnare licenze solo agli account utente la cui proprietà UsageLocation è impostata su un codice paese ISO 3166-1 alfa-2 valido.You can only assign licenses to user accounts that have the UsageLocation property set to a valid ISO 3166-1 alpha-2 country code. Ad esempio, US per gli Stati Uniti e FR per la Francia.For example, US for the United States, and FR for France. Alcuni servizi di Microsoft 365 non sono disponibili in alcuni paesi.Some Microsoft 365 services aren't available in certain countries. Per ulteriori informazioni, vedere Informazioni sulle restrizioni di licenza.For more information, see About license restrictions.

Per trovare gli account che non hanno un valore UsageLocation, eseguire questo comando.To find accounts that don't have a UsageLocation value, run this command.

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

Per impostare il valore UsageLocation su un account, eseguire questo comando.To set the UsageLocation value on an account, run this command.

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

Ad esempio:For example:

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

Se si usa il cmdlet Get-MsolUser senza utilizzare il parametro -All, vengono restituiti solo i primi 500 account.If you use the Get-MsolUser cmdlet without using the -All parameter, only the first 500 accounts are returned.

Assegnazione di licenze agli account utenteAssigning licenses to user accounts

Per assegnare una licenza a un utente, utilizzare il comando seguente in PowerShell.To assign a license to a user, use the following command in PowerShell.

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

In questo esempio viene assegnata una licenza dal piano di licenza litwareinc:ENTERPRISEPACK (Office 365 Enterprise E3) all'utente senza @ licenza belindan 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"

Per assegnare una licenza a tutti gli utenti senza licenza, eseguire questo comando.To assign a license to all unlicensed users, run this command.

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

Nota

Non è possibile assegnare più licenze a un utente dallo stesso piano di gestione delle licenze.You can't assign multiple licenses to a user from the same licensing plan. Se non si dispone di una quantità sufficiente di licenze disponibili, le licenze vengono assegnate agli utenti nell'ordine in cui vengono restituiti dal cmdlet Get-MsolUser finché non vengono esaurite le licenze disponibili.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.

In questo esempio vengono assegnate le licenze del piano di licenza litwareinc:ENTERPRISEPACK (Office 365 Enterprise E3) a tutti gli utenti senza licenza: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"

In questo esempio vengono assegnate le stesse licenze agli utenti senza licenza nel reparto Vendite negli Stati Uniti: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"

Spostare un utente in una sottoscrizione diversa (piano di licenza) con il modulo Azure Active Directory PowerShell per GraphMove a user to a different subscription (license plan) with the Azure Active Directory PowerShell for Graph module

Innanzitutto, connettersi al tenant di Microsoft 365.First, connect to your Microsoft 365 tenant.

Successivamente, ottenere il nome di accesso dell'account utente per il quale si desidera cambiare sottoscrizione, noto anche come nome dell'entità utente (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).

Quindi, elencare le sottoscrizioni (piani di licenza) per il tenant con questo comando.Next, list the subscriptions (license plans) for your tenant with this command.

Get-AzureADSubscribedSku | Select SkuPartNumber

Elenca quindi le sottoscrizioni attualmente disponibili nell'account utente con questi comandi.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 } } }

Identificare la sottoscrizione attualmente disponibile dall'utente (la sottoscrizione FROM) e la sottoscrizione a cui si sta spostando l'utente (la sottoscrizione TO).Identify the subscription the user currently has (the FROM subscription) and the subscription to which the user is moving (the TO subscription).

Infine, specificare i nomi delle sottoscrizioni TO e FROM (numeri di parte SKU) ed eseguire questi comandi.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

È possibile verificare la modifica della sottoscrizione per l'account utente con questi comandi.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 } } }

Vedere ancheSee also

Gestire gli account utente, le licenze e i gruppi con PowerShellManage user accounts, licenses, and groups with PowerShell

Gestire Microsoft 365 con PowerShellManage Microsoft 365 with PowerShell

Guida introduttiva a PowerShell per Microsoft 365Getting started with PowerShell for Microsoft 365