我试图做一些我认为不应该太复杂的修复。 我的最终目标是:我有一个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
单独地,这两个命令都起作用。 我可以selectOU中的所有用户,也可以手动使用带-UserPrincipalName的Set-MsolUserLicense命令来授权单个用户。
这是因为Get-ADUser不像Set-MsolUserLicense所寻找的那样返回ObjectID? Get-ADUser确实返回ObjectGUID。 如果我在这里正确的轨道,有没有办法将这些映射在一起的pipe道input?
编辑:我知道这样做的stream行方式涉及上传一个CSV文件,我知道我可以CSV导出这些用户,但我已经有他们如此整洁的OU,所以我很乐意做这与现在import/出口如果可能的话。
提前致谢!
您一定要使用for-each循环来枚举每个用户并应用许可证。 循环需要调用Get-ADUser查询中返回的每个对象的.UserPrincipalName ,因为在设置许可证时,Office365需要使用该值:
Get-ADUser | %{ Set-MSOLUserLicense -UserPrincipalName $_.UserPrincipalName }
我已经在这里创build了自己的答案来解释一个我认为在你的问题中描述的常见情况:你不想总是将相同的许可证选项应用于每个人。
有关此事的TechNet博客非常有帮助。 您可能不希望因为数据泄漏原因而让您的财务团队访问SharePoint Online / OneDrive for Business,或者您可能有一个呼叫中心,您不希望启用Lync / Skype for Business。
要获得有关您的租户的信息,请从顶部开始:
Get-MSOLAccountSku
这将返回您在租户中的许可证包。 一些常见的SKU是ENTERPRISEPACK和DESKLESSPACK。 这些将由yourorg:LICENSEPACK在AccountSkuId下列出。
需要注意的是,当您通过PowerShell进行应用时,这些许可证包中的每个许可证包都可以具有禁用的function(同样,您可以select在pipe理中心选中/取消选中选项框)。

要创build许可证选项的子集,请创build一个新variables并使用New-MSOLLicenseOptions cmdlet: $LicOpt = New-MsolLicenseOptions -AccountSkuId "yourorg:ENTERPRISEPACK" -DisabledPlans OFFICESUBSCRIPTION,MCOSTANDARD,SHAREPOINTWAC,SHAREPOINTENTERPRISE,RMS_S_ENTERPRISE
(上面的选项对应于上面的屏幕截图,我相信你可以猜测我完全从configuration脚本中提取它。)
最后,我们可以将它与您的ForEach循环中的Set-MsolUserLicense绑定:
$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 }
一如既往,你的租客可能会有所不同。 我希望我已经提供了足够的信息来发现可用的选项并适当地应用!