Exchange Server 2007

Assuma o comando com o Shell de Gerenciamento do Exchange

David Strome

 

Visão geral:

  • Como o Shell de Gerenciamento do Exchange funciona
  • Como usar os comandos cmdlets
  • Cmdlets vs.

Se você administra um ambiente do Exchange, estou certo de que já ouviu falar do Exchange Server 2007, que está prestes a chegar e inclui uma nova interface de linha de comando chamada Shell de Gerenciamento do Exchange. Desenvolvido com base na tecnologia Microsoft Windows PowerShell, o Exchange

Management Shell é uma robusta interface de gerenciamento que você pode usar para gerenciar cada aspecto do Exchange Server 2007 com base na linha de comando. Desse ponto em diante, você poderá interagir diretamente com o Shell de Gerenciamento do Exchange, escrever scripts para automação ou integrar seus aplicativos com o mecanismo subjacente. A Figura 1 mostra o shell em ação.

Figura 1 O Shell de Gerenciamento do Exchange

Figura 1** O Shell de Gerenciamento do Exchange **(Clique na imagem para aumentar a exibição)

O Exchange Management Console simplesmente não usa o Shell de Gerenciamento do Exchange para executar operações; os assistentes mostram quais comandos estão em execução. Copie os comandos criados pelos assistentes e cole-os diretamente na linha de comando ou em um script. Depois de modificar os parâmetros de acordo com suas necessidades, teste seus scripts ou comandos usando o parâmetro WhatIf, que lhe permite ver os resultados antes de fazer alterações em seu ambiente.

O Shell de Gerenciamento do Exchange proporciona uma plataforma de script robusta e flexível que se integra às suas atuais soluções de script e permite comunicação nativa com origens de dados como COM e WMI (Instrumentação de Gerenciamento do Windows). Com base no .NET Framework, o Shell de Gerenciamento do Exchange usa o cmdlets — a menor unidade de funcionalidade do Shell de Gerenciamento do Exchange — para aceitar e retornar dados estruturados em vez de texto sem formatação. Em breve, veremos o cmdlets em mais detalhes.

Snap-in do Windows PowerShell

O primeiro passo para entender o Shell de Gerenciamento do Exchange é verificar como ele se relaciona com o Windows PowerShell™, uma interface de linha de comando totalmente nova, poderosa e flexível, baseada no .NET Framework. Ele alia os melhores recursos de outros shells a vários outros novos recursos. O Windows PowerShell foi projetado para ser um host de outros aplicativos, muito parecido ao MMC (Console de Gerenciamento Microsoft) que atua como um host para os vários snap-ins fornecidos com aplicativos. O Shell de Gerenciamento do Exchange é o primeiro snap-in do Windows PowerShell a ser lançado.

Snap-ins são coleções de cmdlets usados para administrar um aplicativo ou componente importante. Se você não carregá-los primeiro, não poderá usá-los. Por sorte, é extremamente fácil iniciar o snap-in do Shell de Gerenciamento do Exchange. Mas antes de abordar esse assunto, devo explicar alguns dos principais conceitos que você precisará entender ao ler este artigo e usar o Shell de Gerenciamento do Exchange.

Cmdlets - cmdlets são semelhantes a comandos internos de outros shells, por exemplo, o comando dir encontrado em cmd.exe. Como esses comandos conhecidos, os cmdlets podem ser chamados diretamente da linha de comando no Shell de Gerenciamento do Exchange e executados no contexto do shell, não como um processo separado. Diferentemente dos comandos em outros shells, os cmdlets têm nomes descritivos no formato verbo-substantivo. O verbo descreve a ação do cmdlet e o substantivo descreve o componente ou recurso em ação.

Você não precisa adivinhar o que um cmdlet faz. Quando vir o cmdlet Move-Mailbox (Mover-caixa de correio), você saberá exatamente para que ele serve.

Para consultar como os cmdlets diferem dos comandos comuns, consulte a barra lateral "Cmdlets vs. Commands", na seção .NET Framework 3.0 do Windows® SDK e que pode ser encontrada em windowssdk.msdn.microsoft.com/en-us/library/ms714395.aspx.

Parâmetros Identity e Positional. O parâmetro Identity pode ser usado com a maioria dos cmdlets relacionados ao Exchange. Ele proporciona acesso aos identificadores exclusivos que se referem a um objeto específico no Exchange Server 2007 para que você possa executar ações em um objeto específico do Exchange usando o valor exclusivo que faz mais sentido para você.

O parâmetro Identity é uma coleção de valores de outros parâmetros. Há uma garantia de que esses valores sejam exclusivos nesse conjunto de objetos. Você pode especificar os valores de outros parâmetros, como Name e DistinguishedName, ou eles podem ser gerados pelo sistema, como um GUID. Questões como a existência de outros parâmetros utilizados e o modo como são preenchidos dependem do objeto em referência.

O parâmetro Identity também é considerado um parâmetro posicional — que permite especificar seu valor sem especificar o nome. Um parâmetro é posicional quando o atributo Parameter Position é um número inteiro. Esse número inteiro indica a posição na linha de comando onde o cmdlet poderá encontrar o valor do parâmetro. Como o parâmetro Identity é um parâmetro posicional residente na posição 0, que é a primeira posição, qualquer valor inserido nessa posição sem um nome de parâmetro é considerado um valor de parâmetro Identity. Isso reduz o número de pressionamento de teclas quando você digita comandos. Por exemplo

Get-Mailbox –Identity "Kim Akers" 

executa a mesma ação de:

Get-Mailbox "Kim Akers"

Pipelining - Pipelining no Shell de Gerenciamento do Exchange é o ato de um cmdlet que usa a saída de outro cmdlet ao executar uma operação. Pipelining é feito com o uso do símbolo "|" (pipe ou barra vertical). Todos os verbos no mesmo conjunto de cmdlets-substantivos podem usar as informações em pipe de outro comando. Alguns conjuntos de cmdlets-substantivos permitem que você passe dados pelo pipeline para outro conjunto de cmdlets-substantivos.

Ao lançar mão de pipelining para encadear as ações de dois ou mais cmdlets, você poderá usar componentes menores e convertê-los em algo mais potente. Por exemplo, é possível usar um cmdlet para reunir dados, passá-los para um segundo cmdlet onde serão filtrados formando um subconjunto e de onde, finalmente, serão passados para um terceiro cmdlet que atuará apenas no subconjunto.

Como iniciar o Shell de Gerenciamento do Exchange

O modo mais simples de carregar o shell é clicar em Iniciar, clicar em Programas, Microsoft Exchange Server 2007 e, em seguida, clicar em Shell de Gerenciamento do Exchange.

O segundo modo de carregar o snap-in do Shell de Gerenciamento do Exchange é o manual, executado em uma seção do Windows PowerShell. Clique em Iniciar, Programas e, em seguida, clique em Windows PowerShell. Após a inicialização do sistema, execute o seguinte comando para carregar o Shell de Gerenciamento do Exchange:

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin

Há algumas diferenças entre carregar o snap-in do Shell de Gerenciamento do Exchange usando a entrada pelo menu Programas e o modo manual através do cmdlet Add-PSSnapin. Quando você usa a entrada pelo menu Programas, além de carregar o snap-in do Shell de Gerenciamento do Exchange, carrega também um script do Windows PowerShell para configurar um ambiente de administração personalizado do Exchange. Se quiser configurar um ambiente administrativo semelhante depois de carregar o Shell de Gerenciamento do Exchange manualmente, altere a pasta de instalação do Exchange — por exemplo, C:\Program Files\Microsoft\Exchange Server\Bin. Depois, execute o seguinte comando:

.\Exchange.ps1

Consulte o script Exchange.ps1 para ver como personalizar o ambiente do Windows PowerShell de acordo com suas necessidades. Ao carregar o Shell de Gerenciamento do Exchange, você verá algo semelhante à Figura 2.

Figura 2 Faixa de boas-vindas do Shell de Gerenciamento do Exchange

Figura 2** Faixa de boas-vindas do Shell de Gerenciamento do Exchange **(Clique na imagem para aumentar a exibição)

Por onde começo?

Como o shell tem uma extensa matriz de cmdlets, o cmdlet Get-Help e o arquivo de Ajuda do Exchange Server 2007 serão recursos imprescindíveis. A seção Operations no arquivo de Ajuda do Exchange Server 2007 fornece vários procedimentos explicativos para execução da maioria das tarefas administrativas.

Basta digitar Get-Help para exibir informações gerais sobre como obter ajuda. Para encontrar ajuda sobre um determinado cmdlet, digite Get-Help seguido pelo cmdlet sobre o qual deseja obter informações. Você pode controlar as informações que serão apresentadas usando os parâmetros Detailed, Full e Example. Apenas adicione-os ao final do comando. Por exemplo, o Get-Helpnome do cmdlet – Full retorna todas as seções da ajuda disponíveis sobre esse cmdlet.

Se você quiser recuperar informações sobre um ou mais parâmetros de um cmdlet, poderá usar o parâmetro Parameters com Get-Help. Portanto, se quiser ver todos os parâmetros e as respectivas descrições no cmdlet Set-Mailbox que contém a palavra "quota," use o comando:

Get-Help Set-Mailbox –Parameter *quota*

Você pode desejar consultar uma lista de cmdlets que gerenciam uma função específica do servidor, um recurso do componente ou que afetem objetos em um determinado escopo de funcionalidade. O cmdlet Get-Help permite executar essas ações com três parâmetros: Role, Component e Functionality. Ao usar o cmdlet Get-Help com esses parâmetros, você deverá colocar os valores que especificar com esses parâmetros entre caracteres curinga, "*". Seguem exemplos de como chamar o Get-Help com cada parâmetro:

Get-Help -Role *Mailbox*
Get-Help -Component *Recipient*
Get-Help -Functionality *Server*

Para obter mais informações, o tópico "Getting Help" no arquivo de Ajuda do Exchange Server 2007 relaciona todos os valores de função, componente e funcionalidade que podem ser usados.

Como formatar a saída do comando

Por padrão, quando a saída é exibida na tela, o Shell de Gerenciamento do Exchange exibe somente um subconjunto das propriedades disponíveis de cada objeto. Entretanto, você pode obter acesso facilmente a todas as propriedades canalizando a saída de um comando para estes três cmdlets de formatação: Format-List, Format-Table e Format-Wide. Como é provável que você use Format-List e Format-Table regularmente, falarei sobre isso de forma mais específica.

O cmdlet Format-List pega a entrada do pipeline e coloca a saída em uma lista de colunas verticais com todas as propriedades especificadas de cada objeto. Você pode especificar quais propriedades deseja exibir usando o parâmetro Property (embora este seja um parâmetro posicional, ou seja, que exige a especificação apenas dos valores e não do nome do parâmetro). Se o cmdlet Format-List for chamado sem nenhum parâmetro especificado, todas as propriedades serão exibidas. Esse cmdlet quebra as linhas em vez de truncá-las. Um dos melhores usos do Format-List é substituir a saída padrão de um cmdlet de modo que você possa recuperar informações adicionais ou mais específicas. Por exemplo:

Get-DistributionGroup | Format-List Name, *OnlyFrom, 
PrimarySmtpAddress, *Size*

A Figura 3 mostra a saída desse comando.

Figura 3 Exemplo de saída do Format-List

Figura 3** Exemplo de saída do Format-List **(Clique na imagem para aumentar a exibição)

O cmdlet Format-Table permite exibir itens no formato de tabela com cabeçalhos e colunas dos dados de propriedade. Por padrão, vários cmdlets, como Get-Mailbox e Get-JournalRule, usam o formato de tabela como saída. Entre os parâmetros do cmdlet Format-Table estão Properties e GroupBy. Esses parâmetros funcionam exatamente como no cmdlet Format-List. Para obter longas linhas de informações sobre propriedade exibidas completamente em vez de truncadas no fim de uma linha, use o parâmetro Wrap, deste modo:

Get-Mailbox –Database Research | Format-Table Name, 
ProhibitSendQuota, Database –Wrap 

Consulte a Figura 4 para ver a saída.

Figura 4 Exemplo de saída do Format-Table

Figura 4** Exemplo de saída do Format-Table **(Clique na imagem para aumentar a exibição)

Se você incluir um caractere curinga, poderá vincular várias propriedades sem precisar digitar o nome de cada uma delas individualmente. Por exemplo, isto retorna todas as propriedades que começam com Email.

Get-Mailbox | Format-List Email* 

Hora de praticar

Agora que você conhece os comandos básicos, por que não exercitar com os exemplos a seguir? Eles ilustram a força e a flexibilidade do Shell de Gerenciamento do Exchange e permitem que você coloque a mão na massa.

Com o comando do primeiro exercício, você criará 10 usuários, User1 a User10:

1..10 | ForEach { Net User "User$_" MyPassword=01 /ADD 
/Domain; Enable-Mailbox "User$_" -Database "Mailbox 
Database" }

Vejamos em partes. O comando 1.0 gera números inteiros de 1 a 10 e os passa pelo pipeline ao cmdlet ForEach. O cmdlet ForEach age em cada objeto como o recebeu e executa os comandos dentro das chaves { } referentes a cada objeto. O comando Net User cria um novo usuário de domínio e o cmdlet Enable-Mailbox cria uma nova caixa de correio no "Mailbox Database" no servidor local. O ponto-e-vírgula separa os dois comandos para que possam ser colocados na mesma linha de comando. $_ variable é uma variável especial que contém o valor do objeto atual no pipeline. Neste exemplo, $_ variable contém o número inteiro que está no pipeline no momento.

No próximo exemplo, você poderá ver as caixas de correio residentes no servidor MBX e retornar as propriedades Name, Mailbox Database e Quota de cada caixa de correio.

Get-Mailbox –Server MBX | Format-Table 
Name,Database,*quota*

O cmdlet Get-Mailbox retorna cada caixa de correio com o parâmetro Server e coloca a saída em pipe de cada objeto de caixa de correio para o cmdlet Format-Table. Por padrão, o cmdlet Format-Table exibe todas as propriedades retornadas por um cmdlet a menos que você especifique quais propriedades deverão ser exibidas. Aqui, somente as propriedades Name e Database, bem como todas as propriedades que contêm a cadeia de caracteres "quota", serão solicitadas. A Figura 5 mostra a aparência dessa saída.

Figura 5 Saída do comando Get-Mailbox

Figura 5** Saída do comando Get-Mailbox **(Clique na imagem para aumentar a exibição)

Neste exemplo, você definirá o limite de quota de envio como 600MB para todos os usuários com email habilitado, em toda a organização, e que tenham a palavra "Gerente" no cargo.

Get-User –Filter { Title –Like "*Manager*"} 
–RecipientTypeDetails UserMailbox | Set-Mailbox 
–ProhibitSendQuota 600MB

O cmdlet Get-User é executado automaticamente e retorna todos os objetos de usuários no Active Directory, incluindo os usuários sem caixa de correio habilitada. Para recuperar um conjunto de objetos de usuários que podem ser usados pelo cmdlet Set-Mailbox, você precisa instruir o cmdlet Get-User a retornar somente os objetos de usuário do Active Directory que consistam em usuários com email habilitado. O parâmetro RecipientTypeDetails permite especificar o tipo de destinatário do Active Directory, neste caso, UserMailbox. Em seguida, é necessário recuperar o conjunto de usuários com email habilitado e o cargo de gerente. Neste exemplo, a propriedade Title de cada objeto de usuário do Active Directory é preenchida. Você pode usar esse valor para determinar quais usuários são gerentes usando o parâmetro Filter, que instrui o servidor a retornar somente os objetos do Active Directory que correspondam aos seus critérios. Isso se chama filtragem do lado do servidor. Uma vez definido, o conjunto de objetos passa para o cmdlet Set-Mailbox, que então define a propriedade ProhibitSendQuota de cada caixa de correio como 600MB.

Em seguida, testaremos o resultado de um comando para remover todas as caixas de correio que sejam membros de um grupo de distribuição. Este é o comando:

Get-DistributionGroupMember "Fourth Year Students" |
 Where { $_.RecipientType –Eq "UserMailbox" } | Remove-
 Mailbox -WhatIf

O primeiro cmdlet recupera os objetos de destinatário que sejam membros do grupo de distribuição Fourth Year Students. Então, somente os objetos de destinatário que correspondam ao RecipientType de "UserMailbox" passarão para o cmdlet Remove-Mailbox. Em vez de remover as caixas de correio, o cmdlet Remove-Mailbox exibirá a ação a ser realizada e os objetos sobre os quais executará alguma ação. O cmdlet Get-DistributionGroupMember recupera uma lista com todos os objetos de destinatário que sejam membros do grupo de distribuição "Fourth Year Students". Entretanto, como o cmdlet Remove-Mailbox funciona somente com usuários com email habilitado, você terá de excluir todos os tipos de destinatário, exceto os que tenham o parâmetro "UserMailbox". Diferentemente de outros cmdlets, o cmdlet Get-DistributionGroupMember não tem o cmdlet Filter, ou seja, você não poderá executar a filtragem do lado do servidor. Para cmdlets que não podem realizar a filtragem do lado do servidor (porque não vêem nenhum benefício em termos de desempenho), você pode usar o cmdlet Where para realizar a filtragem do lado do cliente, que recupera todos os objetos e executa a filtragem no computador local do cliente. O cmdlet Where permite somente a passagem de objetos que correspondam aos critérios especificados. Os objetos com RecipientType de "UserMailbox" são enviados para o cmdlet Remove-Mailbox. Esse cmdlet remove o objeto de usuário do Active Directory e marca a caixa de correio para remoção. Quando o parâmetro WhatIf é usado, o cmdlet Remove-Mailbox exibe um texto semelhante ao seguinte:

What if: Removing the Mailbox "contoso.com/Users
/user10" will remove the Windows user object and mark 
the mailbox in the database for removal.

Se estiver satisfeito que o comando realize as ações desejadas, execute-o novamente sem o parâmetro WhatIf. Para determinados cmdlets, como os que têm o verbo Remove, o shell pedirá automaticamente confirmação antes de fazer alterações. Você tem a opção de seguir a alteração passo a passo, instruir o shell a não solicitar confirmação novamente ou cancelar processamento posterior. Para cmdlets que não implementam confirmação automaticamente, você pode forçar a confirmação usando o parâmetro Confirm.

Conclusão

Agora que você tem uma noção básica sobre o potencial do cmdlet, está pronto para experimentar e constatar como o Shell de Gerenciamento do Exchange e o Microsoft Windows PowerShell em suas futuras tarefas de gerenciamento de sistemas. Se quiser ler mais a respeito desses dois tópicos, consulte os seguintes recursos. Para obter informações sobre o Management Shell, consulte o arquivo de Ajuda do Exchange Server 2007 em go.microsoft.com/fwlink/?LinkId=69434, o centro de scripts do Windows Powershell em go.microsoft.com/fwlink/?LinkId=71134, e o blog da equipe do Exchange em msexchangeteam.com (em inglês).

David Strome foi redator técnico com o grupo de Instrução aos usuários do Exchange na Microsoft por pouco mais de um ano. Antes de entrar na Microsoft em Redmond, WA, David passou cerca de 10 anos desenvolvendo, implementando e administrando instalações do Exchange Server em várias empresas em British Columbia, Canadá. Ele pode ser contatado pelo email: dstrome@microsoft.com.

© 2008 Microsoft Corporation e CMP Media, LLC. Todos os direitos reservados. A reprodução parcial ou completa sem autorização é proibida..