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.
Utiliser le Kit de développement logiciel (SDK) 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 organisation. 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 organisation, 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 organisation, 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. 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 attribue 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"
Utilisation du module Azure Active Directory PowerShell pour Graph
Remarque
La mise hors service de l’applet de commande Set-AzureADUserLicense est planifiée. Migrez vos scripts vers l’applet de commande Set-MgUserLicense du Kit de développement logiciel (SDK) Microsoft Graph, comme décrit ci-dessus. Pour plus d’informations, consultez Migrer vos applications pour accéder aux API de gestion des licences à partir de Microsoft Graph.
Tout d’abord, connectez-vous à votre locataire Microsoft 365.
Ensuite, répertoriez les plans de licence pour votre locataire avec cette commande.
Get-AzureADSubscribedSku | Select SkuPartNumber
Ensuite, obtenez le nom de connexion du compte auquel vous souhaitez ajouter une licence, également appelé nom d’utilisateur principal (UPN).
Ensuite, vérifiez qu’un emplacement d’utilisation est attribué au compte d’utilisateur.
Get-AzureADUser -ObjectID <user sign-in name (UPN)> | Select DisplayName, UsageLocation
Si aucun emplacement d’utilisation n’est affecté, vous pouvez en attribuer un avec les commandes suivantes :
$userUPN="<user sign-in name (UPN)>"
$userLoc="<ISO 3166-1 alpha-2 country code>"
Set-AzureADUser -ObjectID $userUPN -UsageLocation $userLoc
Enfin, spécifiez le nom de connexion de l’utilisateur et le nom du plan de licence, puis exécutez ces commandes.
$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
Utilisez le module Microsoft Azure Active Directory pour Windows PowerShell.
Remarque
Les applets de commande Set-MsolUserLicense et New-MsolUser (-LicenseAssignment) sont planifiées pour être mises hors service. Migrez vos scripts vers l’applet de commande Set-MgUserLicense du Kit de développement logiciel (SDK) Microsoft Graph, comme décrit ci-dessus. Pour plus d’informations, consultez Migrer vos applications pour accéder aux API de gestion des licences à partir de Microsoft Graph.
Tout d’abord, connectez-vous à votre locataire Microsoft 365.
Exécutez la Get-MsolAccountSku
commande pour afficher les plans de licence disponibles et le nombre de licences disponibles dans chaque plan de votre organisation. 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.
Remarque
PowerShell Core ne prend pas en charge le module Microsoft Azure Active Directory pour Windows PowerShell et les applets de commande incluant Msol dans leur nom. Pour continuer à utiliser ces applets de commande, vous devez les exécuter à partir de Windows PowerShell.
Pour rechercher les comptes sans licence dans votre organisation, exécutez cette commande.
Get-MsolUser -All -UnlicensedUsersOnly
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. 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-MsolUser -All | where {$_.UsageLocation -eq $null}
Pour définir la valeur UsageLocation sur un compte, exécutez cette commande.
Set-MsolUser -UserPrincipalName "<Account>" -UsageLocation <CountryCode>
Par exemple :
Set-MsolUser -UserPrincipalName "belindan@litwareinc.com" -UsageLocation US
Si vous utilisez la cmdlet Get-MsolUser sans utiliser le paramètre -All, seuls les 500 premiers comptes sont renvoyés.
Attribution de licences à des comptes d’utilisateur
Pour attribuer une licence à un utilisateur, utilisez la commande suivante dans PowerShell.
Set-MsolUserLicense -UserPrincipalName "<Account>" -AddLicenses "<AccountSkuId>"
Cet exemple attribue une licence du plan de licence litwareinc:ENTERPRISEPACK (Office 365 Entreprise E3) à l’utilisateur belindan@litwareinc.comsans licence :
Set-MsolUserLicense -UserPrincipalName "belindan@litwareinc.com" -AddLicenses "litwareinc:ENTERPRISEPACK"
Pour attribuer une licence à tous les utilisateurs sans licence, exécutez cette commande.
Get-MsolUser -All -UnlicensedUsersOnly [<FilterableAttributes>] | Set-MsolUserLicense -AddLicenses "<AccountSkuId>"
Remarque
Vous ne pouvez pas attribuer plusieurs licences à un utilisateur à partir du même plan de gestion des licences. Si le nombre de licences disponibles n’est pas suffisant, les licences sont attribuées aux utilisateurs selon leur ordre de renvoi par la cmdlet Get-MsolUser jusqu'à ce qu’il n’y ait plus de licence disponible.
Cet exemple affecte des licences du plan de licence litwareinc:ENTERPRISEPACK (Office 365 Entreprise E3) à tous les utilisateurs sans licence :
Get-MsolUser -All -UnlicensedUsersOnly | Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"
Cet exemple attribue ces mêmes licences à des utilisateurs sans licence dans le service Ventes du États-Unis :
Get-MsolUser -All -Department "Sales" -UsageLocation "US" -UnlicensedUsersOnly | Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"
Déplacer un utilisateur vers un autre abonnement (plan de licence) avec le module Azure Active Directory PowerShell pour Graph
Tout d’abord, connectez-vous à votre locataire Microsoft 365.
Ensuite, obtenez le nom de connexion du compte d’utilisateur pour lequel vous souhaitez changer d’abonnement, également appelé nom d’utilisateur principal (UPN).
Ensuite, répertoriez les abonnements (plans de licence) pour votre locataire avec cette commande.
Get-AzureADSubscribedSku | Select SkuPartNumber
Ensuite, répertoriez les abonnements que le compte d’utilisateur possède actuellement avec ces commandes.
$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 } } }
Identifiez l’abonnement dont dispose actuellement l’utilisateur (l’abonnement FROM) et l’abonnement vers lequel l’utilisateur se déplace (l’abonnement TO).
Enfin, spécifiez les noms d’abonnement TO et FROM (numéros de référence SKU) et exécutez ces commandes.
$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
$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
Vous pouvez vérifier la modification de l’abonnement pour le compte d’utilisateur à l’aide de ces commandes.
$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 } } }
Voir aussi
Gérer les comptes d’utilisateurs, les licences et les groupes avec PowerShell
Gestion de Microsoft 365 à l’aide de PowerShell
Prise en main de PowerShell pour Microsoft 365
Utiliser l’utilisateur Microsoft Graph : assignLicense et subscribedSku API