Импорт и экспорт файлов в командной консоли Exchange

Область применения: Exchange Server 2013 г.

Microsoft Exchange Server 2013 использует удаленное взаимодействие интерфейса командной строки Windows PowerShell для установки подключения между сервером или рабочей станцией, с которой выполняется администрирование Exchange, и сервером, на котором выполняется администрирование Exchange 2013. В Exchange 2013 это называется удаленной командной консолью Exchange или удаленной оболочкой. Даже если вы администрируете локальный сервер Exchange 2013, для подключения используется удаленная оболочка. Дополнительные сведения о локальной и удаленной оболочке см. в статье Использование PowerShell с Exchange 2013 (командная консоль Exchange).

Способ импорта и экспорта файлов на сервер Exchange Server в Exchange 2013 отличается от того, как это можно было сделать в Exchange Server 2007 г. Это связано с использованием удаленной оболочки в Exchange 2013. В этом разделе описывается, почему этот новый процесс необходим, а также как импортировать и экспортировать файлы между локальным сервером или рабочей станцией и сервером Exchange 2013.

сеансы Windows PowerShell

Чтобы понять, зачем нужен специальный синтаксис для импорта и экспорта файлов в удаленной оболочке, необходимо знать, как оболочка реализуется в Exchange 2013. Оболочка использует Windows PowerShell сеансы, которые представляют собой среды, в которых переменные, командлеты и т. д. могут обмениваться информацией. Каждый раз, когда вы открываете новое окно оболочки, вы создаете новый сеанс. Командлеты, выполняемые в каждом окне, могут получать доступ к переменным и другим сведениям, хранящимся в этом окне, но не могут обращаться к переменным в других открытых окнах оболочки. Это связано с тем, что каждый из них содержится в своем Windows PowerShell сеансе. Windows PowerShell сеансы также можно назвать пространствами выполнения.

Удаленная оболочка в Exchange 2013 имеет два сеанса: локальный и удаленный. Локальный сеанс — это сеанс Windows PowerShell, который выполняется на локальном компьютере. Этот сеанс содержит все командлеты, поставляемые с Windows PowerShell. Он также имеет доступ к локальной файловой системе.

Удаленный сеанс — это сеанс Windows PowerShell, выполняемый на удаленном сервере Exchange Server. В этом сеансе выполняются все командлеты Exchange. Он имеет доступ к файловой системе сервера Exchange Server.

При подключении к удаленному серверу Exchange Server устанавливается подключение между локальным сеансом на компьютере и удаленным сеансом на сервере Exchange Server. Это подключение позволяет выполнять командлеты Exchange на удаленном сервере Exchange в локальном сеансе, даже если на локальном компьютере не установлены командлеты Exchange. Несмотря на то, что командлеты Exchange выполняются на локальном компьютере, на самом деле они выполняются на сервере Exchange Server.

Важно!

Даже если открыть оболочку на сервере Exchange 2013, выполняется тот же процесс подключения и создаются два сеанса. Это означает, что вы должны использовать тот же новый синтаксис для импорта и экспорта файлов независимо от того, открываете ли вы оболочку на сервере Exchange 2013 или с удаленной клиентской рабочей станции.

Командлеты Exchange, которые выполняются в удаленном сеансе на удаленном сервере Exchange Server, не имеют доступа к локальной файловой системе. Это означает, что вы не можете самостоятельно использовать командлеты Exchange для импорта или экспорта файлов из локальной файловой системы или в нее. Для передачи файлов в локальную файловую систему и из нее необходимо использовать дополнительный синтаксис, чтобы командлеты Exchange, выполняемые на удаленном сервере Exchange, могли использовать данные. Дополнительные сведения о требуемом синтаксисе см. в разделе Импорт и экспорт файлов в удаленной оболочке далее в этом разделе.

Импорт и экспорт файлов в удаленной оболочке

Для импорта и экспорта файлов требуется определенный синтаксис, так как серверы почтовых ящиков и клиентского доступа используют удаленную оболочку и не имеют доступа к файловой системе локального компьютера.

Импорт файлов в удаленной оболочке

Синтаксис для импорта файлов в Exchange 2013 используется каждый раз, когда требуется отправить файл командлету, работающему на сервере Exchange 2013, с локального компьютера или сервера. Командлеты, принимаюющие данные из файла на локальном компьютере, будут иметь параметр FileData (или что-то подобное). Чтобы определить правильный параметр для использования, см. справочные сведения для используемого командлета.

Оболочка должна знать, какой файл необходимо отправить в командлет Exchange 2013 и какой параметр будет принимать данные. Для этого используйте следующий синтаксис.

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

Например, следующая команда импортирует файл C:\MyData.dat в параметр FileData в вымышленном командлете Import-SomeData .

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

При выполнении команды выполняются следующие действия:

  1. Команда принимается удаленной оболочкой.

  2. Удаленная оболочка оценивает команду и определяет, что в значении, предоставленном параметру FileData , есть внедренная команда.

  3. Удаленная оболочка прекращает вычисление команды Import-SomeData и выполняет команду [System.IO.File]::ReadAllBytes . Команда считывает данные из файла MyData.dat.

  4. Удаленная оболочка временно сохраняет данные из команды [System.IO.File]::ReadAllBytes в виде Byte[] объекта, чтобы их можно было передать в командлет Import-SomeData .

  5. Выполнение команды Import-SomeData возобновляется. Удаленная оболочка отправляет запрос на выполнение командлета Import-SomeData на удаленный сервер Exchange 2013 вместе с объектом, созданным командой [System.IO.File]::ReadAllBytes .

  6. На удаленном сервере Exchange 2013 выполняется командлет Import-SomeData , а данные, хранящиеся во временном объекте, созданном командой [System.IO.File]::ReadAllBytes , передаются в параметр FileData . Командлет Import-SomeData обрабатывает входные данные и выполняет все необходимые действия.

Или используйте следующий альтернативный синтаксис, который выполняет то же самое, что и предыдущий синтаксис.

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

Тот же процесс происходит с этим альтернативным синтаксисом. Единственное отличие заключается в том, что вместо выполнения всей операции за один раз данные, полученные из локального файла, хранятся в переменной, на которую можно ссылаться после ее создания. Затем переменная используется в команде импорта для передачи содержимого локального файла командлету Import-SomeData . Этот двухфакторный процесс полезен, если требуется использовать данные из локального файла в нескольких командах.

Существуют ограничения, которые необходимо учитывать при импорте файлов. Дополнительные сведения см. в разделе Ограничения импорта файлов далее в этом разделе.

Конкретные сведения об импорте данных в Exchange 2013 см. в разделах справки по функции, управляемой вами.

Ограничения на импорт файлов

Чтобы сохранить целостность передаваемых данных, необходимо задать ограничения при импорте данных в удаленной оболочке. Переносы, которые выполняются, не могут быть возобновлены, если они прерваны. Кроме того, так как передаваемые данные хранятся в памяти удаленного сервера, сервер должен быть защищен от нехватки памяти, вызванной чрезмерно большими объемами данных.

По этим причинам объем данных, передаваемых на удаленный сервер Exchange 2013 с локального компьютера или сервера, ограничен следующими:

  • 500 мб для каждого выполняемого командлета

  • 75 МБ для каждого объекта, переданного командлету

При превышении любого из ограничений выполнение командлета и связанного с ним конвейера остановится, и вы получите сообщение об ошибке. Рассмотрим примеры в следующей таблице, чтобы понять, как работают эти ограничения.

Импорт примеров ограничения данных

Количество объектов Размер объекта (МБ) Общий размер (МБ) Результат операции
10 40 400 Операция выполнена успешно, так как размер отдельных объектов не превышает 75 МБ, а общий объем данных, переданных командлету, не превышает 500 МБ.
5 80 400 Операция завершается ошибкой, так как, хотя общий объем данных, передаваемых командлету, составляет всего 400 МБ, размер каждого отдельного объекта превышает ограничение в 75 МБ.
120 5 600 Операция завершается ошибкой, так как, хотя каждый отдельный объект составляет всего 5 МБ, общий объем данных, передаваемых командлету, превышает ограничение в 500 МБ.

Из-за ограничений на размер, которые были наложены на объем данных, которые могут быть переданы между удаленным сервером Exchange 2013 и локальным компьютером, не все командлеты, которые когда-то поддерживали импорт, поддерживают этот метод передачи данных. Сведения о том, поддерживает ли этот метод определенный командлет, см. в справке по конкретному командлету.

Эти ограничения должны соответствовать большинству типичных операций, которые могут выполняться на сервере Exchange 2013. При снижении ограничений может оказаться, что некоторые обычные операции завершаются ошибкой, так как они превышают новые ограничения. Если ограничения будут повышены, передача передаваемых данных может занять больше времени и стать более подверженной риску временных условий, которые прерывают передачу данных. Кроме того, вы можете истощить память на удаленном сервере, если вы не установили достаточно памяти, чтобы позволить серверу хранить весь блок данных во время передачи. Каждая возможность может привести к потере данных, поэтому не рекомендуется изменять ограничения по умолчанию.

Экспорт файлов в удаленной оболочке

Синтаксис для экспорта файлов в Exchange 2013 используется каждый раз, когда вы хотите принять данные из командлета, работающего на удаленном сервере Exchange 2013, и сохранить данные на локальном компьютере или сервере. Командлеты, предоставляющие данные, которые можно сохранить в локальный файл, выведут объект, содержащий свойство FileData (или что-то подобное). В зависимости от командлета свойство FileData заполняется только объектом, который выводится в определенных ситуациях. Чтобы определить правильное свойство для использования и время его использования, см. справочные сведения для используемого командлета.

Оболочка должна знать, что вы хотите сохранить данные, хранящиеся в свойстве FileData , на локальном компьютере. Для этого используйте следующий синтаксис.

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

Например, следующая команда экспортирует данные, хранящиеся в свойстве FileData , в объект, созданный вымышленным командлетом Export-SomeData . Экспортированные данные хранятся в файле, заданном на локальном компьютере, в данном случае в MyData.dat.

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

При выполнении команды выполняются следующие действия:

  1. Команда принимается удаленной оболочкой.

  2. Удаленная оболочка вызывает командлет Export-SomeData на удаленном сервере Exchange 2013 и сохраняет результаты локально в переменной $Data.

  3. Команда [System.IO.File]::WriteAllBytes считывает данные, содержащиеся в свойстве FileData .

  4. Команда [System.IO.File]::WriteAllBytes сохраняет данные из свойства FileData в файл MyData.dat в локальной файловой системе.

Конкретные сведения об экспорте данных из Exchange 2013 см. в разделах справки по функции, управляемой вами.