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

В этой статье мы рассмотрим управление лицензиями (подписками) у пользователей в 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 – количество лицензий, назначенных пользователям.

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

В рамках одного лицензионного плана вы можете использовать различные продукты 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:psazure_user_licenses.csv -Encoding UTF8 -NoTypeInformation

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

admin

Share
Published by
admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

2 недели ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

2 недели ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

2 недели ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

2 недели ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

2 недели ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

2 недели ago