Importar e exportar arquivos no Shell de Gerenciamento do Exchange

Aplica-se a: Exchange Server 2013

Microsoft Exchange Server 2013 usa Windows PowerShell interface de linha de comando para estabelecer uma conexão entre o servidor ou a estação de trabalho da qual você está administrando o Exchange e o servidor que executa o Exchange 2013 que você está administrando. No Exchange 2013, isso é chamado de Shell de Gerenciamento remoto do Exchange ou Shell remoto. Mesmo que você esteja administrando o servidor local do Exchange 2013, o Shell remoto é usado para fazer a conexão. Para obter mais informações sobre o Shell local e remoto, consulte Usando o PowerShell com o Exchange 2013 (Shell de Gerenciamento do Exchange).

Como você importa e exporta arquivos de e para um servidor exchange no Exchange 2013 é diferente de como você pode ter feito isso em Exchange Server 2007. Isso ocorre devido ao uso do Shell remoto no Exchange 2013. Este tópico discute por que esse novo processo é necessário e como importar e exportar arquivos entre um servidor local ou uma estação de trabalho e um servidor do Exchange 2013.

Windows PowerShell sessões

Para entender por que você precisa de uma sintaxe especial para importar e exportar arquivos no Shell remoto, você precisa saber como o Shell é implementado no Exchange 2013. O Shell usa Windows PowerShell sessões, que são os ambientes em que variáveis, cmdlets e assim por diante, podem compartilhar informações. Sempre que você abre uma nova janela do Shell, cria uma nova sessão. Os cmdlets executados em cada janela podem acessar variáveis e outras informações armazenadas nessa janela, mas não podem acessar variáveis em outras janelas abertas do Shell. Isso ocorre porque cada um deles está contido em sua própria sessão de Windows PowerShell. Windows PowerShell sessões também podem ser chamadas de runspaces.

O Shell Remoto no Exchange 2013 tem duas sessões, a sessão local e a sessão remota. A sessão local é a sessão Windows PowerShell que está em execução no computador local. Esta sessão contém todos os cmdlets que são enviados com Windows PowerShell. Ele também tem acesso ao sistema de arquivos local.

A sessão remota é a sessão Windows PowerShell que está em execução no servidor remoto do Exchange. Esta sessão é onde todos os cmdlets do Exchange são executados. Ele tem acesso ao sistema de arquivos do servidor exchange.

Quando você se conecta a um servidor exchange remoto, uma conexão é feita entre a sessão local no computador e a sessão remota no servidor exchange. Essa conexão permite que você execute cmdlets do Exchange no servidor remoto do Exchange em sua sessão local, embora seu computador local não tenha nenhum cmdlets do Exchange instalados. Mesmo que os cmdlets do Exchange pareçam estar em execução no computador local, eles estão realmente em execução no servidor exchange.

Importante

Mesmo se você abrir o Shell em um servidor do Exchange 2013, o mesmo processo de conexão ocorrerá e duas sessões serão criadas. Isso significa que você deve usar a mesma sintaxe nova para importar e exportar arquivos, quer esteja abrindo o Shell em um servidor do Exchange 2013 ou em uma estação de trabalho de cliente remoto.

Os cmdlets do Exchange executados na sessão remota no servidor remoto do Exchange não têm acesso ao sistema de arquivos local. Isso significa que você não pode usar cmdlets do Exchange, por conta própria, para importar ou exportar arquivos de ou para o sistema de arquivos local. A sintaxe adicional precisa ser usada para transferir os arquivos de e para o sistema de arquivos local para que os cmdlets do Exchange em execução no servidor remoto do Exchange possam usar os dados. Para obter mais informações sobre a sintaxe necessária, confira "Importar e exportar arquivos no Shell remoto" mais tarde neste tópico.

Importar e exportar arquivos no Shell remoto

Importar e exportar arquivos requer uma sintaxe específica porque os servidores mailbox e client access usam o Shell remoto e não têm acesso ao sistema de arquivos do computador local.

Importação de arquivos no Shell remoto

A sintaxe para importar arquivos no Exchange 2013 é usada sempre que você deseja enviar um arquivo para um cmdlet em execução em um servidor do Exchange 2013 do computador ou servidor local. Os cmdlets que aceitam dados de um arquivo no computador local terão um parâmetro chamado FileData (ou algo semelhante). Para determinar o parâmetro correto a ser usado, consulte as informações de ajuda para o cmdlet que você está usando.

O Shell deve saber qual arquivo você deseja enviar para o cmdlet do Exchange 2013 e qual parâmetro aceitará os dados. Para fazer isso, use a sintaxe a seguir.

<Cmdlet> -FileData ([System.IO.File]::ReadAllBytes('<local path to file>'))

Por exemplo, o comando a seguir importa o arquivo C:\MyData.dat para o parâmetro FileData no cmdlet fictício Import-SomeData .

Import-SomeData -FileData ([System.IO.File]::ReadAllBytes('C:\MyData.dat'))

As seguintes ações ocorrem quando o comando é executado:

  1. O comando é aceito pelo Shell remoto.

  2. O Shell Remoto avalia o comando e determina que há um comando inserido no valor que está sendo fornecido ao parâmetro FileData .

  3. O Shell Remoto interrompe a avaliação do comando Import-SomeData e executa o comando [System.IO.File]::ReadAllBytes . O comando lê os dados do arquivo MyData.dat.

  4. O Shell Remoto armazena temporariamente os dados do comando [System.IO.File]::ReadAllBytes como um Byte[] objeto para que possam ser passados para o cmdlet Import-SomeData .

  5. A execução do comando Import-SomeData é retomada. O Shell Remoto envia a solicitação para executar o cmdlet Import-SomeData para o servidor remoto do Exchange 2013, juntamente com o objeto criado pelo comando [System.IO.File]::ReadAllBytes .

  6. No servidor remoto do Exchange 2013, o cmdlet Import-SomeData é executado e os dados armazenados no objeto temporário criado pelo comando [System.IO.File]::ReadAllBytes são passados para o parâmetro FileData . O cmdlet Import-SomeData processa a entrada e executa todas as ações necessárias.

Ou use a sintaxe alternativa a seguir que realiza a mesma coisa que a sintaxe anterior.

$Data = [System.IO.File]::ReadAllBytes('<local path to file>')
Import-SomeData -FileData $Data

O mesmo processo acontece com essa sintaxe alternativa. A única diferença é que, em vez de executar toda a operação ao mesmo tempo, os dados recuperados do arquivo local são armazenados em uma variável que pode ser referenciada após sua criação. Em seguida, a variável é usada no comando de importação para passar o conteúdo do arquivo local para o cmdlet Import-SomeData . Usar esse processo de duas etapas é útil quando você deseja usar os dados do arquivo local em mais de um comando.

Há limitações que você deve considerar ao importar arquivos. Para obter mais informações, confira "Limitações na importação de arquivos" posteriormente neste tópico.

Para obter informações específicas sobre como importar dados para o Exchange 2013, confira os tópicos de Ajuda para o recurso que você está gerenciando.

Limitações na importação de arquivos

Os limites devem ser definidos ao importar dados no Shell remoto para preservar a integridade dos dados que estão sendo transferidos. As transferências que estão em andamento não poderão ser retomadas se forem interrompidas. Além disso, como os dados que estão sendo transferidos são armazenados na memória do servidor remoto, o servidor deve ser protegido contra o esgotamento da memória causado por quantidades excessivamente grandes de dados.

Por esses motivos, a quantidade de dados transferidos para um servidor remoto do Exchange 2013 de um computador ou servidor local é limitada ao seguinte:

  • 500 megabytes (MB) para cada cmdlet executado

  • 75 MB para cada objeto que é passado para um cmdlet

Se você exceder qualquer um dos limites, a execução do cmdlet e do pipeline associado será interrompida e você receberá um erro. Considere os exemplos na tabela a seguir para entender como esses limites funcionam.

Importar exemplos de limite de dados

Número de objetos Tamanho do objeto (MB) Tamanho total (MB) Resultado da operação
10 40 400 A operação é bem-sucedida porque nem o tamanho dos objetos individuais excede 75 MB nem a quantidade total de dados passados para o cmdlet excede 500 MB.
5 80 400 A operação falha porque, embora a quantidade total de dados passados para o cmdlet seja de apenas 400 MB, o tamanho de cada objeto individual excede o limite de 75 MB.
120 5 600 A operação falha porque, embora cada objeto individual seja de apenas 5 MB, a quantidade total de dados passados para o cmdlet excede o limite de 500 MB.

Devido aos limites de tamanho que foram colocados na quantidade de dados que podem ser transferidos entre um servidor remoto do Exchange 2013 e um computador local, nem todos os cmdlets que uma vez deram suporte à importação dão suporte a esse método de transferência de dados. Para determinar se um cmdlet específico dá suporte a esse método, consulte as informações de ajuda para o cmdlet específico.

Esses limites devem acomodar a maioria das operações típicas que podem ser executadas em um servidor do Exchange 2013. Se os limites forem reduzidos, você poderá descobrir que algumas operações normais falham porque excedem os novos limites. Se os limites forem elevados, os dados que estão sendo transferidos poderão levar mais tempo para serem transferidos e ficar mais em risco para condições transitórias que interrompem a transferência de dados. Além disso, você poderá esgotar a memória no servidor remoto se não tiver instalado memória suficiente para permitir que o servidor armazene todo o bloco de dados durante a transferência. Cada possibilidade pode resultar em perda de dados e, portanto, recomendamos que você não altere os limites padrão.

Exportando arquivos no Shell remoto

A sintaxe para exportar arquivos no Exchange 2013 é usada sempre que você deseja aceitar dados de um cmdlet em execução em um servidor remoto do Exchange 2013 e armazenar os dados em seu computador ou servidor local. Cmdlets que fornecem dados que você pode salvar em um arquivo local produzirão um objeto que conterá a propriedade FileData (ou algo semelhante). Dependendo do cmdlet, a propriedade FileData só é preenchida no objeto que é saída em situações específicas. Para determinar a propriedade correta a ser usada e quando ela pode ser usada, consulte as informações de ajuda para o cmdlet que você está usando.

O Shell deve saber que você deseja salvar os dados armazenados na propriedade FileData no computador local. Para fazer isso, use a sintaxe a seguir.

$Variable = <cmdlet>
[System.IO.File]::WriteAllBytes('<local path to file>', $Variable.FileData)

Por exemplo, o comando a seguir exporta os dados armazenados na propriedade FileData no objeto criado pelo cmdlet fictício Export-SomeData . Os dados exportados são armazenados em um arquivo que você especifica no computador local, nesse caso MyData.dat.

$Data = Export-SomeData
[System.IO.File]::WriteAllBytes('C:\MyData.dat', $Data.FileData)

As seguintes ações ocorrem quando o comando é executado:

  1. O comando é aceito pelo Shell remoto.

  2. O Shell Remoto chama o cmdlet Export-SomeData no servidor remoto do Exchange 2013 e armazena os resultados localmente na variável $Data.

  3. O comando [System.IO.File]::WriteAllBytes lê os dados contidos na propriedade FileData .

  4. O comando [System.IO.File]::WriteAllBytes salva os dados da propriedade FileData para o arquivo MyData.dat no sistema de arquivos local.

Para obter informações específicas sobre como exportar dados do Exchange 2013, confira os tópicos de Ajuda para o recurso que você está gerenciando.