Назначить несколько пользовательских лицензий пользователю o365

#powershell #azure-active-directory

#powershell #azure-active-directory

Вопрос:

Ниже приведен доступ к приложению, который мне нужно предоставить пользователю

 Azure Right Management,Exchange Online(plan 2),Microsoft 365 apps for enterprise,Microsoft Forms (Plan E3),Microsoft Planner,Microsoft streams for O365 E3 SKU,Microsoft Teams,Office for the Web,share Point (Plan 2),Skype for Business Online (Plan 2),To Do (Plan 2)
 

Для этого я использую модуль AzureAD.
Ниже приведен код, который я пытался, но он не работает

 
Connect-AzureAD 

$UserToLicense = Get-AzureADUser -ObjectId "Arthur.Dent@xxx.com"

$EnabledPlans = "To Do (Plan 2)"


$LicenseSku = Get-AzureADSubscribedSku | Where-Object {$_.SkuPartNumber -eq 'To Do (Plan 2)'} 

$DisabledPlans = $LicenseSku.ServicePlans | ForEach-Object -Process { 
  $_ | Where-Object -FilterScript {$_.ServicePlanName -notin $EnabledPlans }
}
 

$License = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
$License.SkuId = $LicenseSku.SkuId
$License.DisabledPlans = $DisabledPlans.ServicePlanId
 

$AssignedLicenses = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$AssignedLicenses.AddLicenses = $License
$AssignedLicenses.RemoveLicenses = @()

Set-AzureADUserLicense -ObjectId $UserToLicense.ObjectId -AssignedLicenses $AssignedLicenses
 

я пытался с одним (сделать (план 2)).

Пожалуйста, нужна ваша помощь, чтобы разобраться в этом.

Ошибка:

 Set-AzureADUserLicense : Error occurred while executing SetUserLicenses 
Code: Request_BadRequest
Message: Cannot convert a primitive value to the expected type 'Edm.Guid'. See the inner exception for more details.
RequestId: 44dfce7b-2cc3-4ab8-b74b-7e321789ccf1
DateTimeStamp: Thu, 18 Feb 2021 15:51:17 GMT
HttpStatusCode: BadRequest
HttpStatusDescription: Bad Request
HttpResponseStatus: Completed
At D:Azure-licencing_MSOnline.ps1:34 char:1
  Set-AzureADUserLicense -ObjectId $user.ObjectId -AssignedLicenses $li ...
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      CategoryInfo          : NotSpecified: (:) [Set-AzureADUserLicense], ApiException
      FullyQualifiedErrorId : Microsoft.Open.AzureAD16.Client.ApiException,Microsoft.Open.AzureAD16.PowerShell.SetUserLicenses
 

Комментарии:

1. В вашем сообщении об ошибке указано, что выполняемый вами код отличается от опубликованного вами кода. После ошибки не могли бы вы опубликовать результаты $error[0].exception.innerexception .

Ответ №1:

Что-то не так с этой строкой:

 $LicenseSku = Get-AzureADSubscribedSku | Where-Object {$_.SkuPartNumber -eq 'To Do (Plan 2)'} 
 

Get-AzureADSubscribedSku получает подписку, а не лицензию. Так что мы не можем использовать $_.SkuPartNumber -eq 'To Do (Plan 2)' здесь. Это приводит к $LicenseSku значению null, поэтому вы получаете ошибку Cannot convert a primitive value to the expected type 'Edm.Guid' .

Я предполагаю, что вы хотите назначить пользователю лицензию на выполнение (план 2) по подписке O365 E3. Имя плана обслуживания To Do (План 2) — «BPOS_S_TODO_2» в O365 E3. Тогда правильный сценарий должен быть:

 $EnabledPlans = "BPOS_S_TODO_2"
$LicenseSku = Get-AzureADSubscribedSku | Where-Object {$_.SkuPartNumber -eq 'ENTERPRISEPACK'} 
 

Если лицензия To Do (План 2), которую вы хотите назначить, находится под другой подпиской, вы можете найти ее другие названия тарифных планов на этой странице.

Теплое напоминание: лицензия на выполнение (план 2) в Microsoft 365 E3 также является «BPOS_S_TODO_2».

Комментарии:

1. Спасибо за это. работал нормально. просто нужно спросить еще одну вещь. существуют и другие лицензии, такие как Azure Right Management, Exchange Online (план 2), Microsoft 365 apps для предприятия, Microsoft Forms (план E3), Microsoft Planner, Microsoft streams для O365 E3 SKU, Microsoft Teams, Office для Интернета, share Point (план 2), Skype для бизнеса Онлайн (План 2). Итак, для каждого из них мне нужно указать имя плана обслуживания ..? а также могу ли я передать несколько планов ..? пожалуйста, если вы можете помочь мне, зная это

2. @Sandy Да. Необходимо указать имя плана обслуживания для каждого из планов. Вы можете передать несколько планов из разных подписок следующим образом: $MyLicensesList = New-Object System.Collections.Generic.List[Microsoft.Open.AzureAD.Model.AssignedLicense] $MyLicensesList.Add($License) $MyLicensesList.Add($License1) $AssignedLicenses.AddLicenses = $MyLicensesList .