Назначение лицензий пользователям в Microsoft 365 (AzureAD) с помощью PowerShell

В этой статье мы рассмотрим управление лицензиями (подписками) у пользователей в Microsoft 365 (Office 365) с помощью PowerShell. Рассмотрим, как назначить или удалить лицензию, получить статистку по назначенным лицензиям и настроить автоматическое назначение лицензий с помощью групп Azure.

Вы можете управлять лицензиями пользователей Microsoft 365 через портал Azure или Admin Center. Найдите нужного пользователя в Azure AD, перейдите в раздел Licenses. Здесь вы можете назначить ему одну из доступных лицензий и выбрать доступные продукты. В крупных организациях чаще всего приходится управлять лицензиями Microsoft 365 с помощью PowerShell.

назначить лицензию пользователю через azure ad портал

Для подключения к Microsoft 365 воспользуйтесь модулем Azure AD PowerShell :

Connect-AzureAD

Список доступных вам лицензий в разделе Azure AD -> Licenses -> App products. В нашем случае доступны 25 лицензий типа Microsoft 365 E5 Developer, из которых 9 свободны.

azure портал информация о лицензиях

В PowerShell информацию о доступных и назначенных лицензия в вашем тенанте можно вывести так:

Get-AzureADSubscribedSku | Select -Property Sku*,ConsumedUnits -ExpandProperty PrepaidUnits

список доступных лицензий в тенанте azure

В SkuPartNumber указано название лицензии (лицензионного плана). В Enabled – количество лицензий, приобретенных в рамках данного плана. ConsumedUnits – количество лицензий, назначенных пользователям.

Для адресации лицензий в скриптах PowerShell используется ее SkuID .

В рамках одного лицензионного плана вы можете использовать различные продукты Microsoft.

В нашем примере в тенанте доступен только один лицензионный план DEVELOPERPACK_E5 . Выведем список доступных сервисов Microsoft 365, которые ваши пользователи могут использовать.

$licenses = Get-AzureADSubscribedSku
$licenses[0].ServicePlans

вывести доступные ServicePlans в лицензии microsoft 365

В столбце ServicePlanName указаны названия продуктов, доступных вашим пользователем с данной лицензией.

Можно вывести информацию о лицензиях, назначенному определённому пользователю. Сначала получим SkuID лицензии, назначенной пользователю, и затем по ней выведем ее название.

$SkuIDs=(Get-AzureADUser -ObjectId [email protected] | Select -ExpandProperty AssignedLicenses).SkuId
Foreach ($SkuID in $SkuIDs) {
(Get-AzureADSubscribedSku | Where {$_.SkuId -eq $SkuID}).SkuPartNumber
}

узнать лицнезию пользователя в microsoft 365 через powershell

Попробуем назначить пользователю лицензию. Но прежде чем назначать лицензию, нужно убедиться, что для пользователя назначено местоположение (страна). Это обязательное требование, т.к. в зависимости от страны на пользователей могут действовать различные правила местного законодательства (особенно это важно для Exchange Online). Задайте двухсимвольный код страны в формате ISO alpha-2.

Get-AzureADUser -ObjectId [email protected] | Select UsageLocation, AssignedLicenses

Если страна не задана, или ее нужно изменить, выполните:

get-AzureADUser -ObjectId [email protected] | Set-AzureADUser -UsageLocation RU

Set-AzureADUser задать UsageLocation

Теперь можно назначить лицензию пользователю

$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:psazure_user_licenses.csv -Encoding UTF8 -NoTypeInformation

CSV отчет по назначенным пользователям лицензиями в Azure

Управлять лицензиями персонально для каждого пользователя не очень удобно и трудозатратно по времени. В Azure AD вы можете привязать лицензию к группе Azure (group-based licensing). Как только пользователь добавляется в данную группу, Azure сама назначает ему лицензию. Но для использования этого функционала нужна лицензия Azure AD Premium P1. Кроме того, стандартный модуль AzureAD не позволяет назначить лицензию группе. Функции группового лицензирования доступны через портал Azure или програмно через Microsoft Graph API .

EnglishRussianUkrainian