Назад | Перейти на главную страницу

Массовое лицензирование пользователей Office 365 по подразделениям с помощью PowerShell

Я пытаюсь сделать что-то, что, по моему мнению, не должно быть слишком сложным для исправления. Моя конечная цель: у меня есть определенные пользователи в одном подразделении AD, которым необходимо использовать определенную лицензию в Office 365, и разные пользователи в другом подразделении, которые получают другую лицензию.

Команда, которую я хотел бы запустить:

Get-ADUser -Filter * -SearchBase "ou=test,dc=our,dc=domain,dc=edu" | Set-MsolUserLicense -AddLicenses ourorg:STANDARDWOFFPACK_IW_STUDENT

но это не удается с ответом:

Set-MsolUserLicense : The input object cannot be bound because it did not contain the information required to bind all mandatory parameters: ObjectId At line:1 char:111 + Get-ADUser -Filter * -SearchBase "ou=Test students,ou=Students,dc=campus,dc=org,dc=edu" | Set-MsolUserLicense <<<< -AddLicenses nwcu:STANDARDWOFFPACK_IW_STUDENT

По отдельности работают обе эти команды. Я могу выбрать всех пользователей в подразделении, а также вручную использовать команду Set-MsolUserLicense с параметром -UserPrincipalName для лицензирования одного пользователя.

Это потому, что Get-ADUser не возвращает ObjectID, как ищет Set-MsolUserLicense? Get-ADUser возвращает ObjectGUID. Если я здесь на правильном пути, есть ли способ сопоставить их вместе для конвейерного ввода?

Изменить: я знаю, что популярные способы сделать это включают загрузку CSV-файла для этого, и я знаю, что могу экспортировать этих пользователей в CSV, но у меня уже есть они такие аккуратные и аккуратные в OU, поэтому я бы с удовольствием сделал это с теперь импортом / экспортом, если возможно.

Заранее спасибо!

Вы определенно захотите использовать цикл for-each для перечисления каждого пользователя и применения лицензии. Циклу необходимо вызвать .UserPrincipalName от каждого объекта, возвращенного в вашем Get-ADUser запрос, поскольку Office365 необходимо работать с этим значением при настройке лицензий:

Get-ADUser | %{ Set-MSOLUserLicense -UserPrincipalName $_.UserPrincipalName }

Я создал свой собственный ответ здесь, чтобы объяснить распространенный случай, который, я думаю, вы описываете в своем вопросе: вы не хотите, чтобы одни и те же варианты лицензии применялись ко всем без исключения.

Блог TechNet в этом вопросе очень помогает. Возможно, вы не захотите предоставлять своей финансовой группе доступ к SharePoint Online / OneDrive для бизнеса по причинам утечки данных или у вас может быть колл-центр, который вы не хотите включать для Lync / Skype для бизнеса.

Чтобы получить информацию о своем арендаторе, начните сверху:

Get-MSOLAccountSku

Это вернет пакеты лицензий, которые есть в вашем клиенте. Некоторые общие SKU - ENTERPRISEPACK и DESKLESSPACK. Они будут перечислены yourorg:LICENSEPACK под AccountSkuId.

Важно отметить, что в каждом из этих пакетов лицензий могут быть отключены функции, когда вы подаете заявку через PowerShell (аналогично, вы можете установить / снять флажки опций в центре администрирования).

Чтобы создать это подмножество вариантов лицензии, создайте новую переменную и используйте New-MSOLLicenseOptions командлет: $LicOpt = New-MsolLicenseOptions -AccountSkuId "yourorg:ENTERPRISEPACK" -DisabledPlans OFFICESUBSCRIPTION,MCOSTANDARD,SHAREPOINTWAC,SHAREPOINTENTERPRISE,RMS_S_ENTERPRISE

(Вышеупомянутые параметры соответствуют приведенному выше снимку экрана, я уверен, вы догадались, что я полностью вытащил его из сценария подготовки.)

Наконец, мы можем связать это с вашим Set-MsolUserLicense в вашем цикле ForEach:

$LicOpt = New-MsolLicenseOptions -AccountSkuId "yourorg:ENTERPRISEPACK" -DisabledPlans OFFICESUBSCRIPTION,MCOSTANDARD,SHAREPOINTWAC,SHAREPOINTENTERPRISE,RMS_S_ENTERPRISE

Get-ADUser | %{ Set-MsolUserLicense -UserPrincipalName $_.UserPrincipalName -AddLicenses "yourorg:ENTERPRISEPACK" -LicenseOptions $LicOpt }

Как всегда, ваш арендатор может отличаться. Надеюсь, я дал вам достаточно информации, чтобы вы узнали о доступных вариантах и ​​применили их соответствующим образом!