Usar o Windows Azure Active Directory para gerenciar o Office 365
Tópico modificado em: 2015-03-09
Resumo: Use o Windows PowerShell para gerenciar o Office 365 usando cmdlets, scripts e processos em lote do Windows PowerShell.
Você está certo: quando vê o termo “Active Directory do Azure”, seu primeiro pensamento provavelmente não é "Ei, aposto que é assim que você gerencia o Office 365 usando o Windows PowerShell”. No entanto, como se pode ver, o “Azure” é o nome do serviço de nuvem da Microsoft há muito tempo e “Active Directory” é, há muito tempo, o nome do, bem, do Active Directory. Junte-os e você obterá o Active Directory do Azure Directory, uma tecnologia que possibilita que você use o Windows PowerShell para gerenciar usuários, grupos, licenças e assinaturas do Office 365. Este tópico inclui informações sobre:
Retornar informações de conta de usuário do Office 365
Seleção dos valores de propriedade das contas de usuários a serem retornados
Configurando valores de propriedade de contas de usuário
Trabalhar com licenças de usuário do Office 365
Uma observação rápida sobre parâmetros posicionais e o Office 365
Se você quiser mais informações sobre os cmdlets do Active Directory do Azure, pode encontrá-las aqui.
Retornar informações de conta de usuário do Office 365
Nomes à parte, é muito mais interessante (e importante) se concentrar em tarefas de gerenciamento que podem ser executadas usando o Active Directory do Azure. O Active Directory do Azure inclui os 66 cmdlets, que são usados para gerenciar os seus usuários, grupos e licenças do Office 365. Por exemplo, você precisa de uma lista rápida dos seus usuários do Office 365? Experimente este comando:
Get-MsolUser
Embora isto se desvie do assunto principal, acho que poderia ser um bom momento para falar sobre nomes de cmdlet. Se você observar os nomes dos Active Directory do Azure cmdlets, você perceberá que todos tem algo em comum:
Add-MsolForeignGroupToRole
Add-MsolGroupMember
Add-MsolRoleMember
Confirm-MsolDomain
Connect-MsolService
Como você pode ver, cada substantivo cmdlet (a parte do nome após o hífen) começa com o prefixo MSOL . Coincidência? Não exatamente. Em vez disso, o prefixo MSOL (curto para MsOnline) é usado para identificar estes cmdlets como Active Directory do Azure cmdlets. Todos os Active Directory do Azure cmdlets devem usar o prefixo Msol, e nenhum outro Windows PowerShell cmdlets poderão usar o prefixo Msol. Por exemplo, todos os cmdlets do SharePoint Online têm o prefixo:
Add-SPOUser
Connect-SPOService
Disconnect-SPOService
Get-SPOAppErrors
Get-SPOAppInfo
Todos os cmdlets do Lync Online utilizam o prefixo Cs:
Get-CsAudioConferencingProvider
Get-CsOnlineUser
Get-CsTenant
Get-CsTenantFederationConfiguration
Get-CsTenantHybridConfiguration
O prefixo Cs é realmente curto para a adequação do servidor de comunicação. Isso porque o servidor do Lync era conhecido anteriormente como o Office Communications Server. Quando o nome foi oficialmente modificado, um número grande de cmdlets já estavam completos. Já que a mudança dos nomes dos cmdlets nessa etapa poderia atrasar o lançamento do produto, foi tomada a decisão de manter o prefixo Cs.
Curiosamente, os cmdlets do Exchange não usam prefixos de nenhum tipo:
Add-RecipientPermission
Get-LinkedUser
Get-RecipientPermission
Get-RemovedMailbox
Get-SendAddress
Por que não? O Exchange foi o primeiro produto de servidor a lançar um conjunto de cmdlets do Windows PowerShell. Naquela época, o uso do prefixo do cmdlet ou outro identificador não estava implementado. Visto que outras equipes de servidor começaram a criar cmdlets, logo ficou evidente que havia um problema: se o Exchange tinha um cmdlet denominado Set-User (e em verdade tem), neste caso, o que as outras equipes que precisavam de um cmdlet para a definição de propriedades de usuário deveriam fazer? (Os nomes dos Cmdlet deveriam ser únicos.) A solução era o uso de prefixos. Como resultado, agora temos cmdlets com nomes como Set-MsolUser, Set-CsUser, e Set-SPOSiteUser.
De qualquer forma, a execução do Get-MsolUser apresentará informações similares a estas:
UserPrincipalName DisplayName isLicensed
----------------- ----------- ----------
ZrinkaM@litwareinc.onmicrosoft.com Zrinka Makovac True
BonnieK@litwareinc.onmicrosoft.com Bonnie Kearney True
FabriceC@litwareinc.onmicrosoft.com Fabrice Canel True
BrianJ@litwareinc.onmicrosoft.com Brian Johnson False
AnneWlitwareinc.onmicrosoft.com Anne Wallace True
Estes são todos os seus Office 365 usuários.
Mas digamos que você gostaria de ver uma lista contendo apenas os usuários sem licença; ou seja, usuários que já foram adicionados ao Office 365 mas ainda não foram liberados para usar os aplicativos do software. Isso também é fácil:
Get-MsolUser -UnlicensedUsersOnly
Novamente, acessamos o cmdlet Get-MsolUser, mas desta vez, somente lidaremos com os parâmetros do UnlicensedUsersOnly. Como o nome indica, esse parâmetro limita os dados retornados aos usuários cujas licenças ainda não foram emitidas:
UserPrincipalName DisplayName isLicensed
----------------- ----------- ----------
BrianJ@litwareinc.onmicrosoft.com Brian Johnson False
ScottW@litwareinc.onmicrosoft.com Scott Wallace False
Isso é muito bom.
Gostaríamos de salientar também, que o Windows PowerShell possui a reputação de uma linguagem de computador criada por marcianos. Quando muitas pessoas pensam no Windows PowerShell, nas suas mentes aparecem comandos como estes:
gc test.txt | sort {[int]$_} |% {$i = 1}{while ($i -lt $_){$i;$i++};$i++}
Realmente, aquele comando é um pouco....confuso …. Por outro lado, mostramos um comando que apresentou usuários que não possuíam uma licença para o Office 365. Para fazer isso, usamos um cmdlet denominado Get-MsolUser e um parâmetro denominado UnlicensedUsersOnly:
Get-MsolUser -UnlicensedUsersOnly
E quando executamos este comando, acessamos os usuários sem licença.
Isso simplesmente quer dizer que você pode torná-lo Windows PowerShell o mais enigmático possível, ou o mais claro e simples, depende de você.
Seleção dos valores de propriedade das contas de usuários a serem retornados
Windows PowerShell dá a você a habilidade de fazer as coisas da forma que você quiser fazê-las. Por exemplo, nós já vimos que executar o cmdlet Get-MsolUser retorna três valores de propriedade:
UserPrincipalName
DisplayName
isLicensed
Isso é bom, mas e se o que realmente queremos ver é o nome de exibição do usuário, o departamento para o qual ele trabalha e o país/região onde nosso usuário "consume" Office 365 serviços? O que fazer?
Dica
Sim, "consome" não é exatamente uma palavra boa também. Mas não se preocupe sobre a terminologia: a propriedade UsageLocation indica a localização geográfica onde o usuário normalmente usa Office 365. E isso é muito importante: as licenças, políticas e recursos disponíveis do Office 365 giram, em parte, ao redor desta localização.
Como já vimos, Get-MsolUser apenas nos mostra uma das nossas propriedades preferenciais: DisplayName. Ao que parece, estamos sem sorte, certo?
Certo. Bem, a menos que, ao invés disso, executarmos este comando:
Get-MsolUser | Select-Object DisplayName, Department, UsageLocation
Aqui está o que esse comando retorna:
DisplayName Department UsageLocation
----------- ---------- -------------
Zrinka Makovac Sales & Marketing US
Bonnie Kearney Sales & Marketing US
Fabrice Canel Legal US
Brian Johnson
Anne Wallace Executive Management US
Alex Darrow Sales & Marketing US
David Longmuir Operations US
Não nos preocuparemos explicando como tudo isso funciona hoje; isso é muito para um artigo de visão geral. Ao invés disso, nós apenas observaremos que o cmdlet Select-Object (o qual é enviado como parte do Windows PowerShell 3.0) permite que você separe e escolha as propriedades que você quer que um cmdlet retorne. Você diz que deseja apenas ver valores para a propriedade UsageLocation? Então diga ao Select-Object para retornar apenas uma propriedade:
Get-MsolUser | Select-Object DisplayName
Select-Object ainda permite que você retorne todos os valores de propriedade para um item; tente executar este comando e veja o que acontece:
Get-MsolUser | Select-Object *
Isso é útil porque, como nós já vimos, cmdlets nem sempre retornam todas as informações disponíveis para um item. Se você quiser ver tudo que Get-MsolUser tem a dizer sobre um usuário, então use um comando semelhante a este:
Get-MsolUser -UserPrincipalName "BelindaN@litwareinc.onmicosoft.com" | Select-Object *
E aqui está um comando extra útil, um que retorna informações sobre os usuários que não tenham uma localização de uso. (Isso é importante, porque você não poderá fazer determinadas coisas com esses usuários até que o local tenha sido definido.) Aqui está o comando:
Get-MsolUser | Where-Object {$_.UsageLocation -eq $Null} | Select-Object DisplayName, Department, UsageLocation
E aqui estão os dados que retornam:
DisplayName Department UsageLocation
----------- ---------- -------------
Brian Johnson
Scott Wallace Operations
Esses são apenas dois usuários que temos que no momento não têm um UsageLocation.
Configurando valores de propriedade de contas de usuário
Até aqui descobrimos como você pode usar o Windows PowerShell para retornar informações. Talvez, ainda melhor seja o fato de que você também pode usar os cmdlets do Active Directory do Azure para configurar informações. Você diz que Belinda Newman se mudou para a França e precisa fazer com que seu local de uso seja definido para FR, o código da ISO (Organização Internacional de Padronização) para a França? OK:
Set-MsolUser -UserPrincipalName "BelindaN@litwareinc.onmicosoft.com" -UsageLocation "FR"
Você vai descobrir como isso é fácil. Já sabemos que o cmdlet Get-MsolUser pode retornar uma propriedade chamada UsageLocation. Então definimos esse valor de propriedade? Nós simplesmente usamos o cmdlet Set-MsolUser correspondente e, sim, o parâmetro UsageLocation:
Set-MsolUser -UserPrincipalName "BelindaN@litwareinc.onmicosoft.com" -UsageLocation "FR"
Não há realmente nada de complicado nisso.
E aqui está uma coisa legal. Você diz que todos os seus usuários se mudaram para a França? Sem problema:
Get-MsolUser | Set-MsolUser -UsageLocation "FR"
Nesse caso, usamos o cmdlet Get-MsolUser para retornar todas as nossas contas de usuário. Podemos então ter essas informações em "pipe" para o cmdlet Set-MsolUser. Consulte o pequeno caractere separador de pipe no comando, o caractere tem esta aparência:
|
Quando você vê o caractere de pipe em um comando do Windows PowerShell isso significa que você obterá quaisquer informações que foram recuperadas usando o primeiro cmdlet (Get-MsolUser) e depois entregará todas essas informações para o segundo cmdlet (Set-MsoIUser). Neste caso, isso significa que o Set-MsolUser reunirá todas as nossas contas de usuário e definirá a propriedade UsageLocation para FR.
Nada mal, se virmos a situação dessa maneira.
Dica
OK, talvez seja fácil dizer. Mas não precisamos nos preocupar: aqui está uma boa introdução para usar piping e pipelines com o Windows PowerShell.
Trabalhar com licenças de usuário do Office 365
Conforme observamos anteriormente, podemos realizar várias ações com os cmdlets do Azure; por exemplo, este comando retorna informações sobre a quantidade de licenças do Office 365 que você possui, bem como a quantidade de licenças que você ainda poderá distribuir:
Get-MsolAccountSku
Os dados retornados serão similares a estes:
AccountSkuId ActiveUnits WarningUnits ConsumedUnits
------------ ----------- ------------ ------------
litwareinc:ENTERPRISEPACK 25 0 25
Em nossos dados de amostra, o domínio litwareinc emitiu 25 licenças (ActiveUnits) e todas as 25 licenças atualmente estão alocadas aos usuários (ConsumedUnits).
Isso é bom. Obviamente, seria melhor ainda ter a capacidade de ver as licenças que foram designadas a um usuário específico. Sem explicar todos os detalhes, mencionamos aqui como podemos encontrar as licenças atribuídas atualmente para Paulo Araújo:
Get-MsolUser -UserPrincipalName "kenmyer@litwareinc.onmicrosoft.com" | Select-Object -ExpandProperty Licenses | Select-Object -ExpandProperty ServiceStatus
Muito bem, ofereceremos uma explicação superficial, porque se trata de um comando mais complicado. Neste comando, primeiro usaremos Get-MsolUser para retornar as informações para o usuário pauloaraujo@litwareinc.onmicrosoft.com. Em seguida, canalizamos essas informações para o cmdlet Select-Object e usamos o parâmetro ExpandProperty "expandir" a propriedade Licenses. Precisamos fazer isso porque Licenses é uma propriedade com valores múltiplos; isso significa que contém vários valores (no caso, várias licenças), e queremos ter certeza de que estamos trabalhando com todas as licenças. Em seguida, canalizamos as informações da licença para Select-Object e expandimos a propriedade ServiceStatus para obter informações detalhadas sobre cada licença individual.
Dica
Consulte este artigo sobre propriedades com vários valores se a explicação rápida não foi suficiente.
Quando terminado, obteremos algo similar a isto:
ServicePlan ProvisioningStatus
----------- ------------------
YAMMER_ENTERPRISE None
RMS_S_ENTERPRISE Success
OFFICESUBSCRIPTION Success
MCOSTANDARD Success
SHAREPOINTWAC Success
SHAREPOINTENTERPRISE Success
EXCHANGE_S_ENTERPRISE Success
Talvez o que está ocorrendo não seja óbvio à primeira vista. Felizmente, não será tão obtuso quando parece ser. A propriedade ServicePlan contém um conjunto de licenças (as licenças disponíveis na sua empresa dependem do plano adquirido do Office 365). Os valores na nossa propriedade ServicePlan equivalem ao seguinte:
Número do índice | Plano de serviço | Produto |
---|---|---|
0 |
YAMMER_ENTERPRISE |
Yammer |
1 |
RMS_S_ENTERPRISE |
Windows Azure Active Directory |
2 |
OFFICESUBSCRIPTION |
Office Professional Plus |
3 |
MCOSTANDARD |
Lync |
4 |
SHAREPOINTWAC |
Office Web Apps |
5 |
SHAREPOINTNETERPRISE |
SharePoint |
6 |
EXCHANGE_S_ENTERPRISE |
Exchange |
Por sua vez, a propriedade ProvisioningStatus nos informa se esta licença já foi designada ou não:
Nenhum significa que nenhuma licença foi distribuída.
Êxito significa que a licença foi distribuída.
Desabilitado significa que a licença foi atribuída, mas já está desativada.
Como se pode ver, Ken Myer já distribuiu todas as licenças disponíveis com a exceção de Yammer.
Dica
Qual é o Número de índice na tabela anterior? O número de índice é outro identificador do plano de serviço. Como em uma boa programação de computadores das antigas, o primeiro item em uma coleção como esta recebe o número de índice 0. Portanto, o YAMMER_ENTERPRISE possui o número de índice 0. O segundo item na coleção receberá o número de índice 1, o terceiro item terá o número de índice 2, e assim por diante. Como veremos em instantes, esses números podem ser usados para ações como mostrar aos usuários quem são os detentores de uma licença do Yammer, ou todos os usuários que não têm uma licença do Yammer.
Portanto, podemos alterar estas designações de licenças; por exemplo podemos desabilitar a licença do Ken para usar o Exchange e o Lync Online? Claro que podemos. Novamente, não explicaremos como tudo isto funciona; trataremos disso outro dia. No entanto, no Office 365 você pode gerenciar licenças (pelo menos em parte), indicando quais licenças devem ser desabilitadas. Isso é feito criando um novo objeto de opções de licenciamento, como este:
$disabledLicenses = New-MsolLicenseOptions -AccountSkuId "litwareinc:ENTERPRISEPACK" -DisabledPlans "MCOSTANDARD","EXCHANGE_S_ENTERPRISE"
O que fizemos aqui é simplesmente dizer que gostaríamos de desativar os dois planos do domínio litwareinc (que adquiriu o pacote de licenciamento empresarial): Lync (MCOSTANDARD) e Exchange (EXCHANGE_S_ENTERPRISE). Observe que este comando por si só não desabilitará as licenças de qualquer usuário. Em vez disso, criará uma licença de usuário genérica em que o Lync e o Exchange foram desativados. Então, poderemos usar essa licença genérica de usuário e atribuí-la para uma pessoa real:
Set-MsolUserLicense -UserPrincipalName "kenmyer@litwareinc.onmicrosoft.com" -LicenseOptions $disabledLicenses
Ao executar esse comando e observarmos as licenças de usuário do Ken, veremos algo parecido com isto:
ServicePlan ProvisioningStatus
----------- ------------------
YAMMER_ENTERPRISE None
RMS_S_ENTERPRISE Success
OFFICESUBSCRIPTION Success
MCOSTANDARD Disabled
SHAREPOINTWAC Success
SHAREPOINTENTERPRISE Success
EXCHANGE_S_ENTERPRISE Disabled
Pronto! Tanto o Exchange e o Lync Online foram desativados.
Visualizar informações de licenciamento do Office 365 para vários usuários
Reconhecidamente, Office 365 licenciamento de usuário pode ser um pouco complicado. Mas isso não tem nada a ver com Office 365; em vez disso, é porque, bem, licenciamento de usuário do Office 365 pode ser um pouco complicado. Afinal, há três pacotes de licenças diferentes disponíveis através de Office 365 e pode-se atribuir a usuários quantas (ou algumas) licenças de produtos individuais você achar adequado. Cuidar de tudo isso não é fácil, principalmente devido ao fato de que o Centro de administração do Office 365 apenas permite que você visualize os detalhes de licença para um usuário por vez. Você gostaria de uma lista de todos os usuários aos quais uma licença para Lync Online foi atribuída? É claro que gostaria. Mas o Centro de administração não pode fornecer isso prontamente.
Mas o Windows PowerShell pode. Lembra-se dos números de índice sobre os quais falamos na seção Trabalhar com licenças de usuário do Office 365? Se você se lembra, então você pode lembrar-se que, no nosso pacote de licença, Lync Online tem um número de índice 3. Isso significa que podemos usar esta linha de código aparentemente cifrada para retornar uma lista de todos os usuários que receberam uma licença para Lync Online:
Get-MsolUser | Where-Object {$_.isLicensed -eq $true -and $_.Licenses[0].ServiceStatus[3].ProvisioningStatus -ne "Disabled"}
E sim, isso é definitivamente um pouco complicado. Mas ele retornará as informações solicitadas para retornar:
UserPrincipalName DisplayName isLicensed
----------------- ----------- ----------
ZrinkaM@litwareinc.onmicrosoft.com Zrinka Makovac True
FabriceC@litwareinc.onmicrosoft.com Fabrice Canel True
AnneW@litwareinc.onmicrosoft.com Anne Wallace True
AlexD@litwareinc.onmicrosoft.com Alex Darrow True
Se você preferir, você também pode obter de volta uma lista de todos os usuários que receberam uma licença para Lync Online:
Get-MsolUser | Where-Object {$_.isLicensed -eq $true -and $_.Licenses[0].ServiceStatus[3].ProvisioningStatus -ne "Enabled"}
Isso trará de volta uma lista de usuários totalmente diferente:
UserPrincipalName DisplayName isLicensed
----------------- ----------- ----------
BonnieK@litwareinc.onmicrosoft.com Bonnie Kearney True
BrianJ@litwareinc.onmicrosoft.com Brian Johnson False
Mas e se não quisermos saber sobre licenças do Lync Online; e se você quiser saber sobre licenças do SharePoint Online? Bem, se você quiser relembrar a tabela de licenciamento, você verá que as licenças do SharePoint Online têm um número de índice de 5. Nosso exemplo de código anterior usou um número de índice de 3 (o número de índice para Lync Online) quando nós especificamos a propriedade ServiceStatus:
Get-MsolUser | Where-Object {$_.isLicensed -eq $true -and $_.Licenses[0].ServiceStatus[3].ProvisioningStatus -ne "Disabled"}
Para obter novamente as licenças do SharePoint Online, simplesmente substitua o 3 por um 5:
Get-MsolUser | Where-Object {$_.isLicensed -eq $true -and $_.Licenses[0].ServiceStatus[5].ProvisioningStatus -ne "Disabled"}
Isso realmente é fácil.
Para obter mais informações, dê uma olhada no artigo Licenciar Usuários para Cargas de Trabalho do Office 365. Isso exige um pouco de esforço para dominar as opções de licenciamento disponíveis a você usando o Windows PowerShell? Sim, exige. Esse pouco de esforço vale a pena para poder aproveitar as opções de licenciamento disponíveis para você usando Windows PowerShell? Isso realmente é você quem decide.
Mas: sim.
Uma observação rápida sobre parâmetros posicionais e o Office 365
Os cmdlets do Active Directory do Azure são diferentes dos cmdlets do Exchange e do Lync Online, pelo menos quando se trata de trabalhar com contas de usuários individuais. Por exemplo, com o Lync Online e o cmdlet Get-CsOnlineUser, você pode incluir o parâmetro Identidade no seu comando ou pode excluir o parâmetro Identidade. Em outras palavras, esses dois comandos funcionam e ambos retornam exatamente a mesma informação:
Get-CsOnlineUser -Identity "kenmyer@litwareinc.onmicrosoft.com"
Get-CsOnlineUser "kenmyer@litwareinc.onmicrosoft.com"
Mas isso não é verdadeiro para os cmdlets do Active Directory do Azure. Este comando funciona:
Get-MsolUser -UserPrincipalName "kenmyer@litwareinc.onmicrosoft.com"
Dica
Nós usamos o parâmetro UserPrincipalName aqui porque Get-MsolUser não tem um parâmetro Identidade.
Mas este comando não funciona:
Get-MsolUser "kenmyer@litwareinc.onmicrosoft.com"
Por que não? Sem entrar em muitos detalhes técnicos, muitos dos cmdlets do Lync Online e do Exchange configuram o parâmetro Identidade como um "parâmetro posicional". Isso significa que (nesses casos, de qualquer maneira), se você não especificar um nome de parâmetro (como Identidade) o cmdlet supõe que o primeiro parâmetro no comando é o parâmetro Identidade. Desde que você inicie especificando a identidade do usuário, você pode usar o parâmetro -Identidade ou não usá-lo. Qualquer uma das formas funciona:
Get-CsOnlineUser -Identity "kenmyer@litwareinc.onmicrosoft.com"
Get-CsOnlineUser "kenmyer@litwareinc.onmicrosoft.com"
No entanto, os cmdlets do Active Directory do Azure não suportam parâmetros posicionais. Suponha que você inclui um valor sem um parâmetro de acompanhamento:
Get-MsolUser "kenmyer@litwareinc.onmicrosoft.com"
Nesse caso, você receberá uma mensagem de erro como esta:
Get-MsolUser : A positional parameter cannot be found that accepts argument 'kenmyer@litwareinc.onmicrosoft.com'.
Observe, também o Exchange e o Lync Online permitem que você consulte usuários de várias formas diferentes. Por exemplo, todos esses comandos do Exchange retornam as mesmas informações de caixa de correio:
Get-Mailbox -Identity "Ken Myer"
Get-Mailbox -Identity "kenmyer@litwareinc.onmicrosoft.com"
Get-Mailbox -Identity "kenmyer"
Os comandos usam o nome para exibição do usuário do Active Directory; seu nome de usuário principal; e seu alias de email, respectivamente. Qualquer uma dessas identidades funcionará. Mas isso é com o Exchange e com o Lync Online. Para a maior parte, o Active Directory do Azure requer que você use o nome principal e apenas o nome principal de usuário:
Get-MsolUser -UserPrincipalName "kenmyer@litwareinc.onmicrosoft.com"
Dica
Bem, tecnicamente, você pode usar o parâmetro ObjectId. Mas isso requer que você digite o GUID (identificador global exclusivo) atribuído à conta de usuário. Por exemplo:
Get-MsolUser –ObjectId "62e90394-69f5-4237-9190-012177145e10"
Vamos deixá-lo decidir sozinho se usar UserPrincipalName ou ObjectId.
Reconhecidamente, pode ser muito a absorver, pelo menos para alguém novo ao Windows PowerShell. Se você for novo no Windows PowerShell você pode querer dar uma olhada no nosso artigo introdutório em trabalhando com parâmetros.
Veja também
Melhores maneiras de gerenciar o Office 365 com o Windows PowerShell