Share via


출력 리디렉션

PowerShell에는 데이터 출력을 직접 제어할 수 있는 여러 가지 cmdlet이 있습니다. 이러한 cmdlet은 두 가지 중요한 특성을 공유합니다.

첫째, 일반적으로 데이터를 텍스트 형식으로 변환합니다. 텍스트 입력이 필요한 시스템 구성 요소에 데이터를 출력하기 때문에 이 작업을 수행합니다. 즉, 개체를 텍스트로 나타내야 합니다. 따라서 PowerShell 콘솔 창에 표시되는 대로 텍스트의 형식이 지정됩니다.

둘째, 이러한 cmdlet은 PowerShell에서 다른 위치로 정보를 내보내기 때문에 PowerShell의 동사 Out을 사용합니다.

콘솔 출력

기본적으로 PowerShell은 데이터를 호스트 창으로 보내는데, 이는 Out-Host cmdlet이 수행하는 작업과 똑같습니다. cmdlet의 Out-Host 기본 용도는 페이징입니다. 예를 들어 다음 명령은 cmdlet의 Get-Command 출력을 페이징하는 데 사용합니다Out-Host.

Get-Command | Out-Host -Paging

호스트 창은 PowerShell의 외부에 표시됩니다. 이는 PowerShell에서 데이터를 내보낼 때 실제로 데이터가 제거되기 때문에 중요합니다. 다음과 같이 데이터를 호스트 창으로 페이징하는 파이프라인을 만든 다음 목록 형식으로 지정해 보면 이 동작을 재현할 수 있습니다.

Get-Process | Out-Host -Paging | Format-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
...

cmdlet은 Out-Host 데이터를 콘솔로 직접 보내므로 Format-List 명령은 형식을 지정할 아무 것도 수신하지 않습니다.

이 명령을 구성하는 올바른 방법은 다음과 같이 Out-Host cmdlet을 파이프라인 끝에 배치하는 것입니다. 이렇게 하면 프로세스 데이터가 페이징되고 표시되기 전에 목록에 서식이 지정됩니다.

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에 적용됩니다. Out cmdlet은 항상 파이프라인의 끝에 표시됩니다.

참고 항목

모든 Out cmdlet은 줄 길이 제한과 같은 콘솔 창에 적용되는 형식을 사용하여 출력을 텍스트로 렌더링합니다.

출력 삭제

Out-Null cmdlet은 수신하는 입력을 즉시 카드 있도록 설계되었습니다. 이는 명령 실행의 부작용으로 발생하는 불필요한 데이터를 카드 데 유용합니다. 다음 명령을 입력하면 명령에서 아무 것도 반환되지 않습니다.

Get-Command | Out-Null

Out-Null cmdlet은 오류 출력을 삭제하지 않습니다. 예를 들어 다음 명령을 입력하면 PowerShell이 Is-NotACommand를 인식할 수 없다는 메시지가 나타납니다.

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

데이터 인쇄

Out-Printer는 Windows 플랫폼에서만 사용할 수 있습니다.

Out-Printer cmdlet을 사용하여 데이터를 인쇄할 수 있습니다. 프린터 이름을 제공하지 않으면 Out-Printer cmdlet은 기본 프린터를 사용합니다. 표시 이름을 지정하여 Windows 기반 프린터를 사용할 수 있습니다. 프린터 포트 매핑이나 심지어 실제 프린터도 필요하지 않습니다. 예를 들어 Microsoft Office 문서 이미징 도구가 설치된 경우 다음을 입력하여 이미지 파일로 데이터를 보낼 수 있습니다.

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

데이터 저장

Out-File cmdlet을 사용하여 출력을 콘솔 창이 아니라 파일로 보낼 수 있습니다. 다음 명령줄은 프로세스 목록을 파일 C:\temp\processlist.txt로 보냅니다.

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

기존 출력 리디렉션에 Out-File 사용되는 경우 cmdlet 사용 결과가 예상과 다를 수 있습니다. 해당 동작을 이해하려면 cmdlet이 작동하는 컨텍스트를 Out-File 알고 있어야 합니다.

Window PowerShell 5.1에서 Out-File cmdlet은 유니코드 파일을 만듭니다. ASCII 파일이 필요한 일부 도구는 기본 출력 형식에서 제대로 작동하지 않습니다. 다음과 같이 Encoding 매개 변수를 사용하여 기본 출력 형식을 ASCII로 변경할 수 있습니다.

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

Out-file 은 파일 내용을 콘솔 출력처럼 보이도록 서식을 지정합니다. 대부분의 경우 콘솔 창에서처럼 출력이 잘립니다. 예를 들어 다음 명령을 실행하는 경우

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

출력은 다음과 같이 표시됩니다.

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

출력할 때 화면 너비에 맞추기 위해 강제로 줄을 바꾸지 않으려면 Width 매개 변수를 사용하여 줄 너비를 지정하면 됩니다. Width는 32비트 정수 매개 변수이므로 가질 수 있는 최대값은 2147483647. 줄 너비를 이 최대값으로 설정하려면 다음을 입력합니다.

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

Out-File cmdlet은 콘솔에 표시된 대로 출력을 저장하려는 경우에 가장 유용합니다.