[PowerShell] #3 파이프라인 시스템

g.pm·2025년 6월 19일
0

PowerShell

목록 보기
3/5


파워셸의 강력함과 유연성은 바로 파이프라인 시스템에 있습니다. 파이프라인 시스템 덕분에 여러 명령을 조합해서 마치 하나의 명령처럼 실행할 수 있습니다.

1. 개체

파워셸에서 파이프라인을 어떻게 사용하기 전에 반드시 알아야하는 개념이 있습니다. 파워셸 명령의 결과가 어떤 형식인가 하는 부분입니다. 파워셸에서 제공하는 모든 명령의 결과물은 바로 개체 입니다. 이 개체는 메모리상의 데이터 구조로 일반적으로 알려진 절자지향 언어의 반대격에 위치한 객체지향적 언어에서 주로 언급되는 개체와 유사한 의미를 가집니다.

개체는 다른 개체를 통해 어떤 동작을 야기 되도록 해야만 합니다. 하나의 개체가 결국 다른 개체와 상호작용하는 대표적인 방법은 메세지를 주고받는 것입니다. 파워셸의 명령에서 개체라는 의미는 하나의 명령의 결과와 다른 명령의 결과가 상호작용 한다는 의미이며, 개체의 정의처럼 한 개체 안에 포함된 특성/행위/정체성으로 개체 자체를 제어할 수 있다는 의미입니다.

객체지향적 언어인 자바/C++ 등을 다루다보면 상속화 에 대해 개념을 많이 들어보셨을겁니다. 파워셸에도 비슷한 의미의 개체 간의 상속관계가 존재하며 최상위 개체는 objectPSObeject 두 가지입니다.

파워셸의 개체를 포함하는 요소는 다음과 같습니다.

  • 속성(Property) : 개체의 특성을 말하며 주로 명사를 사용함. ex) 서비스 이름, 프로세스 ID, 이벤트 로그
  • 매서드(Method) : 개체의 동작을 나타내는 멤버이며, 주로 동사를 사용함. eX) 프로세스 개체라면 종료 동작, 이벤트 로그 자체를 지우는 동작을 지시
  • 이벤트(Event) : 개체의 특정 상황을 발생시키는 원인 ex) 특정 파일에 대한 오픈 이벤트

파워셸에서는 이러한 개체의 모든 멤버를 나열해주는 명령어가 있는데 바로 Get-Member입니다.
Get-Member를 이용해 Get-Service 명령어를 조회해보면 다음과 같은 모습을 보입니다.

여기서 MemberType이 Method 인것이 메소드이고, Property가 속성입니다. 간단하게 정리하자면

  • Method는 그 개체가 할 수 있는 동작 Property는 개체가 가진 정보
  • Start(), Stop(), `Pause() 같은 것들이 대표적인 메소드
  • Get-Member 로 보면 어떤 속성(Property)와 메소드(Method)가 있는지 확인 가능

2. 파이프라인(|) 시스템

파이프라인 시스템은 둘 이상의 명령을 포함하여 순차적으로 실행할 수 있는 구조로, 명령 줄 인터페이스에서 사용되는 중요한 개념입니다. 여러개의 명령을 단 방향의 순서로 연결할때 구분자가 파이프이며 '|' 로 표시합니다.

파이프라인은 명령을 좌측에서 우측을 바라보게 명령을 실행합니다. 실행된 각 명령의 결과는 오른쪽 명령으로 전달됩니다. 즉 이전 명령의 결과가 다음 명령의 입력이 되는 구조입니다. 결과적으로 파이프라인의 마지막 결과만 화면에 출력되게 됩니다. 예를 들어 Get-Process 라는 시스템의 프로세스 정보를 가져오는 방식과 Stop-Process 은 파이프라인으로 연결해서 원하는 시스템의 정보를 얻고 종료 또한 시킬 수 있습니다.

Get-Process mspaint | Stop-Process

2.1 둘이상의 개체(아웃풋)이 혼합된 파이프라인 출력

대부분의 파워셸 명령은 콘솔에 한 종류의 개체만 표기 되지만, 일부 명령은 여러 종류의 개체를 생성시킵니다.

Get-ChildItem -Path C:\Windows | Get-Member

다만 이러한 명령은 다루기가 어렵고 각 개체별로 속성이 없는 값이 많기 때문에 주의 기울여 설계하는 것이 중요합니다.

2.2 매개변수 파이프라인

기본적으로 파워셸 명령은 매개변수를 이용하기 때문에 이러한 매개변수의 입력을 통한 파이프라인 처리를 파이프라인 매개변수 바인딩 이라고 합니다. 앞에서 부터 이야기했지만 파이프라인 프로세스는 명령의 출력을 두번째 명령의 매개변수 중 하나에 바인딩 시킵니다. 이러한 바인딩을 결정하는 방식에는 두가지가 요소가 있습니다.

  • ByValue
  • ByPropertyName

ByValue는 파이프라인에서 항상 먼저 시도되는 결정요소이며, 나머지 하나는 Byvalue 방식이 실패할 때 시도하는 ByPropertyName입니다. 파워셸 명령어가 어떻게 파이프라인 바인딩을 진행하는 알고 싶다면 Get-Help를 통해 알 수 있습니다.

다만 ByVluae 바인딩이 적용되는 대상이 둘 이상일 경우에는 들어오는 개체의 형식에 맞는 매개변수에 바인딩이 일어납니다. 매개변수 그리고 바인딩 결정 방식은 명령어마다 상이하기 때문에 실습하며 구체적인 내용에 대해서 스스로 체득해보는 것이 중요합니다(어차피 잘못된 구문 사용으로 적절한 바인딩이 되지 않으면 원하는 결과값이 나오지 않기 때문에..)

profile
다재다능

0개의 댓글