Attribuer des licences Microsoft 365 à des comptes d’utilisateur avec PowerShell

Cet article est valable pour Microsoft 365 Entreprise et Office 365 Entreprise.

Les utilisateurs ne peuvent utiliser aucun service Microsoft 365 tant que leur compte n’a pas reçu une licence d’un plan de licences. Vous pouvez utiliser PowerShell pour attribuer rapidement des licences à des comptes sans licence.

Un emplacement doit d’abord être attribué aux comptes d’utilisateur. La spécification d’un emplacement est une partie obligatoire de la création d’un compte d’utilisateur dans le Centre d'administration Microsoft 365.

Les comptes synchronisés à partir de votre Active Directory local Domain Services n’ont pas d’emplacement spécifié par défaut. Vous pouvez configurer un emplacement pour ces comptes à partir de :

  • Le Centre d’administration Microsoft 365
  • PowerShell
  • Le Portail Azure (compte > d’utilisateurdes utilisateurs>Active Directory>Informations> decontact>Pays ou région).

Remarque

Découvrez comment attribuer des licences à des comptes d’utilisateur avec le Centre d'administration Microsoft 365. Pour obtenir la liste des ressources supplémentaires, consultez Gérer les utilisateurs et les groupes.

Attribuer des licences Microsoft 365 à des comptes d’utilisateur avec le Kit de développement logiciel (SDK) Microsoft Graph PowerShell

Remarque

Le script suivant utilise Microsoft Graph PowerShell. Pour plus d’informations, consultez Vue d’ensemble de Microsoft Graph PowerShell.

Pour plus d’informations sur l’utilisation de différentes méthodes pour l’authentification Connect-Graph dans un script sans assistance, consultez l’article Applets de commande du module d’authentification dans Microsoft Graph PowerShell.

Tout d’abord, connectez-vous à votre locataire Microsoft 365.

L’attribution et la suppression de licences pour un utilisateur nécessitent l’étendue d’autorisation User.ReadWrite.All ou l’une des autres autorisations répertoriées dans la page de référence « Attribuer une licence » microsoft API Graph.

L’étendue d’autorisation Organization.Read.All est nécessaire pour lire les licences disponibles dans le locataire.

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

Exécutez la Get-MgSubscribedSku commande pour afficher les plans de licence disponibles et le nombre de licences disponibles dans chaque plan de votre organization. Le nombre de licences disponibles dans chaque plan est ActiveUnits - WarningUnits - ConsumedUnits. Pour plus d’informations sur les plans de licence, les licences et les services, consultez Afficher les licences et les services avec PowerShell.

Pour rechercher les comptes sans licence dans votre organization, exécutez cette commande.

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

Pour rechercher les utilisateurs synchronisés sans licence dans votre organization, exécutez cette commande.

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

Vous pouvez uniquement attribuer des licences aux comptes d’utilisateur dont la propriété UsageLocation est définie sur un code de pays ISO 3166-1 alpha-2 valide. Par exemple, US pour les États-Unis et FR pour la France. Certains services Microsoft 365 ne sont pas disponibles dans certains pays/régions. Pour plus d’informations, consultez À propos des restrictions de licence.

Pour rechercher les comptes qui n’ont pas de valeur UsageLocation , exécutez cette commande.

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

Pour définir la valeur UsageLocation sur un compte, exécutez cette commande.

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

Update-MgUser -UserId $userUPN -UsageLocation $userLoc

Par exemple :

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

Si vous utilisez l’applet de commande Get-MgUser sans utiliser le paramètre -All , seuls les 100 premiers comptes sont retournés.

Attribution de licences à des comptes d’utilisateur

Pour attribuer une licence à un utilisateur, utilisez la commande suivante dans PowerShell.

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

Cet exemple affecte une licence du plan de licence SPE_E5 (Microsoft 365 E5) à l’utilisateur belindan@litwareinc.comsans licence :

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

Cet exemple affecte SPE_E5 (Microsoft 365 E5) et EMSPREMIUM (ENTERPRISE MOBILITY + SECURITY E5) à l’utilisateur 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 @()

Cet exemple affecte SPE_E5 (Microsoft 365 E5) avec les services MICROSOFTBOOKINGS (Microsoft Bookings) et LOCKBOX_ENTERPRISE (Customer Lockbox) désactivés :

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

Cet exemple met à jour un utilisateur avec SPE_E5 (Microsoft 365 E5) et désactive les plans de service Sway et Forms tout en laissant les plans désactivés existants de l’utilisateur dans leur état actuel :

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

Cet exemple met à jour un utilisateur avec SPE_E5 (Microsoft 365 E5) et désactive les plans de service Sway et Forms tout en laissant les plans désactivés existants de l’utilisateur dans tous les autres abonnements dans leur état actuel :

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

Attribuer des licences à un utilisateur en copiant l’attribution de licence d’un autre utilisateur

Cet exemple affecte jamesp@litwareinc.com avec le même plan de licence que celui appliqué à belindan@litwareinc.com:

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

Déplacer un utilisateur vers un autre abonnement (plan de licence)

Cet exemple met à niveau un utilisateur du plan de licence SPE_E3 (Microsoft 365 E3) vers le plan de licence 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 @()

Vous pouvez vérifier la modification de l’abonnement pour le compte d’utilisateur à l’aide de cette commande.

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

Voir aussi

Gestion de Microsoft 365 à l’aide de PowerShell

Gestion de Microsoft 365 à l’aide de PowerShell

Mise en place du SDK Microsoft Graph PowerShell

Utiliser l’utilisateur Microsoft Graph : assignLicense et subscribedSku API