Можно ли назначить лицензии Office365 с помощью Powershell, используя файл csv?

#powershell #automation #office365 #microsoft365

Вопрос:

То, что я хочу здесь сделать, — это назначить определенные лицензии определенным учетным записям, которые извлекаются из файла csv. У меня есть несколько сценариев, в которых я могу массово назначать, но только один тип лицензии за раз. То, что я хочу получить, — это более детальный контроль и массовое назначение нескольких типов лицензий из csv, что-то вроде этого:

upn тип лицензии
testuser1@testdomain.com Microsoft 365 E3
testuser2@testdomain.com Microsoft 365 E5
testuser3@testdomain.com Microsoft 365 E3
testuser4@testdomain.com Microsoft 365 F3

upn (имя пользователя) и тип лицензии являются заголовками столбцов).Где каждому указанному пользователю назначена эта конкретная лицензия в его строке.

Так что, как я понимаю, я могу сделать:

 Get-MsolAccountSku
 

Что даст мне все мои существующие типы лицензий, я могу принять к сведению SkuId для конкретной лицензии, которая мне нужна , допустим, например, это testtenant:SPE_E3, затем я могу сделать что-то вроде:

 users = import-csv ".bulkassignlicenses.csv"
foreach ($user in $users)
{
    $upn=$user.UserPrincipalName
    $SKU= "testtenant:SPE_E3"
    Set-MsolUser -UserPrincipalName $upn 
    Set-MsolUserLicense -UserPrincipalName $upn -AddLicenses $SKU
    Write-Host "License Assigned to UPN:"$upn 
} 
 

Проблема в том, что это назначит только один тип лицензии для перечисленных пользователей в файле csv, и я не могу понять, как заставить его проходить через CSV и назначать разные типы лицензий.

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

1. Конечно, возможно, с какой частью вашего кода у вас возникли проблемы?

2. Так что, как я понимаю, один раз запустите Connect-MsolService и выполните аутентификацию на моем клиенте. Я должен запустить Get-MsolAccountSku и принять к сведению идентификатор учетной записи для конкретной лицензии, которая мне нужна , допустим, например, это testtenant:SPE_E3, затем я могу сделать что-то вроде: пользователи = импорт-csv «.bulkassignlicenses.csv» для каждого ($пользователь в $пользователи) { $upn=$пользователь. Имя пользователя $Артикул= «testtenant:SPE_E3» Набор-MsolUser -Имя пользователя $upn Набор-MsolUserLicense -Имя пользователя $upn -AddLicenses $АРТИКУЛ для записи на хост «Лицензия, назначенная UPN:»$upn } }

3. Но это приведет только к назначению одной конкретной лицензии, моя проблема в том, что я не могу понять, как заставить ее перебирать CSV и назначать разные лицензии. (Извините за форматирование кода ^)

4. Переделал вопрос сейчас, должен выглядеть лучше.

Ответ №1:

Есть разные способы, которыми вы могли бы это сделать, я покажу вам 2 разных способа. Лично я считаю, что Group-Object в данном случае это более элегантное решение.

Я предполагаю, что вы уже знаете все доступные лицензии, и эти лицензии уже жестко закодированы (без опечаток) в CSV.

В качестве примера приведен следующий массив:

 PS /> $users

upn                           license        
---                           -------        
user.example01@testdomain.com ExampleLicense3
user.example02@testdomain.com ExampleLicense1
user.example01@testdomain.com ExampleLicense1
user.example02@testdomain.com ExampleLicense1
user.example03@testdomain.com ExampleLicense3
user.example01@testdomain.com ExampleLicense3
user.example02@testdomain.com ExampleLicense2
user.example01@testdomain.com ExampleLicense3
user.example03@testdomain.com ExampleLicense1
user.example03@testdomain.com ExampleLicense1
user.example03@testdomain.com ExampleLicense1
 

Для справки, вот как выглядит массив после его группировки:

 Count Name                      Group                                                                                                                                     
----- ----                      -----                                                                                                                                     
    4 user.example01@testdom... {@{upn=user.example01@testdomain.com; license=ExampleLicense3}, @{upn=...
    3 user.example02@testdom... {@{upn=user.example02@testdomain.com; license=ExampleLicense1}, @{upn=...
    4 user.example03@testdom... {@{upn=user.example03@testdomain.com; license=ExampleLicense3}, @{upn=...
 

Код:

 $users | Group-Object upn | ForEach-Object {
    # Note: $_.Group.License may or may not be an array.
    # Since -AddLicenses can take string[] as input this shouldn't be a problem
    Set-MsolUserLicense -UserPrincipalName $_.Name -AddLicenses $_.Group.License
}
 
  • Вариант 2: Использование Split :

В качестве примера приведен следующий массив:

 PS /> $users

upn                           license                                                        
---                           -------                                                        
user.example02@testdomain.com ExampleLicense2;ExampleLicense1;ExampleLicense1                
user.example01@testdomain.com ExampleLicense3;ExampleLicense1;ExampleLicense2;ExampleLicense1
user.example03@testdomain.com ExampleLicense3;ExampleLicense2;ExampleLicense3;ExampleLicense2
 

Примечание: Я использую точку с запятой ; в качестве разделителя, однако вы должны решить, какой разделитель подходит для этого примера.

Код:

 $users | ForEach-Object {
    $licenses = $_.license -split ';'
    Set-MsolUserLicense -UserPrincipalName $_.upn -AddLicenses $licenses
}
 

Ответ №2:

Сохраняйте имена пользователей, разделенные новой строкой без заголовка, в файле CSV, а затем загрузите приведенный ниже сценарий. Сценарий может выполнять более 6 действий по управлению лицензиями, включая массовое назначение или удаление лицензий.

https://o365reports.com/2021/11/23/office-365-license-reporting-and-management-using-powershell/

введите описание изображения здесь