Out-* コマンドレットを使用してデータをリダイレクトするRedirecting Data with Out-* Cmdlets

Windows PowerShell には、データ出力を直接制御できるようにするコマンドレットがいくつかあります。Windows PowerShell provides several cmdlets that let you control data output directly. これらのコマンドレットには、2 つの重要な特性があります。These cmdlets share two important characteristics.

まず、これらのコマンドレットは、通常、データをいくつかの形式のテキストに変換します。First, they generally transform data to some form of text. コマンドレットは、テキスト入力を必要とするシステム コンポーネントにデータを出力するので、変換を実行します。They do this because they output the data to system components that require text input. これは、コマンドレットがオブジェクトを文字列として表現する必要があることを意味します。This means they need to represent the objects as text. したがって、テキストは Windows PowerShell のコンソール ウィンドウに表示される形式に書式設定されます。Therefore, the text is formatted as you see it in the Windows PowerShell console window.

2 番目に、これらのコマンドレットは、Windows PowerShell から他の場所に情報を送信するために、Windows PowerShell の動詞 Out を使用します。Second, these cmdlets use the Windows PowerShell verb Out because they send information out from Windows PowerShell to somewhere else. Out-Host コマンドレットも例外ではありません。ホスト ウィンドウ表示は、Windows PowerShell の外部で行われます。The Out-Host cmdlet is no exception: the host window display is outside of Windows PowerShell. これは、Windows PowerShell の外部にデータが送信されるときに、データが実際に削除されるので、重要です。This is important because when data is sent out of Windows PowerShell, it is actually removed. ホスト ウィンドウにデータをページングするパイプラインを作成しようとする場合に、これが発生します。次に示すように、リストとして書式設定を試みます。You can see this if you try to create a pipeline that pages data to the host window, and then attempt to format it as a list, as shown here:

Get-Process | Out-Host -Paging | Format-List

リスト形式で処理情報のページを表示するコマンドと思ったかもしれません。You might expect the command to display pages of process information in list format. そうではなく、既定の表形式のリストが表示されます。Instead, it displays the default tabular list:

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    101       5     1076       3316    32     0.05   2888 alg
...
    618      18    39348      51108   143   211.20    740 explorer
    257       8     9752      16828    79     3.02   2560 explorer
...
<SPACE> next page; <CR> next line; Q quit
...

Out-Host コマンドレットは、データを直接にコンソールに送信します。したがって、Format-List コマンドは、書式を設定するものを何も受信しません。The Out-Host cmdlet sends the data directly to the console, so the Format-List command never receives anything to format.

このコマンドを構築する正しい方法は、次に示すように、Out-Host コマンドレットをパイプラインの最後に置くことです。The correct way to structure this command is to put the Out-Host cmdlet at the end of the pipeline as shown below. これによって、データがページングされて表示される前に、リスト形式に書式設定するよう処理されます。This causes the process data to be formatted in a list before being paged and displayed.

PS> Get-Process | Format-List | Out-Host -Paging

Id      : 2888
Handles : 101
CPU     : 0.046875
Name    : alg
...

Id      : 740
Handles : 612
CPU     : 211.703125
Name    : explorer

Id      : 2560
Handles : 257
CPU     : 3.015625
Name    : explorer
...
<SPACE> next page; <CR> next line; Q quit
...

これは、すべての Out コマンドレットに適用されます。This applies to all of the Out cmdlets. Out コマンドレットは、常にパイプラインの末尾に置く必要があります。An Out cmdlet should always appear at the end of the pipeline.

注意

すべての Out コマンドレットは、コンソール ウィンドウに有効な書式設定 (行の長さの制限を含む) を使用して、テキストとして出力を表示します。All the Out cmdlets render output as text, using the formatting in effect for the console window, including line length limits.

コンソール出力のページング (Out-Host)Paging Console Output (Out-Host)

既定では、Windows PowerShell は、データをホスト ウィンドウに送信します。実際にそのことを実行するのが Out-Host コマンドレットです。By default, Windows PowerShell sends data to the host window, which is exactly what the Out-Host cmdlet does. Out-Host コマンドレットの主な用途は、前に説明したようにデータのページングです。The primary use for the Out-Host cmdlet is paging data as we discussed earlier. たとえば、次のコマンドは、Out-Host を使用して、Get-Command コマンドレットの出力をページングします。For example, the following command uses Out-Host to page the output of the Get-Command cmdlet:

Get-Command | Out-Host -Paging

more 関数を使用して、データをページングすることも可能です。You can also use the more function to page data. Windows PowerShell では、more は、Out-Host -Paging を呼び出す関数です。In Windows PowerShell, more is a function that calls Out-Host -Paging. 次のコマンドの使用例は、more 関数を使用して、Get-Command の出力をページングします。The following command demonstrates using the more function to page the output of Get-Command:

Get-Command | more

more 関数の引数として、1 つ以上のファイル名を含める場合、関数は指定されたファイルを読み取り、ホストにその内容をページングします。If you include one or more filenames as arguments to the more function, the function will read the specified files and page their contents to the host:

PS> more c:\boot.ini
[boot loader]
timeout=5
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
...

出力の破棄 (Out-Null)Discarding Output (Out-Null)

Out-Null コマンドレットは、受け取ったすべての入力を直ちに破棄するよう設計されています。The Out-Null cmdlet is designed to immediately discard any input it receives. これは、コマンドを実行する副作用として受け取る不要なデータを破棄するのに便利です。This is useful for discarding unnecessary data that you get as a side-effect of running a command. 次のコマンドを入力すると、コマンドからは何も返ってきません。When type the following command, you do not get anything back from the command:

Get-Command | Out-Null

Out-Null コマンドレットは、エラー出力を破棄しません。The Out-Null cmdlet does not discard error output. たとえば、次のようにコマンドを入力する場合、Windows PowerShell が 'Is-NotACommand' を認識しないことを通知するメッセージが表示されます。For example, if you enter the following command, a message is displayed informing you that Windows PowerShell does not recognize 'Is-NotACommand':

PS> Get-Command Is-NotACommand | Out-Null
Get-Command : 'Is-NotACommand' is not recognized as a cmdlet, function, operabl
e program, or script file.
At line:1 char:12
+ Get-Command  <<<< Is-NotACommand | Out-Null

データの印刷 (Out-Printer)Printing Data (Out-Printer)

Out-Printer コマンドレットを使用してデータを印刷できます。You can print data by using the Out-Printer cmdlet. Out-Printer コマンドレットは、プリンター名を指定しない場合、通常使うプリンターを使用します。The Out-Printer cmdlet will use your default printer if you do not provide a printer name. 任意の Windows ベースのプリンターを、その表示名を指定して使用できます。You can use any Windows-based printer by specifying its display name. どんな種類のプリンター ポートのマッピングも (実際の物理プリンターの場合でも) 必要ありません。There is no need for any kind of printer port mapping or even a real physical printer. たとえば、Microsoft Office 文書のイメージング ツールがインストールされている場合、次のように入力して、データをイメージ ファイルに送信できます。For example, if you have the Microsoft Office document imaging tools installed, you can send the data to an image file by typing:

Get-Command Get-Command | Out-Printer -Name 'Microsoft Office Document Image Writer'

データの保存 (Out-File)Saving Data (Out-File)

Out-File コマンドレットを使用して、出力をコンソール ウィンドウにではなく、ファイルに送信することができます。You can send output to a file instead of the console window by using the Out-File cmdlet. 次のコマンド ラインは、プロセスの一覧をファイル C:\temp\processlist.txt に送信します。The following command line sends a list of processes to the file C:\temp\processlist.txt:

Get-Process | Out-File -FilePath C:\temp\processlist.txt

従来の出力のリダイレクトを使用している場合、Out-File コマンドレットを使用した結果は、期待どおりではない可能性があります。The results of using the Out-File cmdlet may not be what you expect if you are used to traditional output redirection. その動作を理解するために、Out-File コマンドレット操作の状況を把握しておく必要があります。To understand its behavior, you must be aware of the context in which the Out-File cmdlet operates.

既定では、Out-File コマンドレットは、Unicode ファイルを生成します。By default, the Out-File cmdlet creates a Unicode file. 長期的には、これが最適な既定です。しかし、ASCII ファイルを前提とするツールは、既定の出力形式では正しく動作しないことになります。This is the best default in the long run, but it means that tools that expect ASCII files will not work correctly with the default output format. Encoding パラメーターを使用して、既定の出力フォーマットを ASCII 形式に変更することができます。You can change the default output format to ASCII by using the Encoding parameter:

Get-Process | Out-File -FilePath C:\temp\processlist.txt -Encoding ASCII

Out-file は、ファイルの内容をコンソール出力に表示されるように書式設定します。Out-file formats file contents to look like console output. これによって、ほとんどの状況で、コンソール ウィンドウ内に表示されるのと同じように、出力は切り捨てられます。This causes the output to be truncated just as it is in a console window in most circumstances. たとえば、次のようにコマンドを実行します。For example, if you run the following command:

Get-Command | Out-File -FilePath c:\temp\output.txt

出力は次のようになります。The output will look like this:

CommandType     Name                            Definition
-----------     ----                            ----------
Cmdlet          Add-Content                     Add-Content [-Path] <String[...
Cmdlet          Add-History                     Add-History [[-InputObject] ...
...

行の折り返しを画面の幅に合わせないで出力するには、Width パラメーターを使用して行の幅を指定します。To get output that does not force line wraps to match the screen width, you can use the Width parameter to specify line width. Width が 32 ビットの整数パラメーターであるため、最大値は 2147483647 です。Because Width is a 32-bit integer parameter, the maximum value it can have is 2147483647. 行の幅に、この最大値を設定するには、次のように入力します。Type the following to set the line width to this maximum value:

Get-Command | Out-File -FilePath c:\temp\output.txt -Width 2147483647

Out-File コマンドレットは、ちょうどコンソールに表示されるように出力を保存する場合、最も役立ちます。The Out-File cmdlet is most useful when you want to save output as it would have displayed on the console. 出力書式設定をさらに細かく制御するには、より高度なツールが必要です。For finer control over output format, you need more advanced tools. 次の章で、これらについて、またオブジェクト操作についての詳細を説明します。We will look at those in the next chapter, along with some details about object manipulation.