В этой статье мы рассмотрим управление лицензиями (подписками) у пользователей в Microsoft 365 (Office 365) с помощью PowerShell. Рассмотрим, как назначить или удалить лицензию, получить статистку по назначенным лицензиям и настроить автоматическое назначение лицензий с помощью групп Azure.
Вы можете управлять лицензиями пользователей Microsoft 365 через портал Azure или Admin Center. Найдите нужного пользователя в Azure AD, перейдите в раздел Licenses. Здесь вы можете назначить ему одну из доступных лицензий и выбрать доступные продукты. В крупных организациях чаще всего приходится управлять лицензиями Microsoft 365 с помощью PowerShell.
Для подключения к Microsoft 365 воспользуйтесь модулем Azure AD PowerShell:
Connect-AzureAD
Список доступных вам лицензий в разделе Azure AD -> Licenses -> App products. В нашем случае доступны 25 лицензий типа Microsoft 365 E5 Developer, из которых 9 свободны.
В PowerShell информацию о доступных и назначенных лицензия в вашем тенанте можно вывести так:
Get-AzureADSubscribedSku | Select -Property Sku*,ConsumedUnits -ExpandProperty PrepaidUnits
В SkuPartNumber указано название лицензии (лицензионного плана). В Enabled – количество лицензий, приобретенных в рамках данного плана. ConsumedUnits – количество лицензий, назначенных пользователям.
В рамках одного лицензионного плана вы можете использовать различные продукты Microsoft.
В нашем примере в тенанте доступен только один лицензионный план
DEVELOPERPACK_E5
. Выведем список доступных сервисов Microsoft 365, которые ваши пользователи могут использовать.
$licenses = Get-AzureADSubscribedSku
$licenses[0].ServicePlans
В столбце ServicePlanName указаны названия продуктов, доступных вашим пользователем с данной лицензией.
Можно вывести информацию о лицензиях, назначенному определённому пользователю. Сначала получим SkuID лицензии, назначенной пользователю, и затем по ней выведем ее название.
$SkuIDs=(Get-AzureADUser -ObjectId [email protected]| Select -ExpandProperty AssignedLicenses).SkuId
Foreach ($SkuID in $SkuIDs) {
(Get-AzureADSubscribedSku | Where {$_.SkuId -eq $SkuID}).SkuPartNumber
}
Попробуем назначить пользователю лицензию. Но прежде чем назначать лицензию, нужно убедиться, что для пользователя назначено местоположение (страна). Это обязательное требование, т.к. в зависимости от страны на пользователей могут действовать различные правила местного законодательства (особенно это важно для Exchange Online). Задайте двухсимвольный код страны в формате ISO alpha-2.
Get-AzureADUser -ObjectId [email protected]| Select UsageLocation, AssignedLicenses
Если страна не задана, или ее нужно изменить, выполните:
get-AzureADUser -ObjectId [email protected] | Set-AzureADUser -UsageLocation RU
Теперь можно назначить лицензию пользователю
$UserUPN="[email protected]"
$LicPlan="DEVELOPERPACK_E5"
$License = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
$License.SkuId = (Get-AzureADSubscribedSku | Where-Object -Property SkuPartNumber -Value $LicPlan -eq).SkuID
$assignlic = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$assignlic.AddLicenses = $License
Set-AzureADUserLicense -ObjectId $UserUPN -AssignedLicenses $assignlic
Get-AzureADUserLicenseDetail -objectid $UserUPN
Можно назначить лицензию сразу нескольким пользователям. Например, назначим лицензию всем пользователем в регионе RU:
$LicPlan="DEVELOPERPACK_E5"
$License = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
$License.SkuId = (Get-AzureADSubscribedSku | Where-Object -Property SkuPartNumber -Value $LicPlan -eq).SkuID
Get-AzureADUser -Filter "UsageLocation eq 'RU'”| Set-AzureADUserLicense -AssignedLicenses $assignlic
Чтобы удалить лицензию у пользователя, используйте такой PowerShell скрипт:
$userUPN="[email protected]"
$LicPlan="DEVELOPERPACK_E5"
$license = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$License.RemoveLicenses = (Get-AzureADSubscribedSku | Where-Object -Property SkuPartNumber -Value $LicPlan -EQ).SkuID
Set-AzureADUserLicense -ObjectId $userUPN -AssignedLicenses $license
Чтобы вывести список пользователей без лицензии, выполните команду:
Get-AzureAdUser | ForEach{ $licensed=$False ; For ($i=0; $i -le ($_.AssignedLicenses | Measure).Count ; $i++) { If( [string]::IsNullOrEmpty( $_.AssignedLicenses[$i].SkuId ) -ne $True) { $licensed=$true } } ; If( $licensed -eq $false) { Write-Host $_.UserPrincipalName} }
Следующий PowerShell скрипт позволит выгрузить в CSV файл информацию о пользователях Azure и назначенных им лицензий. Если пользователю не назначена лицензия, в отчете для него будет указано “Not Licensed”.
$Report = @()
$users= Get-AzureAdUser
Foreach ($user in $users) {
$SkuIDs= @()
$SkuIDs=(Get-AzureADUser -ObjectId $user.UserPrincipalName| Select -ExpandProperty AssignedLicenses).SkuId
If ($SkuIDs -ne $null) {
Foreach ($SkuID in $SkuIDs) {
$License=(Get-AzureADSubscribedSku | Where {$_.SkuId -eq $SkuID}).SkuPartNumber
$objReport = [PSCustomObject]@{
UPN = $user.UserPrincipalName
DisplayName = $user.DisplayName
Department = $user.Department
License = $License
}
$Report += $objReport
}
}
Else
{
$objReport = [PSCustomObject]@{
UPN = $user.UserPrincipalName
DisplayName = $user.DisplayName
Department = $user.Department
License = "Not licensed"
}
$Report += $objReport
}
}
$Report|Export-Csv c:\ps\azure_user_licenses.csv -Encoding UTF8 -NoTypeInformation
Управлять лицензиями персонально для каждого пользователя не очень удобно и трудозатратно по времени. В Azure AD вы можете привязать лицензию к группе Azure (group-based licensing). Как только пользователь добавляется в данную группу, Azure сама назначает ему лицензию. Но для использования этого функционала нужна лицензия Azure AD Premium P1. Кроме того, стандартный модуль AzureAD не позволяет назначить лицензию группе. Функции группового лицензирования доступны через портал Azure или програмно через Microsoft Graph API.