Out-* Cmdlet을 사용하여 데이터 리디렉션Redirecting Data with Out-* Cmdlets

Windows PowerShell에는 데이터 출력을 직접 제어할 수 있는 여러 가지 cmdlet이 있습니다.Windows PowerShell provides several cmdlets that let you control data output directly. 이러한 cmdlet은 두 가지 중요한 특성을 공유합니다.These cmdlets share two important characteristics.

첫째, 일반적으로 이러한 cmdlet은 데이터를 특정 텍스트 형식으로 변환합니다.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.

둘째, 이러한 cmdlet은 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 cmdlet은 항상 호스트 창을 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 cmdlet은 데이터를 콘솔에 직접 보내기 때문에 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 cmdlet을 파이프라인 끝에 배치하는 것입니다.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 cmdlet에 적용되므로This applies to all of the Out cmdlets. Out cmdlet을 항상 파이프라인 끝에 배치해야 합니다.An Out cmdlet should always appear at the end of the pipeline.

참고

모든 Out cmdlet은 줄 길이 제한과 같은 콘솔 창에 적용되는 형식을 사용하여 출력을 텍스트로 렌더링합니다.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 cmdlet이 수행하는 작업과 똑같습니다.By default, Windows PowerShell sends data to the host window, which is exactly what the Out-Host cmdlet does. Out-Host cmdlet의 주된 용도는 앞에서 설명한 대로 데이터를 페이징하는 것입니다.The primary use for the Out-Host cmdlet is paging data as we discussed earlier. 예를 들어 다음 명령은 Out-Host를 사용하여 Get-Command cmdlet의 출력을 페이징합니다.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에서 moreOut-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 함수에 대한 인수로 포함하면 more 함수는 이러한 파일을 읽고 해당 내용을 호스트로 페이징합니다.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 cmdlet은 수신한 입력을 즉시 삭제하도록 설계되었습니다.The Out-Null cmdlet is designed to immediately discard any input it receives. 이 cmdlet은 명령 실행의 부작용으로 수신되는 불필요한 데이터를 삭제하는 데 유용합니다.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 cmdlet은 오류 출력을 삭제하지 않습니다.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 cmdlet을 사용하여 데이터를 인쇄할 수 있습니다.You can print data by using the Out-Printer cmdlet. 프린터 이름을 제공하지 않으면 Out-Printer cmdlet은 기본 프린터를 사용합니다.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 Document Imaging 도구가 설치되어 있으면 다음과 같이 입력하여 데이터를 이미지 파일로 보낼 수 있습니다.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 cmdlet을 사용하여 출력을 콘솔 창이 아니라 파일로 보낼 수 있습니다.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 cmdlet을 사용하면 알고 있는 것과 다른 결과가 나타날 수 있습니다.The results of using the Out-File cmdlet may not be what you expect if you are used to traditional output redirection. 이 동작을 이해하려면 Out-File cmdlet이 작동하는 컨텍스트를 알고 있어야 합니다.To understand its behavior, you must be aware of the context in which the Out-File cmdlet operates.

기본적으로 Out-File cmdlet은 유니코드 파일을 만듭니다.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 cmdlet은 콘솔에 표시된 상태로 출력을 저장하려는 경우에 가장 유용합니다.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.