Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come usare Microsoft Entra PowerShell per gestire le licenze utente nell'organizzazione. Si apprenderà come esaminare e controllare le assegnazioni di licenze, assegnare licenze a utenti singoli e multipli, rimuovere licenze e gestire licenze utente inattive.
Microsoft Entra servizi richiedono licenze per l'accesso. Con PowerShell è possibile gestire in modo efficiente queste licenze nel tenant per ottimizzare i costi e garantire l'accesso appropriato per gli utenti.
Prerequisiti
Installare il modulo Microsoft Entra PowerShell. Seguire la guida all'installazione.
Accedere come utente con il ruolo Amministratore licenze . Hai bisogno delle autorizzazioni
User.ReadWrite.AlleOrganization.Read.All. Eseguire questo comando per impostarli:Connect-Entra -Scopes 'User.ReadWrite.All','Organization.Read.All','LicenseAssignment.Read.All'Assicurarsi che agli utenti sia assegnata una posizione. Per trovare gli utenti senza un
UsageLocation, esegui:Connect-Entra -Scopes 'User.ReadWrite.All' $users = Get-EntraUser -All | Where-Object { $_.UsageLocation -eq $null -and $_.UserType -eq 'Member' } $users | Select-Object Id, DisplayName, UserPrincipalName, UsageLocationPer impostare la posizione di un utente, eseguire:
Set-EntraUser -UserId 'GjeEdla@Contoso.com' -UsageLocation 'US'
Esaminare i piani di licenza e l'utilizzo di Microsoft Entra disponibili
Per visualizzare i piani di licenza disponibili, eseguire il Get-EntraSubscribedSku cmdlet . Sono necessarie le autorizzazioni Organization.Read.All e LicenseAssignment.Read.All.
Per controllare i piani di licenza correnti, le licenze disponibili e lo stato di consumo, eseguire:
Connect-Entra -Scopes 'User.ReadWrite.All','Organization.Read.All','LicenseAssignment.Read.All'
Get-EntraSubscribedSku | Select-Object -Property Sku*, ConsumedUnits -ExpandProperty PrepaidUnits
Enabled : 5
LockedOut : 0
Suspended : 0
Warning : 0
AdditionalProperties :
SkuId : efccb6f7-5641-4e0e-bd10-b4976e1bf68e
SkuPartNumber : EMS
ConsumedUnits : 3
L'output mostra informazioni importanti sulle licenze:
-
SkuPartNumber: nome del piano di licenza (ad esempio, "EMS" per Enterprise Mobility + Security) -
Enabled: numero totale di licenze acquistate disponibili per questo piano -
ConsumedUnits: numero di licenze attualmente assegnate agli utenti -
LockedOut,Suspended,Warning: Indicatori di stato per il monitoraggio dello stato delle licenze
Trovare e controllare gli utenti con licenze specifiche
Per trovare tutti gli utenti a cui è assegnata una licenza specifica, usare questo processo in due passaggi:
- Ottenere l'ID SKU per il piano di licenza di destinazione
- Filtrare l'elenco utenti per trovare quelli con licenze corrispondenti
Connect-Entra -Scopes 'Organization.Read.All','LicenseAssignment.Read.All'
# Get the SKU ID for EMSPREMIUM license plan
$skuId = (Get-EntraSubscribedSku | Where-Object { $_.SkuPartNumber -eq 'EMSPREMIUM' }).SkuId
# Find users who have this license
$usersWithLicense = Get-EntraUser -All | Where-Object {
$_.AssignedLicenses -and
($_.AssignedLicenses.SkuId -contains $skuId)
}
# Display the results
$usersWithLicense | Select-Object DisplayName, UserPrincipalName, AccountEnabled |
Format-Table -AutoSize
Assegnare licenze agli utenti
Prima di assegnare le licenze, verificare quali licenze sono già assegnate all'utente.
Visualizzare le licenze assegnate a un utente
Per visualizzare le licenze assegnate a un utente, eseguire il comando seguente:
Connect-Entra -Scopes 'User.Read.All'
$userLicenses = Get-EntraUserLicenseDetail -UserId 'GjeEdla@Contoso.com'
$userLicenses
Id SkuId SkuPartNumber
-- ----- -------------
IR173R7-BkGrv95BU2ETAjchYPkDIntEn_9Bs24Izl0 f9602137-2203-447b-9fff-41b36e08ce5d Microsoft_Entra_Suite
IR173R7-BkGrv95BU2ETAk8SXrDMx6BFpqqM94yUaWg b05e124f-c7cc-45a0-a6aa-8cf78c946968 EMSPREMIUM
Per visualizzare tutti i piani di servizio attivi nella licenza assegnata all'utente, eseguire il comando seguente:
$userLicenses.ServicePlans | Where-Object { $_.ProvisioningStatus -eq 'Success' } | Select-Object ServicePlanName, ProvisioningStatus
ServicePlanName ProvisioningStatus
--------------- ------------------
Verifiable_Credentials_Service_Request Success
AAD_PREMIUM_P2 Success
Entra_Premium_Private_Access Success
Entra_Premium_Internet_Access Success
Entra_Identity_Governance Success
M365_AUDIT_PLATFORM Success
Assegnare una licenza a un utente
Per assegnare una licenza a un utente, usare il Set-EntraUserLicense cmdlet , che aggiunge o rimuove le licenze dall'assegnazione di un utente.
# Connect to Entra
Connect-Entra -Scopes 'User.ReadWrite.All'
# Get user details
$user = Get-EntraUser -UserId 'AljosaH@Contoso.com'
# Define the license plan to assign to the user
$license = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
$license.SkuId = (Get-EntraSubscribedSku | Where-Object { $_.SkuPartNumber -eq 'AAD_PREMIUM_P2' }).SkuId
$licenses = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$licenses.AddLicenses = $license
# Assign the license to the user
Set-EntraUserLicense -UserId $user.Id -AssignedLicenses $licenses
Per verificare che la licenza sia assegnata all'utente, eseguire:
Get-EntraUserLicenseDetail -UserId 'AljosaH@Contoso.com'
Assegnare più licenze a un utente
Per assegnare più licenze a un utente, creare una matrice di AssignedLicense oggetti e aggiungerle all'oggetto AssignedLicenses . Questo script assegna i piani di licenza AAD_PREMIUM_P2 e EMS a un utente.
# Connect to Entra
Connect-Entra -Scopes 'Organization.ReadWrite.All'
# Retrieve the SkuId for the desired license plans
$skuId1 = (Get-EntraSubscribedSku | Where-Object { $_.SkuPartNumber -eq 'AAD_PREMIUM_P2' }).SkuId
$skuId2 = (Get-EntraSubscribedSku | Where-Object { $_.SkuPartNumber -eq 'EMS' }).SkuId
# Get the user to assign the licenses to
$user = Get-EntraUser -UserId 'AljosaH@Contoso.com'
# Create license assignment objects
$license1 = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
$license1.SkuId = $skuId1
$license2 = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
$license2.SkuId = $skuId2
$licenses = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$licenses.AddLicenses = $license1, $license2
# Assign the licenses to the user
Set-EntraUserLicense -UserId $user.Id -AssignedLicenses $licenses
Assegnare una licenza a un utente copiando la licenza da un altro utente
Si vogliono assegnare le stesse licenze da un utente a un altro. È prima necessario recuperare i dettagli della licenza dall'utente esistente, quindi assegnare tali licenze al nuovo utente.
In questo esempio, si scorrono tutte le licenze assegnate all'utente esistente e le si assegna all'utente di destinazione.
# Connect to Entra
Connect-Entra -Scopes 'User.ReadWrite.All'
# Define the source and target users
$licensedUser = Get-EntraUser -UserId 'AljosaH@Contoso.com'
$targetUser = Get-EntraUser -UserId 'PalameeC@Contoso.com'
# Retrieve the source user and their licenses
$sourceUserLicenses = $licensedUser.AssignedLicenses
# Create license assignment objects for each license and assign them to the target user
$licensesToAssign = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
foreach ($license in $sourceUserLicenses) {
$assignedLicense = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
$assignedLicense.SkuId = $license.SkuId
$licensesToAssign.AddLicenses = $assignedLicense
Set-EntraUserLicense -UserId $targetUser.Id -AssignedLicenses $licensesToAssign
}
Assegnare in blocco più licenze per più utenti contemporaneamente
Questo script assegna più licenze a più utenti contemporaneamente. È possibile definire l'elenco degli utenti direttamente nello script o importarli da un file CSV.
# Connect to Entra
Connect-Entra -Scopes 'Organization.ReadWrite.All'
# Retrieve the SkuId for the desired license plans
$skuId1 = (Get-EntraSubscribedSku | Where-Object { $_.SkuPartNumber -eq 'AAD_PREMIUM_P2' }).SkuId
$skuId2 = (Get-EntraSubscribedSku | Where-Object { $_.SkuPartNumber -eq 'EMS' }).SkuId
# Option 1: Define users directly
$users = ('AljosaH@Contoso.com','PalameeC@Contoso.com')
# Option 2: Import users from a CSV file (the CSV should have a column named 'user')
# $users = Import-Csv -Path "C:\path\to\your\users.csv" | Select-Object -ExpandProperty user
# Create license assignment objects
$license1 = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
$license1.SkuId = $skuId1
$license2 = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
$license2.SkuId = $skuId2
$licenses = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$licenses.AddLicenses = $license1, $license2
# Assign the licenses to each user
foreach ($user in $users) {
Set-EntraUserLicense -UserId $user -AssignedLicenses $licenses
}
Elencare gli utenti inattivi con licenze attive
Il controllo delle licenze per gli utenti inattivi consente di ridurre i costi e migliorare la sicurezza. Per elencare gli utenti inattivi con licenze attive, eseguire questo comando:
Connect-Entra -Scopes 'User.Read.All'
$disabledUsersWithLicenses = Get-EntraUser -Filter "accountEnabled eq false" -All | Where-Object {
$_.AssignedLicenses -ne $null -and $_.AssignedLicenses.Count -gt 0
}
$disabledUsersWithLicenses | Select-Object Id, DisplayName, UserPrincipalName, AccountEnabled | Format-Table -AutoSize
Rimuovere le licenze assegnate a un utente
Per rimuovere una licenza assegnata a un utente, seguire questa procedura:
Connect-Entra -Scopes 'User.ReadWrite.All'
# Get user details
$user = Get-EntraUser -UserId 'AljosaH@Contoso.com'
# Get the license assigned to the user
$skuId = (Get-EntraUserLicenseDetail -UserId $user.Id).SkuId
# Define the license object
$licensesToRemove = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$licensesToRemove.RemoveLicenses = $skuId
# Remove the assigned license
Set-EntraUserLicense -UserId $user.Id -AssignedLicenses $licensesToRemove