Работа с выходными данными команды
Область применения: 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.