Применимо к: Exchange Server 2010 SP1

Последнее изменение раздела: 2009-02-23

Конвейерная передача в командной консоли Exchange — это действие одного командлета, использующее выход другого командлета, когда он выполняет операцию. Конвейерная передача задается с помощью символа «|». Все глаголы в одном наборе командлетов с одинаковыми существительными могут использовать данные, переданные по конвейеру из другой команды. Некоторые наборы командлетов с одинаковым существительным позволяют также передавать данные по конвейеру в наборы командлетов с другим существительным.

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

Использование конвейерной передачи для выполнения нескольких действий

Использование конвейерной передачи для обработки данных из другого командлета

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

Использование конвейерной передачи при создании отчета об ошибках

Использование конвейерной передачи для выполнения нескольких действий

Использование конвейерной передачи для объединения в одной строке действий двух или более командлетов расширяет композиционные возможности командной консоли, позволяя составлять из небольших компонентов более эффективные средства. Например, можно использовать один командлет для сбора данных, передавать эти данные во второй командлет, чтобы отфильтровать некоторое подмножество данных, и передать его третьему командлету для обработки.

Например, следующая команда использует конвейерную передачу для перемещения всех почтовых ящиков сервера Server1 в базу данных Executives на сервере Server2 с помощью командлета Move-Mailbox, опирающегося на выходные данные, передаваемые по конвейеру из командлета Get-Mailbox:

Скопировать код
Get-Mailbox -Server Server1 | Move-Mailbox -TargetDatabase Executives

Использование конвейерной передачи для обработки данных из другого командлета

Конвейерную передачу можно использовать для обработки выходных данных командлета. Например, чтобы получить список всех процессов, у которых значение свойства HandleCount больше 400, можно выполнить следующую команду:

Скопировать код
Get-Process | Where { $_.HandleCount -gt 400 } | Format-List

В этом примере командлет Get-Process передает объекты в командлетWhere-Object. Командлет Where-Object отбирает объекты, у которых значение свойства HandleCount больше 400.

Примечание.
Where — это псевдоним командлета Where-Object. Дополнительные сведения см. в разделе Псевдонимы.

В этом примере свойство HandleCount предваряется переменной $_. Эта переменная автоматически создается в командной консоли для хранения текущего объекта конвейерной передачи. Затем командлет Where-Object передает эти объекты командлету Format-List для отображения.

Одна из самых привлекательных возможностей командной консоли — это использование вместо текста структурированных объектов. Применение структурированных объектов закладывает основу эффективной композиционной модели администрирования. Дополнительные сведения о структурированных объектах см. в разделе Структура данных.

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

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

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

В следующем примере командлеты Get-Process и New-InboxRule не являются оптимизированными для отправки объектов непосредственно между собой. Чтобы командлет New-InboxRule мог выполнить действие с объектом, предоставленным командлетом Get-Mailbox, необходимо вручную связать соответствующее свойство объекта почтового ящика с правильным параметром командлета New-InboxRule. Для этого выполните следующую команду:

Скопировать код
Get-Mailbox | ForEach { New-InboxRule -Name "Mark as Read" -Mailbox $_.Name -From john@contoso.com -MarkAsRead $True}

В этом примере нам известно, что для командлета New-InboxRule необходимо указать почтовых ящик, для которого создается новое правило для папки «Входящие». Также нам известно, что командлет Get-Mailbox выводит объект, который содержит имя каждого возвращаемого почтового ящика. С помощью командлета ForEach, который содержит команду для каждого полученного объекта, мы получаем доступ к специальной переменной $_, содержащей текущий объект в цепочке передачи. Мы можем получить доступ к свойству Name текущего объекта почтового ящика, используя синтаксис $_.Name. Зададим $_.Name в качестве аргумента параметру Mailbox командлета New-InboxRule, который предоставляет командлет с данными, необходимыми для создания нового правила для папки «Входящие».

Примечание.
ForEach — это псевдоним командлета ForEach-Object. Дополнительные сведения см. в разделе Псевдонимы.

Использование конвейерной передачи при создании отчета об ошибках

Для создания отчета об ошибках можно воспользоваться конвейером ошибок. Конвейер ошибок позволяет получать отчет об ошибках во время выполнения команды. Нет необходимости ждать, пока закончится выполнение команды, чтобы передать информацию об ошибках в стандартный конвейер результатов. Командлет Write-Error записывает значения своих аргументов в конвейер ошибок.

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

Скопировать код
Get-Help About_Pipeline

Дополнительные сведения