Script com o Shell de Gerenciamento do Exchange

 

Aplica-se a: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

Tópico modificado em: 2009-12-18

Para a maioria das tarefas, basta executar cmdlets separadamente ou em conjunto, através de pipelines. Porém, às vezes convém automatizar tarefas. O Shell de Gerenciamento do Exchange oferece suporte a uma grande variedade de linguagens de script, com base no Microsoft .NET Framework, que se assemelha à linguagem de script em outros shells. O Shell de Gerenciamento do Exchange permite criar scripts, desde os mais simples aos mais complexos. Há suporte também para construções de linguagem para loop, condicional, controle de fluxo e atribuição de variável.

Toda organização possui tarefas que, de alguma forma, são exclusivas. Com uma biblioteca de arquivos de script para executar essas tarefas, os administradores podem economizar tempo e executá-los em qualquer computador que possua o Shell de Gerenciamento do Exchange instalado.

Para obter mais informações sobre como usar scripts, consulte Scripts com Windows PowerShell (página em inglês). O guia de scripts para o Windows PowerShell se aplica ao Shell de Gerenciamento do Exchange, pois o Shell de Gerenciamento do Exchange se baseia na tecnologia do Microsoft Windows PowerShell.

Executando um script no Shell de Gerenciamento do Exchange

Os usuários que conjecem o ambiente do Cmd.exe sabem como executar os scripts de shell de comando. Eles são simplesmente arquivos texto com a extensão .bat no nome do arquivo. Assim como nos arquivos em lote, você pode criar os arquivos de script do Shell de Gerenciamento do Exchange em um editor de texto, como o Bloco de Notas. Os arquivos de script do Shell de Gerenciamento do Exchange usam a extensão de nome de arquivo .ps1.

O Shell de Gerenciamento do Exchange usa um diretório raiz para arquivos de script quando eles são chamados. Por padrão, o diretório raiz é o diretório <root drive>:\Program Files\Microsoft\Exchange Server\bin. Você também pode verificar o diretório PSHome atual em qualquer computador que esteja executando o Shell de Gerenciamento do Exchange ao executar o $PSHome a partir de uma linha de comando. Esses dois diretórios estão na variável de ambiente PATH.

Se um arquivo de script for salvo no diretório raiz, você poderá chamá-lo usando o nome de script. Se o arquivo de script estiver localizado em algum lugar que não seja a localização atual, o caminho e o nome do script deverão ser usados. Se o arquivo de script estiver localizado na localização atual, o nome do script deverá iniciar por .\.

Os exemplos a seguir mostram os requisitos da sintaxe de comando para chamar três scripts diferentes. Todos esses exemplos usam o cmdlet Get-Date, de três localizações diferentes.

[PS] C:\>Get-Date-Script-A.ps1
Friday, January 20, 2006 3:13:01 PM

O arquivo de script Get-Date-Script-A.ps1 está localizado no diretório especificado pelo $PSHhome e necessita somente do nome do script para ser executado.

[PS] C:\>c:\workingfolder\Get-Date-Script-B.ps1
Friday, January 20, 2006 3:13:25 PM

O arquivo de script Get-Date-Script-B.ps1 está localizado no diretório C:\workingfolder, de modo que, para que esse arquivo seja executado, é necessário que o caminho completo seja fornecido.

[PS] C:\>.\Get-Date-Script-C.ps1
Friday, January 20, 2006 3:13:40 PM

O arquivo de script Get-Date-Script-C.ps1 está localizado na localização atual, C:\. Portanto, ele deve ser precedido de .\ para ser executado.

[PS] C:\>Get-Date-Script-C.ps1
'Get-Date-Script-C.ps1' is not recognized as a Cmdlet, function, operable program, or script file.
At line:1 char:21
+ Get-Date-Script-C.ps1 <<<<

No último exemplo, quando o mesmo script Get-Date-Script-C.ps1, é chamado sem o prefixo .\, os resultados esperados são mostrados.

Como prática recomendável, sempre atribua aos arquivos de script um nome descritivo e inclua comentários no script para descrever seu objetivo e identificar cada ponto de interesse. Algumas informações sobre o autor também devem ser incluídas, caso a pessoa que esteja executando o script tenha dúvidas em relação ao seu uso. Use o símbolo de tralha (#) para iniciar linhas de comentário dentro do corpo do script.

Executando um script no Cmd.exe

Para executar um script regularmente através do serviço Tarefas Agendadas do Windows, chame o Shell de Gerenciamento do Exchange e inclua o script a ser executado como um parâmetro. Como o Shell de Gerenciamento do Exchange é um snap-in do Windows PowerShell, carregue também o snap-in do Shell de Gerenciamento do Exchange ao executar o comando, para executar quaisquer cmdlets relacionados ao Exchange. A seguinte sintaxe é necessária para carregar o snap-in do Shell de Gerenciamento do Exchange e executar seu script no comando Cmd.exe:

PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\Bin\ExShell.Psc1" -Command ". '<Path to Your Script>'"

Por exemplo, para executar o script RetrieveMailboxes.ps1 de C:\My Scripts, use o seguinte comando:

PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\Bin\ExShell.Psc1" -Command ". 'C:\My Scripts\RetrieveMailboxes.ps1'"

Para obter opções adicionais a serem usadas quando você for chamar o Shell de Gerenciamento do Exchange a partir do ambiente Cmd.exe, digite PowerShell.exe /?

Obtendo dicas sobre o Console de Gerenciamento do Exchange

No Microsoft Exchange Server 2007, você pode usar o Console de Gerenciamento do Exchange para exibir informações detalhadas sobre comandos específicos do Shell de Gerenciamento do Exchange, usados para executar determinadas tarefas. Quando você executa um assistente no Console de Gerenciamento do Exchange, esse assistente usa as informações inseridas e cria um comando do Shell de Gerenciamento do Exchange que, posteriormente, é executado pelo computador. Você pode copiar e colar esse comando diretamente no Shell de Gerenciamento do Exchange ou copiá-lo para um editor de texto onde você poderá modificá-lo. Se você examinar como o Console de Gerenciamento do Exchange cria comandos, compreenderá melhor como construir e modificar esses comandos de forma a adequá-los às suas necessidades futuras.

Por exemplo, se você criar uma nova caixa de correio para uma pessoa chamada Frank Lee, as seguintes informações serão exibidas na página Conclusão do Assistente de Nova Caixa de Correio:

Figura 1   Página de conclusão do Assistente de Nova Caixa de Correio

Página Conclusão de nova caixa de correio

As informações exibidas na página Conclusão dão uma idéia sobre os tipos de informações necessárias para que um comando semelhante a ser executado no Shell de Gerenciamento do Exchange seja concluído com êxito. Na página Conclusão, pressione CTRL+C para copiar essas informações na Área de Transferência. Em seguida, você pode usar um editor de texto para examinar o comando e determinar o que deve ser alterado para que sejam adicionadas mais caixas de diálogo. Você também pode personalizar o comando para ser usado como parte de um script que consome um arquivo de valores separados por vírgulas (CSV) ou pode personalizar outra fonte de entrada para automatizar a criação de muitas caixas de diálogo.

Testando Scripts

Quando você cria novos scripts, deve sempre testá-los em um ambiente de laboratório antes de aplicá-los ao ambiente de produção. À medida que você testa os scripts no laboratório e os implanta no ambiente de produção, é possível usar o parâmetro WhatIf (disponível em muitos cmdlets incluídos no Shell de Gerenciamento do Exchange) para verificar se o script apresenta o desempenho esperado. O parâmetro WhatIf instrui o comando que ele deve executar a apenas exibir os objetos afetados, no caso da execução desse comando, e as alterações que seriam feitas nesses objetos, sem realmente alterar nenhum deles.

Para obter mais informações sobre o parâmetro WhatIf, consulte Parâmetros WhatIf, Confirm e ValidateOnly.

Solução de problemas em scripts

Os scripts podem não funcionar conforme esperado por vários motivos. Talvez seja difícil determinar onde está o problema e o que está errado. O Shell de Gerenciamento do Exchange pode ajudar a localizar erros gerais de sintaxe, informando a linha e o caractere no ponto da falha. Quando a sintaxe de um script está correta, mas o seu comportamento é imprevisto, é bem mais difícil diagnosticar o problema. O Shell de Gerenciamento do Exchange inclui uma funcionalidade de depuração simples que serve para solucionar problemas em arquivos de script. Isso é feito ao examinar cada etapa executada pelo script durante a sua execução. Essa funcionalidade é chamada de rastreamento.

Para permitir o rastreamento e examinar cada etapa do comando em um script, use o cmdlet Set-PSDebug com o parâmetro Trace definido com um valor de 1. Para examinar cada etapa e cada atribuição de variável à medida que criadas, defina o parâmetro Trace com o valor 2. Para desligar o rastreamento, defina o valor do parâmetro Trace como 0 (zero).

Para examinar cada comando, linha por linha, em um script, use o cmdlet Set-PSDebug com o parâmetro Step. Em todas as etapas, você será solicitado a continuar a operação. As seguintes opções estão disponíveis no modo Step:

[Y] Yes (continue to the next step)
[A] Yes to All (continue to the end of the script)
[N] No (stop this step)
[L] No to All (stop all remaining steps)
[S] Suspend (suspend at this point and drop to a prompt)

Suspend permite sair para um prompt no qual você possa executar qualquer comando, por exemplo, verificar ou definir valores em um objeto antes que o script possa acessá-lo. Quando você estiver pronto para prosseguir a execução de um script, digite Sair e o controle retorna imediatamente para o ponto em que o script foi suspenso.