コマンド出力の操作

製品: Exchange Server 2013

Exchange 管理シェルには、コマンド出力の書式設定に使用できるいくつかの方法が含まれています。 このトピックでは、次の内容について説明します。

  • データを書式設定する方法 表示するデータの書式を制御するには、 Format-List コマンドレット、 Format-Table コマンドレット、および Format-Wide コマンドレットを使用します。

  • データを出力する方法 シェル コンソール ウィンドウまたはファイルをデータの出力先として指定するには、 Out-Host コマンドレットと Out-File コマンドレットを併用します。 このトピックには、Microsoft Internet Explorer にデータを出力するためのサンプル スクリプトが含まれています。

  • データをフィルター処理する方法 データを抽出するには、次のいずれかのフィルタリング方法を使用します。

    • 特定のコマンドレットで使用できる、サーバー側のフィルタリング。

    • コマンドの出力を Where-Object コマンドレットにパイプ処理することによって、すべてのコマンドレットで使用できる、クライアント側のフィルタリング。

このトピックで説明する機能を使用するには、次の概念を理解しておく必要があります。

データを書式設定する方法

パイプラインの最後に書式設定コマンドレットを呼び出すと、既定の書式設定を変更して、表示内容と表示方法を制御できます。 書式設定コマンドレットは、 Format-ListFormat-Table 、および Format-Wide です。 各コマンドレットは、他の書式設定コマンドレットとは異なる、固有の出力方式を持っています。

Format-List

Format-List コマンドレットは、パイプラインから入力を取得し、各オブジェクトの指定されたすべてのプロパティの一覧を縦に並べた列で出力します。 Property パラメーターを使用して、表示する プロパティ を指定できます。 パラメーターを指定しないで Format-List コマンドレットを呼び出すと、すべてのプロパティが出力されます。 Format-List コマンドレットでは、行は切り捨てられるのではなく、折り返されます。 Format-List コマンドレットの最適な使用方法の 1 つは、コマンドレットの既定の出力を変更して、追加情報やより集中した情報を取得できるようにすることです。

たとえば、 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}

2 番目の例では、 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 コマンドレットの出力は 2 番目の例と同じように、 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 コマンドレットによって、GroupBy パラメーターで指定された Extension プロパティによって項目がグループ化されています。 GroupBy パラメーターは、パイプライン ストリーム内のオブジェクトの任意の有効なプロパティと共に使用できます。

Format-Table

Format-Table コマンドレットでは、ラベル ヘッダーとプロパティ データの列が設定された表形式で項目が表示されます。 既定では、 Get-Process コマンドレットや Get-Service コマンドレットなどの多くのコマンドレットが出力に表形式を使用します。 Format-Table コマンドレットのパラメーターには、Properties パラメーターと GroupBy パラメーターが含まれます。 これらのパラメーターは、 Format-List コマンドレットの場合とまったく同じように動作します。

Format-Table コマンドレットでは、Wrap パラメーターも使用されます。 このパラメーターを使用すると、プロパティ情報が長い行になる場合でも、行末で切り捨てられることなく完全に表示されます。 Wrap パラメーターを使用して返された情報を表示する方法を確認するには、次の 2 つの例で Get-Command コマンドの出力を比較します。

最初の例では、 Get-Command コマンドレットを使用して Get-Process コマンドレットに関するコマンド情報を表示すると、 Definition プロパティの情報が切り捨てられます。

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

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

2 番目の例では、 コマンドに 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 コマンドレットにパイプ処理することによって、出力は 2 つの名前の列で表示されました。 一度に表示できるプロパティは 1 種類だけで、 Format-Wide コマンドレットの後ろに続くプロパティ名で指定しています。 Autosize パラメーターを追加すると、出力は 2 つの列から画面の幅に合わせてできるだけ多くの列に変更されます。

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

この例では、表は、2 列ではなく 5 列で表示されています。 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 パラメーターを使用して、列の数を 4 に設定しています。

データを出力する方法

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 サーバーに送信します。 そのサーバーは、クエリを処理して、指定されたフィルターと一致するデータのみを返します。

    サーバー側のフィルタリングは、何万、何十万という結果を返すことができるオブジェクトに対してのみ実行されます。 したがって、受信者管理コマンドレット ( Get-Mailbox コマンドレットなど) およびキュー管理コマンドレット ( Get-Queue コマンドレットなど) のみがサーバー側のフィルタリングをサポートしています。 これらのコマンドレットでは、 Filter パラメーターがサポートされています。 このパラメーターによって、指定されたフィルター式を取得して、処理のためにサーバーに送信します。

  • クライアント側のフィルター処理: クライアント側のフィルター処理は、現在作業しているローカル コンソール ウィンドウ内のオブジェクトに対して実行されます。 クライアント側のフィルタリングを使用した場合、コマンドレットは、ローカルなコンソール ウィンドウで実行中のタスクに一致するすべてのオブジェクトを取得します。 シェルは、返された出力をすべて取得し、それらの結果にクライアント側のフィルターを適用し、指定されたフィルターに一致する出力のみを返します。 すべてのコマンドレットは、クライアント側のフィルタリングをサポートしています。 これは、コマンドの出力を Where-Object コマンドレットにパイプ処理することによって呼び出されます。

サーバー側のフィルタリング

サーバー側のフィルタリングの実装は、サポートされているコマンドレットに固有です。 サーバー側のフィルタリングは、返されるオブジェクトの特定のプロパティに対してのみ有効です。 詳細については、次のコマンドレットのヘルプを参照してください。

         
Get-ActiveSyncDevice Get-ActiveSyncDeviceClass Get-CASMailbox Get-Contact Get-DistributionGroup
Get-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特殊変数 $です。 変数は $_シェルによって自動的に開始され、現在のパイプライン オブジェクトにバインドされます。 この特別な変数の詳細については、「 シェル変数」を参照してください。

標準の "dot" 表記 (object.property) を使用して、 Definition プロパティが追加され、評価するオブジェクトの正確なプロパティが定義されます。 次に、比較演算子は -eq 、このプロパティの値を と "Clear-Host"比較します。 この条件に一致するプロパティを Definition 持つオブジェクトのみがコンソール ウィンドウに渡され、出力されます。 比較演算子の詳細については、「比較 演算子」を参照してください。

Get-Alias コマンドレットで返されたオブジェクトを Where コマンドを介してフィルター処理した後、このフィルター処理済みオブジェクトを別のコマンドにパイプ処理できます。 Where コマンドで返されたフィルター処理済みオブジェクトのみが、次のコマンドによって処理されます。