Assegnare licenze di Microsoft 365 agli account utente con PowerShell

Questo articolo si applica sia a Microsoft 365 Enterprise che a Office 365 Enterprise.

Gli utenti non possono usare alcun servizio Microsoft 365 fino a quando al proprio account non viene assegnata una licenza da un piano di licenza. È possibile usare PowerShell per assegnare rapidamente le licenze agli account senza licenza.

Agli account utente deve prima essere assegnata una posizione. La specifica di una posizione è una parte obbligatoria della creazione di un nuovo account utente nel interfaccia di amministrazione di Microsoft 365.

Per impostazione predefinita, per gli account sincronizzati dal Active Directory locale Domain Services non è specificata una posizione. È possibile configurare un percorso per questi account da:

  • L'interfaccia di amministrazione di Microsoft 365
  • PowerShell
  • Il portale di Azure (Account utente >utenti>di Active Directory>Informazioni> dicontatto>Paese o area geografica).

Nota

Informazioni su come assegnare licenze agli account utente con il interfaccia di amministrazione di Microsoft 365. Per un elenco di risorse aggiuntive, vedere Gestire utenti e gruppi.

Assegnare licenze di Microsoft 365 agli account utente con Microsoft Graph PowerShell SDK

Nota

Lo script seguente usa Microsoft Graph PowerShell. Per altre informazioni, vedere Panoramica di PowerShell di Microsoft Graph.

Per informazioni su come usare metodi diversi per l'autenticazione Connect-Graph in uno script automatico, vedere l'articolo Cmdlet del modulo di autenticazione in Microsoft Graph PowerShell.

Prima di tutto, connettersi al tenant di Microsoft 365.

Per assegnare e rimuovere licenze per un utente è necessario l'ambito di autorizzazione User.ReadWrite.All o una delle altre autorizzazioni elencate nella pagina di riferimento "Assegna licenza" di Microsoft API Graph.

L'ambito di autorizzazione Organization.Read.All è necessario per leggere le licenze disponibili nel tenant.

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

Eseguire il Get-MgSubscribedSku comando per visualizzare i piani di licenza disponibili e il numero di licenze disponibili in ogni piano dell'organizzazione. Il numero di licenze disponibili in ogni piano è ActiveUnits - WarningUnits - ConsumedUnits. Per altre informazioni su piani di licenza, licenze e servizi, vedere Visualizzare licenze e servizi con PowerShell.

Per trovare gli account senza licenza nell'organizzazione, eseguire questo comando.

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

Per trovare gli utenti sincronizzati senza licenza nell'organizzazione, eseguire questo comando.

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

È possibile assegnare licenze solo agli account utente con la proprietà UsageLocation impostata su un codice paese ISO 3166-1 alfa-2 valido. Ad esempio, US per gli Stati Uniti e FR per la Francia. Alcuni servizi di Microsoft 365 non sono disponibili in alcuni paesi o aree geografiche. Per altre informazioni, vedere Informazioni sulle restrizioni di licenza.

Per trovare gli account che non hanno un valore UsageLocation , eseguire questo comando.

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

Per impostare il valore UsageLocation in un account, eseguire questo comando.

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

Update-MgUser -UserId $userUPN -UsageLocation $userLoc

Ad esempio:

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

Se si usa il cmdlet Get-MgUser senza usare il parametro -All , vengono restituiti solo i primi 100 account.

Assegnazione di licenze agli account utente

Per assegnare una licenza a un utente, usare il comando seguente in PowerShell.

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

In questo esempio viene assegnata una licenza dal piano di licenza SPE_E5 (Microsoft 365 E5) all'utente belindan@litwareinc.comsenza licenza:

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

Questo esempio assegna SPE_E5 (Microsoft 365 E5) ed EMSPREMIUM (ENTERPRISE MOBILITY + SECURITY E5) all'utente 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 @()

Questo esempio assegna SPE_E5 (Microsoft 365 E5) con i servizi MICROSOFTBOOKINGS (Microsoft Bookings) e LOCKBOX_ENTERPRISE (Customer Lockbox) disattivati:

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

Questo esempio aggiorna un utente con SPE_E5 (Microsoft 365 E5) e disattiva i piani di servizio Sway e Forms lasciando nello stato corrente i piani disabilitati esistenti dell'utente:

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

Questo esempio aggiorna un utente con SPE_E5 (Microsoft 365 E5) e disattiva i piani di servizio Sway e Forms lasciando i piani disabilitati esistenti dell'utente in tutte le altre sottoscrizioni nello stato corrente:

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

Assegnare licenze a un utente copiando l'assegnazione di licenza da un altro utente

Questo esempio assegna jamesp@litwareinc.com con lo stesso piano di licenza applicato a belindan@litwareinc.com:

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

Spostare un utente in una sottoscrizione diversa (piano di licenza)

Questo esempio aggiorna un utente dal piano di licenza SPE_E3 (Microsoft 365 E3) al piano di licenza 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 @()

È possibile verificare la modifica nella sottoscrizione per l'account utente con questo comando.

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

Vedere anche

Gestire Microsoft 365 con PowerShell

Gestire Microsoft 365 con PowerShell

Introduzione a Microsoft Graph PowerShell SDK

Usare l'utente di Microsoft Graph: assignLicense e le API subscribedSku