Я пытаюсь сделать что-то, что, по моему мнению, не должно быть слишком сложным для исправления. Моя конечная цель: у меня есть определенные пользователи в одном подразделении 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 }
Как всегда, ваш арендатор может отличаться. Надеюсь, я дал вам достаточно информации, чтобы вы узнали о доступных вариантах и применили их соответствующим образом!