Windows PowerShell 파이프라인 및 해당 출력 검토

완료됨

PowerShell은 한 명령의 출력을 다음 명령에 입력으로 전달할 수 있는 하나 이상의 명령 체인인 파이프라인에서 명령을 실행할 수 있습니다. Windows PowerShell에서 파이프라인의 각 명령은 왼쪽에서 오른쪽으로 순서대로 실행됩니다. 여러 명령의 경우 각 명령과 해당 매개 변수는 파이프(|) 문자로 다음 명령과 구분됩니다. 구체적인 규칙을 통해 출력이 한 명령에서 다음 명령으로 전달되는 방식을 결정합니다. 이 모듈 전체에서 이러한 규칙에 대해 알아봅니다.

콘솔 호스트 애플리케이션에서 Windows PowerShell과 상호 작용할 때는 각 명령줄을 단일 파이프라인으로 간주해야 합니다. 명령 또는 일련의 명령을 입력한 다음, Enter 키를 눌러 파이프라인을 실행합니다. 파이프라인의 마지막 명령 출력이 화면에 표시됩니다. 해당 출력 다음에 또 다른 셸 프롬프트가 나오며, 해당 셸 프롬프트에서 새 파이프라인에 명령을 입력할 수 있습니다.

참고

콘솔의 여러 실제 줄에 하나의 논리적 명령줄을 입력할 수 있습니다. 예를 들어 Get-Service를 입력한 다음, Enter 키를 누릅니다. Windows PowerShell이 확장 프롬프트 모드로 전환되며 이 모드는 연속된 두 개의 보다 큼 기호(>>)로 표시됩니다. 이렇게 하여 명령줄을 완료할 수 있습니다. Ctrl+C를 선택하여 명령을 종료하고 Windows PowerShell 프롬프트로 돌아갑니다.

앞에서 Windows PowerShell 명령과 관련된 일반적인 작업 또는 동사에 대해 알아보았습니다. 단일 파이프라인의 일부로 여러 명령을 실행할 때 가장 일반적으로 GetSet 동사를 조합하여 사용하는 것을 알 수 있습니다. Get-* 명령의 출력을 Set-* 명령의 입력으로 사용합니다. 이러한 명령은 종종 Where 또는 Select와 같은 필터링 명령과 함께 사용됩니다. 이런 경우 Get-*의 출력은 Where 또는 Select 명령에 의해 필터링된 후 Set-* 명령으로 파이핑됩니다.

참고

Where 명령은 Where-Object의 별칭이고 Select 명령은 Select-Object의 별칭입니다. 3단원 "파이프라인에서 개체 필터링"에서는 필터링에 대해 자세히 설명합니다.

실제 항목과 비교하여 PowerShell 개체 및 파이프라인의 개념을 이해하는 데 도움이 됩니다. 예를 들어 자동차를 개체로 생각하면 엔진, 자동차 색, 자동차 크기, 유형, 제조사 및 모델과 같은 자동차의 특성을 설명할 수 있습니다. PowerShell에서는 이러한 특성을 속성이라고 합니다. 개체의 속성은 결국 개체 자체일 수 있습니다. 예를 들어 엔진 속성은 피스톤, 점화 플러그, 크랭크샤프트 등과 같은 특성이 있는 개체이기도 합니다.

개체에는 문 열기 또는 닫기, 기어 변경, 가속 및 브레이크 적용과 같은 활동에 해당하는 동작이 있습니다. PowerShell에서는 이러한 동작을 메서드라고 합니다.

파이프라인을 사용하면 한 명령으로 생성된 출력을 가져와서 해당 개체를 다른 명령의 입력으로 전달할 수 있습니다. 이를 보다 쉽게 이해하기 위해 각 공장에서 자재를 받아서 다른 것으로 변환하는 공장에 명령을 비유할 수 있습니다.

파이프라인 출력

PowerShell 명령은 텍스트를 출력으로 생성하지 않습니다. 대신 개체를 생성합니다. 개체는 메모리 내 데이터 구조를 설명하는 일반적인 단어입니다.

명령 출력을 데이터베이스 테이블 또는 스프레드시트와 유사한 것으로 생각할 수 있습니다. PowerShell 용어에서 테이블 또는 스프레드시트는 개체 컬렉션 또는 간단히 컬렉션으로 구성됩니다. 각 행은 단일 개체이고 각 열은 해당 개체의 속성, 즉 개체에 대한 정보입니다. 예를 들어 Get-Service 명령을 실행하면 서비스 개체의 컬렉션이 반환됩니다. 각 개체에는 Name, DisplayNameStatus와 같은 이름의 속성이 있습니다.

개체를 사용하는 PowerShell은 명령이 주로 텍스트를 생성하는 다른 명령줄 셸과 다릅니다. 텍스트 기반 셸에서 시작된 모든 서비스 목록을 가져오려고 하는 경우를 가정해 보겠습니다. 명령을 실행하여 각 서비스에 대해 다른 행을 사용하여 서비스의 텍스트 목록을 생성할 수 있습니다. 각 행에는 서비스의 이름과 서비스의 일부 속성이 포함될 수 있으며 각 속성은 쉼표 또는 다른 문자로 구분됩니다. 특정 속성 값을 검색하려면 텍스트를 처리하는 다른 명령에 해당 텍스트 출력을 보내 필요한 특정 값을 끌어와야 합니다. 해당 명령은 첫 번째 명령에서 만든 특정 텍스트 형식을 이해하기 위해 만들어집니다. 첫 번째 명령의 출력이 변경되고 상태 정보가 이동하는 경우 두 번째 명령을 편집하여 새 위치 정보를 가져와야 합니다. 텍스트 기반 셸에는 상당한 텍스트 구문 분석 기술이 필요합니다. 강력한 텍스트 구문 분석 및 텍스트 조작 기능을 제공하기 때문에 Perl과 같은 스크립팅 언어가 널리 사용됩니다.

PowerShell에서 서비스 개체 컬렉션을 생성한 다음, Name 속성만 표시하도록 cmdlet에 지시합니다. 메모리에 있는 개체의 구조를 사용하면 PowerShell이 자동으로 정보를 찾을 수 있습니다. 이렇게 하면 명령 출력의 정확한 형식에 대해 걱정할 필요가 없습니다.

이 기능을 사용하면 Get | Set 패턴이 작동되도록 할 수 있습니다. Get-* 명령의 출력이 개체이므로 PowerShell은 Set-* 명령이 작동하는 데 필요한 속성을 명시적으로 지정하지 않고도 찾을 수 있습니다.