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

Эта статья относится к Microsoft 365 корпоративный и Office 365 корпоративный.

Пользователи не могут использовать какие-либо службы Microsoft 365, пока их учетной записи не будет назначена лицензия из плана лицензирования. PowerShell можно использовать для быстрого назначения лицензий нелицензированных учетных записей.

Учетным записям пользователей необходимо сначала назначить расположение. Указание расположения является обязательной частью создания новой учетной записи пользователя в Центр администрирования Microsoft 365.

Для учетных записей, синхронизированных из локальная служба Active Directory Доменные службы, по умолчанию не указано расположение. Расположение для этих учетных записей можно настроить в следующих источниках:

  • Центр администрирования Microsoft 365
  • PowerShell
  • портал Azure (Учетная запись > пользователяActive Directory Пользователи>Active Directory>.>Контактные данные>страна или регион).

Примечание.

Узнайте, как назначать лицензии учетным записям пользователей с помощью Центр администрирования Microsoft 365. Список дополнительных ресурсов см. в разделе Управление пользователями и группами.

Назначение лицензий Microsoft 365 учетным записям пользователей с помощью пакета SDK Для Microsoft Graph PowerShell

Примечание.

В следующем сценарии используется Microsoft Graph PowerShell. Дополнительные сведения см. в статье Обзор Microsoft Graph PowerShell.

Сведения об использовании различных методов проверки подлинности Connect-Graph в автоматическом скрипте см. в статье Командлеты модуля проверки подлинности в Microsoft Graph PowerShell.

Сначала подключитесь к клиенту Microsoft 365.

Для назначения и удаления лицензий для пользователя требуется разрешение User.ReadWrite.All область или одно из других разрешений, перечисленных на странице справочника microsoft API Graph "Назначение лицензии".

Для чтения лицензий, доступных в клиенте, требуется область разрешения Organization.Read.All.

Connect-MgGraph -Scopes User.ReadWrite.All, Organization.Read.All

Get-MgSubscribedSku Выполните команду , чтобы просмотреть доступные планы лицензирования и количество доступных лицензий в каждом плане в организации. Количество доступных лицензий в каждом плане — ActiveUnits - WarningUnitsUnits - ConsumedUnitsUnits. Дополнительные сведения о планах лицензирования, лицензиях и службах см. в статье Просмотр лицензий и служб с помощью PowerShell.

Чтобы найти нелицензированные учетные записи в организации, выполните следующую команду.

Get-MgUser -Filter 'assignedLicenses/$count eq 0' -ConsistencyLevel eventual -CountVariable unlicensedUserCount -All

Чтобы найти нелицензированных синхронизированных пользователей в организации, выполните следующую команду.

Get-MgUser -Filter 'assignedLicenses/$count eq 0 and OnPremisesSyncEnabled eq true' -ConsistencyLevel eventual -CountVariable unlicensedUserCount -All -Select UserPrincipalName

Лицензии можно назначать только учетным записям пользователей, для которых свойству UsageLocation присвоен допустимый код страны ISO 3166-1 alpha-2. Важно указать это значение, так как некоторые службы O365_W14_2nd недоступны в определенных странах. Некоторые службы Microsoft 365 недоступны в некоторых странах и регионах. Дополнительные сведения см. в разделе Об ограничениях лицензий.

Чтобы найти учетные записи, у которых нет значения UsageLocation , выполните следующую команду.

Get-MgUser -Select Id,DisplayName,Mail,UserPrincipalName,UsageLocation,UserType | where { $_.UsageLocation -eq $null -and $_.UserType -eq 'Member' }

Чтобы задать значение UsageLocation для учетной записи, выполните следующую команду.

$userUPN="<user sign-in name (UPN)>"
$userLoc="<ISO 3166-1 alpha-2 country code>"

Update-MgUser -UserId $userUPN -UsageLocation $userLoc

Например:

Update-MgUser -UserId "belindan@litwareinc.com" -UsageLocation US

При использовании командлета Get-MgUser без использования параметра -All возвращаются только первые 100 учетных записей.

Назначение лицензий учетным записям пользователей

Чтобы назначить пользователю лицензию, используйте следующую команду в PowerShell.

Set-MgUserLicense -UserId $userUPN -AddLicenses @{SkuId = "<SkuId>"} -RemoveLicenses @()

В этом примере лицензия из плана лицензирования SPE_E5 (Microsoft 365 E5) назначается нелицензированного пользователя belindan@litwareinc.com:

$e5Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'SPE_E5'
Set-MgUserLicense -UserId "belindan@litwareinc.com" -AddLicenses @{SkuId = $e5Sku.SkuId} -RemoveLicenses @()

В этом примере пользователю belindan@litwareinc.comназначаются SPE_E5 (Microsoft 365 E5) и EMSPREMIUM (ENTERPRISE MOBILITY + SECURITY E5).

$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 @()

В этом примере назначается SPE_E5 (Microsoft 365 E5) с отключенными службами MICROSOFTBOOKINGS (Microsoft Bookings) и LOCKBOX_ENTERPRISE (защищенное хранилище клиента).

$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 @()

В этом примере пользователь получает SPE_E5 (Microsoft 365 E5) и отключает планы обслуживания Sway и Forms, оставляя существующие отключенные планы пользователя в текущем состоянии:

$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 @()

В этом примере пользователь получает SPE_E5 (Microsoft 365 E5) и отключает планы обслуживания Sway и Forms, оставляя существующие отключенные планы пользователя во всех остальных подписках в текущем состоянии:

$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 @()

Назначение лицензий пользователю путем копирования назначения лицензии от другого пользователя

В этом примере назначается jamesp@litwareinc.com тот же план лицензирования, который был применен к belindan@litwareinc.com:

$mgUser = Get-MgUser -UserId "belindan@litwareinc.com" -Property AssignedLicenses
Set-MgUserLicense -UserId "jamesp@litwareinc.com" -AddLicenses $mgUser.AssignedLicenses -RemoveLicenses @()

Перемещение пользователя в другую подписку (план лицензии)

В этом примере пользователь обновляет план лицензирования SPE_E3 (Microsoft 365 E3) до плана лицензирования 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 @()

Вы можете проверить изменение подписки для учетной записи пользователя с помощью этой команды.

Get-MgUserLicenseDetail -UserId "belindan@litwareinc.com"

См. также

Управление Microsoft 365 с помощью PowerShell

Управление Microsoft 365 с помощью PowerShell

Начало работы с пакетом SDK Microsoft Graph PowerShell

Использование пользователя Microsoft Graph : assignLicense и subscribedSku API