programming ⌨/파워쉘 PowerShell

나를 위한 PowerShell(5) : Pipeline과 출력 형식

Kortsec1 2024. 2. 29. 00:00

Pipeline

두 가지 이상의 구문을 연결하기 위한 방법이 뭐가 있을까?

Unix 기반 운영체제 특히 리눅스를 자주 사용해 봤다면 한 번쯤 경험해 봤을 것이다.

바로 Pipeline이다.

 

Pipe한쪽(왼쪽)의 출력을 다른 한쪽(오른쪽)의 입력으로 전달하는 기능을 담당한다.

Img1 _ Pipeline

 

PowerShell에서 보통 GetSet동사를 조합하여 사용하는데, 그 예제를 따라해보자

 

 

예제

Get-Process | Stop-Process

 

실행 중이던 메모장과 그림판을 모두 종료하려 한다.

Get-Process를 통해 프로세스 상태를 확인해 보니 각각 2개씩 켜져 있는 것을 확인했다.

Get-Process notepad, mspaint

Img2 _ notepad, mspaint processes

 

Img2 출력 속 프로세스를 모두 종료시키려면 어떻게 해야 할까?

바로 pipe를 통해 Stop-Process로 전달하면 된다.

pipe는 왼쪽의 모든 것을 오른쪽으로 넘긴다는 것을 기억하자.

 

코드는 아래와 같이 구성될 것이다.

Get-Process notepad, mspaint | Stop-Process

 

실행해보면 모든 메모장과 그림판이 종료된다.

Get-Process의 결과로 나온 객체가 그대로 Stop-Process의 인자로 전달되는 것이다.

 

 

Get-Process | Out-GridView

Get-Process의 결과를 Out-GridView를 통해 대화형 테이블 창으로 출력해 보자

Get-Process | Out-GridView

Img3 _ Out-GridView

 

많은 데이터를 Out-GridView를 통하여 깔끔하게 정리할 수 있다.

참고로 Out-GridView의 대화형 테이블 창은 다음 기능이 있다

  • 열 숨기기, 표시 및 순서 다시 지정
  • 행 정렬
  • 빠른 필터
  • 조건 필터 추가
  • 복사 및 붙여 넣기

 

 

Get-ChildItem | Select-String

window setup log속 첫 부팅 성공 로그를 찾아보자

Window Setup Log C:\Windows\Panther에 저장된다

코드는 아래와 같다

Get-ChildItem C:\Windows\Panther | Select-String 'First Boot'

 

해당 경로에 저장되는 log파일들을 Select-String에 전달한다.

Select-String입력 문자열이나 파일에서 텍스트 패턴을 검색하는 명령이다

Img4 _ "First Boot" log file

 

 

출력 형식

PowerShell의 각 개체 형식에는 출력되는 기본 속성이 존재한다.

그중 3가지 속성을 pipe와 함께 알아가 보자

 

Format-Table

Img5 _ Format-Table

 

Img5에 보이는 출력 형태는 Format-Table 형식이며

기본적으로 PowerShell은 Process 개체를 테이블 형식으로 출력한다고 한다.

 

여기에 그치지 않고 사용자는 각자의 필요에 맞게 테이블을 만질 수 있다

Img5속 헤더들 중 NameLastWriteTime만을 출력시켜 보자

Get-ChildItem | Format-Table Name, LastWriteTime

Img6 _ Format-Table Filtered

 

테이블의 헤더만 안다면 원하는 대로 출력값에 필터를 씌울 수 있게 된다.

 

또한, Format-Table에는 자주 사용되는 정렬기능이 있다.

바로 AutoSize, column의 크기를 data의 너비에 맞춰 출력해 주는 기능이다.

Get-ChildItem C:\ | Format-Table -AutoSize

Img7 _ Format-Table -AutoSize

 

 

 

Format-List

Format-List자세한 정보를 표시하는 데 유용하다

아래 코드와 결과를 살펴보자

Get-Process -Name Chrome | Format-List -Property ProcessName, FileVersion, StartTime, Id

Img8 _ Get-Process to Format-List

 

Get-ProcessChrome의 결과를 목록형식으로 출력한다.

Format-Table과 마찬가지로 원하는 속성을 지정하여 필터링할 수 있다

 

아래 예시는 윈도 핫픽스 내역을 List형태로 출력한 상황이다.

Get-Hotfix | Format-List HotfixID, InstalledOn

Img9 _ Get-Hotfix with Format-List

 

 

 

Format-Wide

단일 항목을 출력하는데, 기본 속성이 아닌 값을 지정할 수도 있다

Get-Command -Verb Format | Format-Wide

Img10 _ Format-Wide

 

값을 지정하여 Column의 수를 조절할 수도 있다.

Get-ChildItem | Format-Wide -Column 3

Img11 _ Format-Wide -Column

 

 

요약


Pipeline : 왼쪽의 출력을 오른쪽의 입력으로 연결해 준다
<example>
    Get-Process | Stop-Process : 프로세스 종료
    Get-ChildItem | Select-String : 하위 파일 속 원하는 문자열 검색

Format-Table : 표 형태이며 많은 양의 데이터 출력에 용이하다
        - Autosize : 값의 크기에 맞게 Column의 너비 자동 조정
ex ) Get-ChildItem C:\ | Format-Table -AutoSize

 

Format-List : 리스트 형태이며 자세한 정보를 표시하는데 용이하다
ex ) Get-Process -Name Chrome | Format-List -Property ProcessName, FileVersion, StartTime, Id

 

Format-Wide : 단일 항목을 출력한다
        - Column : 컬럼 수를 지정할 수 있다

 


 

 

 

https://learn.microsoft.com/ko-kr/powershell/scripting/samples/using-format-commands-to-change-output-view?view=powershell-7.4

https://learn.microsoft.com/ko-kr/powershell/module/microsoft.powershell.utility/out-gridview?view=powershell-7.4

https://learn.microsoft.com/ko-kr/training/modules/understand-windows-powershell-pipeline/2-review-its-output

https://sid-500.com/2018/01/25/powershell-for-beginners-part-7-the-format-commands-and-the-pipe/