Работа с выходными данными команды

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

В командной консоли Exchange предложено несколько методов форматирования выходных данных команды. В этом разделе обсуждаются следующие темы:

  • Форматирование данных Управление форматированием отображаемых данных с помощью командлетов Format-List, Format-Table и Format-Wide.

  • Вывод данных Указание на необходимость выводить данные в окно командной консоли или в файл с помощью командлетов Out-Host и Out-File. В этом разделе представлен пример скрипта для вывода данных в Microsoft Internet Explorer.

  • Фильтрация данных Фильтрация данных осуществляется с помощью одного из следующих методов фильтрации:

    • Фильтрация на стороне сервера, доступная в некоторых командлетах

    • Фильтрация на стороне клиента, доступная во всех командлетах при конвейерной передаче результатов выполнения команды в командлет Where-Object

Чтобы использовать функциональные возможности, описанные в этом разделе, необходимо ознакомиться со следующими разделами:

Форматирование данных

Если в конце конвейерной передачи вызываются командлеты форматирования, можно переопределить форматирование по умолчанию, чтобы управлять составом данных и способом их отображения. Командлетами форматирования являются командлеты Format-List, Format-Table и Format-Wide. У каждого командлета имеется особый стиль вывода, отличающийся от стилей других командлетов форматирования.

Format-List

Командлет Format-List принимает данные по конвейеру и отображает список с вертикальными столбцами, в который включены все указанные свойства каждого объекта. Вы можете указать, какие свойства нужно отобразить, с помощью параметра Property . Если командлет Format-List был вызван без указанных параметров, возвращаются все свойства. Командлет Format-List переносит строки, а не усекает их. Одно из лучших применений командлета Format-List — это переопределение способа отображения данных по умолчанию для получения дополнительных или более точных сведений.

Например, при вызове командлета Get-Mailbox будет отображаться только ограниченное количество сведений в виде таблицы. Если передать по конвейеру данные, возвращаемые командлетом Get-Mailbox, в командлет Format-List и добавить параметры для отображения дополнительных или более точных сведений, можно получить необходимые данные.

Также можно указать подстановочный знак * с частью имени свойства. Если используется подстановочный знак, можно подбирать несколько свойств без необходимости ввода имени каждого свойства. Например, возвращает все свойства, Get-Mailbox | Format-List -Property Email* начинающиеся с Email.

В следующих примерах показаны различные способы просмотра одних и тех же данных, возвращаемых командлетом Get-Mailbox.

Get-Mailbox TestUser1

Name                      Alias                ServerName       ProhibitSendQuota
----                      -----                ----------       ---------------
TestUser1                 TestUser1            mbx              unlimited

В первом примере командлет Get-Mailbox вызывается без определенного форматирования, так что выходные данные по умолчанию будут отображаться в виде таблицы и содержать предварительно определенный набор свойств.

Get-Mailbox TestUser1 | Format-List -Property Name,Alias,EmailAddresses

Name           : TestUser1
Alias          : TestUser1
EmailAddresses : {SMTP:TestUser1@contoso.com}

Во втором примере выходные данные командлета Get-Mailbox передаются по конвейеру в командлет Format-List вместе с определенными свойствами. Как видно в этом примере, форматирование и содержимое выходных данных заметно отличается от предыдущего примера.

Get-Mailbox TestUser1 | Format-List -Property Name, Alias, Email*
Name                      : Test User
Alias                     : TestUser1
EmailAddresses            : {SMTP:TestUser1@contoso.com}
EmailAddressPolicyEnabled : True

В последнем примере выходные данные командлета Get-Mailbox направляются в командлет Format-List, как и во втором примере. Однако в последнем примере подстановочный знак используется для сопоставления всех свойств, которые начинаются с Email.

Если в командлет Format-List передается несколько объектов, отображаются все указанные для объектов свойства, сгруппированные по объектам. Порядок отображения зависит от параметра командлета по умолчанию. По умолчанию чаще всего используется параметр Name или Identity . Например, если вызывается командлет Get-Childitem, порядком отображения по умолчанию будет являться список имен файлов в алфавитном порядке. Чтобы изменить это поведение, необходимо вызвать командлет Format-List вместе с параметром GroupBy и именем значения свойства, по которому требуется сгруппировать выходные данные. Например, с помощью следующей команды можно отобразить список всех файлов в каталоге и сгруппировать их по расширениям.

Get-Childitem | Format-List Name,Length -GroupBy Extension

Extension: .xml

Name   : Config_01.xml
Length : 5627

Name   : Config_02.xml
Length : 3901

Extension: .bmp

Name   : Image_01.bmp
Length : 746550

Name   : Image_02.bmp
Length : 746550

Extension: .txt

Name   : Text_01.txt
Length : 16822

Name   : Text_02.txt
Length : 9835

В этом примере командлет Format-List сгруппировал элементы по свойству Extension , указанному параметром GroupBy . В потоке передачи по конвейеру можно использовать параметр GroupBy с любым допустимым свойством объектов.

Format-Table

Командлет Format-Table позволяет отображать элементы в виде таблицы с заголовками и столбцами данных свойств. По умолчанию многие командлеты, например: Get-Process и Get-Service, используют формат таблицы для отображения возвращаемых данных. Параметры командлета Format-Table включают параметры Properties и GroupBy . Они имеют те же функции, что и аналогичные параметры командлета Format-List.

Командлет Format-Table также использует параметр Wrap . При задании этого параметра включается полное отображение свойств вместо усечения каждого конца строки. Чтобы узнать, как параметр Wrap используется для отображения возвращаемых сведений, сравните выходные данные команды Get-Command в следующих двух примерах.

В первом примере, когда командлет Get-Command используется для отображения сведений о командлете Get-Process , сведения о свойстве Definition усекаются.

Get-Command Get-Process | Format-Table Name,Definition

Name                                    Definition
----                                    ----------
get-process                             get-process [[-ProcessName] String[]...

Во втором примере параметр Wrap добавляется в команду для принудительного отображения полного содержимого свойства Definition .

Get-Command Get-Process | Format-Table Name,Definition -Wrap

Get-Process                             Get-Process [[-Name] <String[]>] [-Comp
                                        uterName <String[]>] [-Module] [-FileVe
                                        rsionInfo] [-Verbose] [-Debug] [-ErrorA
                                        ction <ActionPreference>] [-WarningActi
                                        on <ActionPreference>] [-ErrorVariable
                                        <String>] [-WarningVariable <String>] [
                                        -OutVariable <String>] [-OutBuffer <Int
                                            32>]
                                        Get-Process -Id <Int32[]> [-ComputerNam
                                        e <String[]>] [-Module] [-FileVersionIn
                                        fo] [-Verbose] [-Debug] [-ErrorAction <
                                        ActionPreference>] [-WarningAction <Act
                                        ionPreference>] [-ErrorVariable <String
                                        >] [-WarningVariable <String>] [-OutVar
                                        iable <String>] [-OutBuffer <Int32>]
                                        Get-Process [-ComputerName <String[]>]
                                        [-Module] [-FileVersionInfo] -InputObje
                                        ct <Process[]> [-Verbose] [-Debug] [-Er
                                        rorAction <ActionPreference>] [-Warning
                                        Action <ActionPreference>] [-ErrorVaria
                                        ble <String>] [-WarningVariable <String
                                        >] [-OutVariable <String>] [-OutBuffer
                                        <Int32>]

Как и в случае с командлетом Format-List , можно также указать подстановочный знак "*" с частичным именем свойства. Если используется подстановочный знак, можно отбирать различные свойства без необходимости ввода имени каждого свойства.

Format-Wide

С помощью командлета Format-Wide обеспечивается более простое управление выходными данными по сравнению с другими командлетами форматирования. По умолчанию командлет Format-Wide пытается отобразить по возможности как можно большее количество столбцов значений свойств в строке вывода. С помощью добавляемых параметров можно управлять количеством столбцов и использованием свободного места в отображаемых данных.

Основной способ применения — это вызов командлета Format-Wide без параметров, что приведет к отображению такого количества столбцов, какое сможет уместиться на странице. Например, если выполняется командлет Get-Childitem и его данные передаются по конвейеру в командлет Format-Wide, будет отображено следующее:

Get-ChildItem | Format-Wide

Directory: FileSystem::C:\WorkingFolder

Config_01.xml                           Config_02.xml
Config_03.xml                           Config_04.xml
Config_05.xml                           Config_06.xml
Config_07.xml                           Config_08.xml
Config_09.xml                           Image_01.bmp
Image_02.bmp                            Image_03.bmp
Image_04.bmp                            Image_05.bmp
Image_06.bmp                            Text_01.txt
Text_02.txt                             Text_03.txt
Text_04.txt                             Text_05.txt
Text_06.txt                             Text_07.txt
Text_08.txt                             Text_09.txt
Text_10.txt                             Text_11.txt
Text_12.txt

Как правило, вызов командлета Get-Childitem без параметров приведет к отображению имен всех файлов в каталоге в таблице свойств. В этом примере выходные данные, передаваемые по конвейеру из командлета Get-Childitem в командлет Format-Wide, были отображены в двух столбцах с именами. Заметьте, что единовременно может быть отображен только один тип свойств, указанный именем свойства, которое следует за командлетом Format-Wide. Если добавить параметр Autosize , выходные данные будут изменены с двух столбцов на столько столбцов, сколько может соответствовать ширине экрана.

Get-ChildItem | Format-Wide -AutoSize

Directory: FileSystem::C:\WorkingFolder

Config_01.xml   Config_02.xml   Config_03.xml   Config_04.xml   Config_05.xml
Config_06.xml   Config_07.xml   Config_08.xml   Config_09.xml   Image_01.bmp
Image_02.bmp    Image_03.bmp    Image_04.bmp    Image_05.bmp    Image_06.bmp
Text_01.txt     Text_02.txt     Text_03.txt     Text_04.txt     Text_05.txt
Text_06.txt     Text_07.txt     Text_08.txt     Text_09.txt     Text_10.txt
Text_11.txt     Text_12.txt

В этом примере таблица разбита на пять столбцов вместо двух. Параметр Column обеспечивает более широкий контроль, позволяя указать максимальное количество столбцов для отображения сведений следующим образом:

Get-ChildItem | Format-Wide -Column 4

Directory: FileSystem::C:\WorkingFolder

Config_01.xml       Config_02.xml       Config_03.xml       Config_04.xml
Config_05.xml       Config_06.xml       Config_07.xml       Config_08.xml
Config_09.xml       Image_01.bmp        Image_02.bmp        Image_03.bmp
Image_04.bmp        Image_05.bmp        Image_06.bmp        Text_01.txt
Text_02.txt         Text_03.txt         Text_04.txt         Text_05.txt
Text_06.txt         Text_07.txt         Text_08.txt         Text_09.txt
Text_10.txt         Text_11.txt         Text_12.txt

В этом примере с помощью параметра Column было принудительно задано количество столбцов, равное четырем.

Вывод данных

Командлеты Out-Host и Out-File

Командлет Out-Host является скрытым командлетом по умолчанию, используемым в конце передачи по конвейеру. После применения форматирования командлет Out-Host отправляет последние выходные данные в окно консоли для их отображения. Нет необходимости явно вызывать командлет Out-Host, так как это делается по умолчанию. Можно переопределить отправку выходных данных в окно консоли с помощью командлета Out-File, поставив его последним командлетом в команде. Затем командлет Out-File записывает выходные данные в файл, который указывается пользователем в команде, как показано в следующем примере:

Get-ChildItem | Format-Wide -Column 4 | Out-File c:\OutputFile.txt

В этом примере командлет Out-File записывает сведения, отображаемые в команде Get-ChildItem | Format-Wide -Column 4 , в файл с именем OutputFile.txt. Вы также можете перенаправить выходные данные конвейера в файл с помощью оператора перенаправления, который является правой угловой скобкой ( > ). Чтобы добавить выходные данные конвейера команды в существующий файл без замены исходного файла, используйте двойные угловые скобки ( >> ), как показано в следующем примере:

Get-ChildItem | Format-Wide -Column 4 >> C:\OutputFile.txt

В этом примере выходные данные командлета Get-Childitem передаются в командлет Format-Wide для форматирования, а затем записываются в конец OutputFile.txt файла. Обратите внимание, что если OutputFile.txt файл не существует, то при использовании двойных угловых скобок ( >> ) он будет создан.

Дополнительные сведения о конвейерах см. в разделе about_Pipelines.

Дополнительные сведения о синтаксисе, использованном в предыдущих примерах, см. в разделе Syntax.

Просмотр данных в браузере Internet Explorer

Вследствие гибкости и простоты создания сценариев в командной консоли Exchange, можно форматировать данные, возвращаемые командами, и отображать их всеми различными способами.

В следующем примере показано, как можно использовать простой сценарий для обработки данных, возвращаемых командой, и отображения их в браузере Internet Explorer. В этом сценарии используются объекты, переданные по конвейеру, открывается окно браузера Internet Explorer, а затем в Internet Explorer отображаются данные:

$Ie = New-Object -Com InternetExplorer.Application
$Ie.Navigate("about:blank")
While ($Ie.Busy) { Sleep 1 }
$Ie.Visible = $True
$Ie.Document.Write("$Input")
# If the previous line doesn't work on your system, uncomment the line below.
# $Ie.Document.IHtmlDocument2_Write("$Input")
$Ie

Чтобы использовать этот скрипт, сохраните его в C:\Program Files\Microsoft\Exchange Server\V15\Scripts каталоге на компьютере, где будет выполняться скрипт. Назовите файл Out-Ie.ps1. После сохранения файла можно использовать этот сценарий как стандартный командлет.

Примечание.

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

Скрипт Out-Ie предполагает, что получаемые данные являются допустимыми HTML-кодами. Чтобы преобразовать просматриваемые данные в формат HTML, необходимо передать результаты выполнения команды по конвейеру в командлет ConvertTo-Html. Затем результаты этой команды можно передать в Out-Ie скрипт. В следующем примере показано, как просматривать список каталогов в окне Internet Explorer:

Get-ChildItem | Select Name,Length | ConvertTo-Html | Out-Ie

Фильтрация данных

Командная консоль предоставляет доступ к большому количеству сведений о серверах, почтовых ящиках, службе каталогов Active Directory и других объектах в организации. Несмотря на то что доступ к этим сведениям способствует лучшему представлению о среде, эти большие объемы сведений могут поставить пользователя в затруднительное положение. С помощью командной консоли можно управлять этими сведениями и получать только необходимые данные с помощью фильтров. Доступны следующие два типа фильтрации:

  • Фильтрация на стороне сервера. Фильтрация на стороне сервера принимает фильтр, указанный в командной строке, и отправляет его на сервер Exchange Server, к которому выполняется запрос. Сервер обрабатывает запрос и возвращает только те данные, которые соответствуют указанному фильтру.

    Фильтрация на стороне сервера выполняется только с теми объектами, которые могут вернуть десятки или сотни тысяч результатов. Поэтому только командлеты управления получателями (например, командлет Get-Mailbox ) и командлеты управления очередями (например, командлет Get-Queue ) поддерживают фильтрацию на стороне сервера. Эти командлеты поддерживают параметр Filter . Этот параметр использует указанное выражение фильтра и передает его на сервер для обработки.

  • Фильтрация на стороне клиента. Фильтрация на стороне клиента выполняется для объектов в окне локальной консоли, в котором вы сейчас работаете. При использовании этой фильтрации командлет получает в окне локальной консоли все объекты, которые соответствуют выполняемой задаче. Затем в командной консоли используются все возвращенные результаты, к ним применяется фильтр на стороне клиента и возвращаются только те результаты, которые соответствуют фильтру. Фильтрацию на стороне клиента поддерживают все командлеты. Эту фильтрацию можно выполнить путем конвейерной передачи результатов команды в командлет Where-Object.

Фильтрация на стороне сервера

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

         
Get-ActiveSyncDevice Get-ActiveSyncDeviceClass Get-CASMailbox Get-Contact Получить DistributionGroup
Получить DynamicDistributionGroup Get-Group Get-Mailbox Get-MailboxStatistics Get-MailContact
Get-MailPublicFolder Get-MailUser Get-Message Get-MobileDevice Get-Queue
Get-QueueDigest Get-Recipient Get-RemoteMailbox Get-RoleGroup Get-SecurityPrincipal
Get-StoreUsageStatistics Get-UMMailbox Get-User Get-UserPhoto Remove-Message
Resume-Message Resume-Queue Retry-Queue Suspend-Message Suspend-Queue

Фильтрация на стороне клиента

Фильтрацию на стороне клиента можно использовать с любым командлетом. Эта возможность включает в себя командлеты, которые также поддерживают фильтрацию на стороне сервера. Как описано ранее в этом разделе, клиентская фильтрация принимает все данные, возвращаемые предыдущей командой в конвейере, и, в свою очередь, возвращает только результаты, соответствующие указанному фильтру. Эту фильтрацию выполняет командлет Where-Object . Его можно сократить до Where.

В процессе передачи по конвейеру командлет Where получает данные от предыдущего объекта, затем фильтрует данные перед их направлением к следующему объекту. Фильтрация основана на блоке сценария, который определен в команде Where. Этот блок сценария фильтрует данные, основываясь на свойствах и значениях объектов.

Командлет Clear-Host используется для очистки окна консоли. В этом примере можно найти все определенные псевдонимы для командлета Clear-Host, если будет выполнена следующая команда:

Get-Alias | Where {$_.Definition -eq "Clear-Host"}

CommandType     Name                            Definition
-----------     ----                            ----------
Alias           clear                           clear-host
Alias           cls                             clear-host

Командлет Get-Alias и команда Where взаимодействуют, чтобы возвратить список псевдонимов, которые были определены исключительно для командлета Clear-Host. В следующей таблице показан каждый элемент команды Where, который используется в этом примере.

Элементы команды Where

Элемент Описание
{ } Фигурные скобки ограничивают блок сценария, в котором определен фильтр.
$_ С помощью этой специальной переменной можно автоматически инициировать и связать объекты в конвейере.
Definition Свойство Definition является свойством текущих объектов конвейера, в котором хранится имя определения псевдонима. Если Definition используется с переменной $_ , точка находится перед именем свойства.
-eq Этот оператор сравнения "равно" используется для указания на то, что результат должен точно соответствовать значению свойства, представленному в выражении.
Clear-Host В этом примере "Clear-Host" является значением для анализа команды.

В этом примере объекты, возвращенные командлетом Get-Alias, представляют все определенные псевдонимы в системе. Даже если они не видны из командной строки, псевдонимы собираются и передаются в командлет Where по конвейеру. Командлет Where использует сведения в блоке сценария для применения фильтра к объектам псевдонимов.

Специальная переменная $_represents передаваемых объектов. Переменная $_автоматически инициируется оболочкой и привязана к текущему объекту конвейера. Дополнительные сведения об этой специальной переменной см. в разделе Переменные оболочки.

С помощью стандартной нотации "точка" (object.property) Definition свойство добавляется для определения точного свойства вычисляемого объекта. Затем -eq оператор сравнения сравнивает значение этого свойства с "Clear-Host". Только объекты, имеющие свойство, соответствующее Definition этому критерию, передаются в окно консоли для вывода. Дополнительные сведения об операторах сравнения см. в разделе Операторы сравнения.

После завершения фильтрации командой Where объектов, возвращенных командлетом Get-Alias, отфильтрованные объекты затем могут быть переданы по конвейеру в другую команду. Следующая команда обрабатывает только отфильтрованные объекты, возвращенные командой Where.