我正在尝试做一些我认为不应该太复杂的修复。我的最终目标:一个 AD OU 中的某些用户需要在 Office 365 中使用某个许可证,而不同 OU 中的不同用户需要获得不同的许可证。
我想运行的命令是:
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
单独地,这两个命令都有效。我可以选择 OU 中的所有用户,也可以手动使用带有 -UserPrincipalName 的 Set-MsolUserLicense 命令来许可单个用户。
这是因为 Get-ADUser 没有像 Set-MsolUserLicense 那样返回 ObjectID 吗?Get-ADUser 确实返回 ObjectGUID。如果我在正确的轨道上,有没有办法将这些映射在一起以用于管道输入?
编辑:我知道这样做的流行方法包括为此上传一个 CSV 文件,我知道我可以 CSV 导出这些用户,但我已经让他们在 OU 中如此整洁,所以我很乐意这样做如果可能的话,现在导入/导出。
提前致谢!
您肯定希望使用 for-each 循环来枚举每个用户并应用许可证。循环需要从查询中
.UserPrincipalName
返回的每个对象中调用Get-ADUser
,因为 Office365 在设置许可证时需要使用该值:我在这里创建了自己的答案来解释我认为您在问题中描述的一个常见案例:您不想将相同的许可证选项一揽子应用到每个人。
关于这个问题的 TechNet 博客非常有帮助。出于数据泄露的原因,您可能不想让财务团队访问 SharePoint Online/OneDrive for Business,或者您可能拥有不想为 Lync/Skype for Business 启用的呼叫中心。
要获取有关您的租户的信息,请从顶部开始:
Get-MSOLAccountSku
这将返回您在租户中拥有的许可证包。一些常见的 SKU 是 ENTERPRISEPACK 和 DESKLESSPACK。这些将
yourorg:LICENSEPACK
在 AccountSkuId 下列出。请务必注意,当您通过 PowerShell 申请时,这些许可证包中的每一个都可以禁用其中的功能(同样,您可以选择在管理中心中选中/取消选中选项框)。
要创建此许可证选项子集,请创建一个新变量并利用
New-MSOLLicenseOptions
cmdlet:$LicOpt = New-MsolLicenseOptions -AccountSkuId "yourorg:ENTERPRISEPACK" -DisabledPlans OFFICESUBSCRIPTION,MCOSTANDARD,SHAREPOINTWAC,SHAREPOINTENTERPRISE,RMS_S_ENTERPRISE
(上面的选项将对应于上面的屏幕截图,我相信你可以猜到我完全从配置脚本中提取了它。)
最后,我们可以
Set-MsolUserLicense
在您的 ForEach 循环中将此与您联系起来:与往常一样,您的租户可能会有所不同。我希望我已经为您提供了足够的信息来发现可用的选项并适当地应用!