#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.
- Вариант 1: Использование
Group-Object
:
В качестве примера приведен следующий массив:
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/