다음을 통해 공유


출력 리디렉션

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

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

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

콘솔 출력

기본적으로 PowerShell은 cmdlet이 수행하는 것과 정확히 일치하는 호스트 창으로 Out-Host 데이터를 보냅니다. cmdlet의 Out-Host 기본 용도는 페이징입니다. 예를 들어, 다음 명령은 Out-Host을 사용하여 cmdlet의 Get-Command 출력을 페이지로 나눕니다.

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 명령은 형식을 지정할 아무 것도 수신하지 않습니다.

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

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은 줄 길이 제한을 포함하여 콘솔 창에 적용되는 서식을 사용하여 출력을 텍스트로 렌더링합니다.

출력 삭제

cmdlet Out-Null 은 수신하는 입력을 즉시 삭제하도록 설계되었습니다. 이는 명령 실행의 부작용으로 얻을 수 있는 불필요한 데이터를 삭제하는 데 유용합니다. 다음 명령을 입력하면 명령에서 아무것도 다시 가져올 수 없습니다.

Get-Command | Out-Null

cmdlet은 Out-Null 오류 출력을 삭제하지 않습니다. 예를 들어 다음 명령을 입력하면 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'

데이터 저장

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

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

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

Window PowerShell 5.1에서 cmdlet은 Out-File 유니코드 파일을 만듭니다. ASCII 파일이 예상되는 일부 도구는 기본 출력 형식으로 제대로 작동하지 않습니다. 인코딩 매개 변수를 사용하여 기본 출력 형식을 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은 콘솔에 표시된 대로 출력을 저장하려는 경우에 가장 유용합니다.