我正在尝试做一些我认为不应该太复杂的修复。我的最终目标是:我让一个 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 中将它们整理得非常整齐,所以如果可能的话,我很乐意使用现在的导入/导出来执行此操作。
提前致谢!
答案1
.UserPrincipalName
您肯定希望使用 for-each 循环来枚举每个用户并应用许可证。循环需要从查询中返回的每个对象调用Get-ADUser
,因为 Office365 在设置许可证时需要使用该值:
Get-ADUser | %{ Set-MSOLUserLicense -UserPrincipalName $_.UserPrincipalName }
我在这里创建了自己的答案来解释我认为您在问题中描述的一个常见情况:您不想将相同的许可选项一概应用于所有人。
TechNet 博客关于此事的帮助非常大。您可能出于数据泄露的原因不想让您的财务团队访问 SharePoint Online/OneDrive for Business,或者您可能有一个呼叫中心,您不想让其使用 Lync/Skype for Business。
要获取有关你的租户的信息,请从顶部开始:
Get-MSOLAccountSku
这将返回您租户中的许可证包。一些常见的 SKU 是 ENTERPRISEPACK 和 DESKLESSPACK。这些将在yourorg:LICENSEPACK
AccountSkuId 下列出。
值得注意的是,当您通过 PowerShell 申请时,每个许可证包都可以禁用其功能(同样,您可以选择在管理中心选中/取消选中选项框)。
要创建此许可证选项子集,请创建一个新变量并利用 cmdlet 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 }
与往常一样,您的租户可能会有所不同。我希望我已提供足够的信息,让您发现可用的选项并适当申请!