Usuários do Licenciamento em massa do Office 365 por OU com o PowerShell

6

Estou tentando fazer algo que acho que não deve ser muito complicado. Meu objetivo final: tenho determinados usuários em uma unidade organizacional que precisam usar uma determinada licença no Office 365 e usuários diferentes em uma unidade organizacional diferente que obtêm uma licença diferente.

O comando que eu gostaria de executar é:

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

mas isso falha com uma resposta de:

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

Individualmente, ambos os comandos funcionam. Eu posso selecionar todos os usuários na unidade organizacional e também posso usar manualmente o comando Set-MsolUserLicense com -UserPrincipalName para licenciar um único usuário.

É porque o Get-ADUser não retorna o ObjectID como o Set-MsolUserLicense está procurando? Get-ADUser retorna o ObjectGUID. Se eu estou no caminho certo aqui, existe uma maneira de mapear estes juntos para a entrada canalizada?

Edit: estou ciente de que as formas populares de fazer isso envolvem o upload de um arquivo CSV para isso, e eu sei que poderia CSV-Exportar esses usuários, mas eu já os tenho tão limpos e organizados em UOs. adoro fazer isso agora com importação / exportação, se possível.

Obrigado antecipadamente!

    
por SteadH 24.06.2015 / 02:11

1 resposta

2

Você definitivamente deseja usar um loop for-each para enumerar cada usuário e aplicar a licença. O loop precisa chamar o .UserPrincipalName de cada objeto retornado na sua consulta Get-ADUser , já que o Office365 precisa trabalhar com esse valor ao configurar licenças:

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

Eu criei minha própria resposta aqui para explicar um caso comum que eu acho que você está descrevendo em sua pergunta: você não quer aplicar as mesmas opções de licença a todos.

Um blog do TechNet sobre esse assunto é imensamente útil. Talvez você não queira conceder ao seu time de Finanças acesso ao SharePoint Online / OneDrive for Business por motivos de vazamento de dados, ou você pode ter um call center que não deseja habilitar para o Lync / Skype for Business.

Para obter informações sobre seu locatário, comece no topo:

Get-MSOLAccountSku

Isso retornará os pacotes de licença que você tem em seu inquilino. Alguns SKUs comuns são ENTERPRISEPACK e DESKLESSPACK. Estes serão listados por yourorg:LICENSEPACK em AccountSkuId.

É importante observar que cada um desses pacotes de licenças pode ter recursos desativados quando você se inscreve no PowerShell (da mesma forma, você pode optar por marcar / desmarcar caixas de opção no Centro de administração).

Paracriarestesubconjuntodeopçõesdelicença,crieumanovavariáveleaproveiteocmdletNew-MSOLLicenseOptions:$LicOpt=New-MsolLicenseOptions-AccountSkuId"yourorg:ENTERPRISEPACK" -DisabledPlans OFFICESUBSCRIPTION,MCOSTANDARD,SHAREPOINTWAC,SHAREPOINTENTERPRISE,RMS_S_ENTERPRISE

(As opções acima corresponderiam à captura de tela acima, tenho certeza de que você poderia adivinhar que eu a tirei totalmente de um script de provisionamento.)

Por fim, podemos vincular isso ao seu Set-MsolUserLicense no seu loop 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 }

Como sempre, seu inquilino pode variar. Espero ter dado informações suficientes para você descobrir as opções disponíveis e aplicar de forma apropriada!

    
por 24.06.2015 / 18:21