Поиск по сайту:

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


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

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

Чтобы подключиться к Microsoft 365, используйте модуль Azure AD PowerShell:

Connect-AzureAD

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

Используя PowerShell, вы можете отображать информацию о доступных и назначенных лицензиях в вашем клиенте Azure следующим образом:

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

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

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

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

В нашем примере в этом клиенте доступен единственный лицензионный план DEVELOPERPACK_E5. Давайте отобразим службы Microsoft 365, доступные вашим пользователям.

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

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

Вы можете отобразить информацию о лицензиях, назначенных пользователю. Получите SkuID лицензии, назначенной пользователю, а затем покажите ее имя:

$SkuIDs=(Get-AzureADUser -ObjectId maxb@active-directory.onmicrosoft.com| Select -ExpandProperty AssignedLicenses).SkuId
Foreach ($SkuID in $SkuIDs) {
(Get-AzureADSubscribedSku | Where {$_.SkuId -eq $SkuID}).SkuPartNumber
}

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

Get-AzureADUser -ObjectId maxb@active-directory.onmicrosoft.com| Select UsageLocation, AssignedLicenses

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

Get-AzureADUser -ObjectId maxb@active-directory.onmicrosoft.com | Set-AzureADUser -UsageLocation DE

Затем вы можете назначить лицензию пользователю:

$UserUPN="maxb@active-directory.onmicrosoft.com"
$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

Вы можете назначить лицензию нескольким пользователям одновременно. Например, назначим лицензии всем пользователям в регионе DE:

$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 'DE'”| Set-AzureADUserLicense -AssignedLicenses $assignlic

Чтобы удалить лицензию, используйте сценарий PowerShell ниже:

$userUPN="maxb@active-directory.onmicrosoft.com"
$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 позволяет экспортировать информацию о пользователях Azure и назначенных им лицензиях в файл CSV. Если пользователю не назначена лицензия, в отчете для него будет указано «Не лицензирован».

$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\aad_user_licenses.csv -Encoding UTF8 -NoTypeInformation

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

Статьи по данной тематике