PowerShell의 Select-Object cmdlet을 사용하면 입력된 객체 그룹에서 객체와 속성을 원활하게 선택할 수 있습니다. 그러나 때로는 더 많은 것을 알아야 할 때가 있습니다. ExpandProperty는 특정 속성에 대한 세부 정보를 확장하는 Select-Object의 스위치입니다.
이 예제 중심의 자습서에서 PowerShell Expand Property(-ExpandProperty
) 스위치의 힘을 발견하세요.
전제 조건
이 자습서는 실전 데모로 진행됩니다. 따라오고 싶다면, PowerShell 5.1 이상이 설치된 Windows 기기가 필요합니다. 이 문서는 PowerShell 5.1이 설치된 Windows 10 기기를 사용합니다.
PowerShell Expand Property를 사용하여 속성 객체 값 추출하기
Windows 기기에 로그인하고 PowerShell 터미널을 실행합니다. 이 섹션에서는 Select-Object
cmdlet 및 해당 ExpandProperty
스위치에 익숙해집니다.
1. Get-Service cmdlet을 실행하여 시스템의 모든 서비스 목록을 가져옵니다. 출력을 Select-Object cmdlet에 파이프하여 각 서비스 객체의 이름 속성만 선택하고 표시합니다. 아래에 표시된 것처럼요.
이제 시스템의 서비스 이름 목록을 나타내는 객체의 단일 열을 볼 수 있어야 합니다.

2. 이전 파이프라인의 끝에서 Get-Member cmdlet을 실행하여 아래와 같이 select-object가 반환하는 객체 유형을 확인합니다. 객체 유형을 알면 파이프라인을 확장하기 위한 함수나 cmdlet을 작성하는 데 도움이 됩니다.
아래 스크린샷을 참조하면, -Property 스위치가 문자열 목록처럼 보이는 것을 확인할 수 있지만, 이것들은 Selected 목록의 System.ServiceProcess.ServiceController 객체입니다.

3. Get-Members cmdlet을 mkdir로 대체하여 각 서비스에 대한 폴더를 자동으로 생성합니다. -first 5 스위치는 반환할 객체 수를 제한합니다. 이에 따라 mkdir 함수는 파이프라인의 객체를 기반으로 다섯 개의 폴더만 생성합니다.
성공적인 시도를 나타내는 아래 스크린샷과 유사한 출력이 표시됩니다.

4. mkdir을 rmdir로 대체하여 폴더를 제거합니다. -Verbose 스위치를 켜서 터미널에서 자세한 출력을 표시합니다.
rmdir cmdlet은 문자열을 예상하며 ServiceController 개체의 해시 테이블 표현을 처리할 수 없습니다. 여러 오류가 발생하여 시도가 실패해야 합니다. 아래 스크린샷과 같이

5. -Property 스위치를 다음 스니펫과 같이 -ExpandProperty 스위치로 변경하십시오. 이렇게 하면 필요한 것이 문자열일 때 속성의 값을 문자열로 가져올 수 있습니다.
rmdir과 결합하면 폴더를 자동으로 제거하는 시도가 오류 없이 성공해야 합니다. 아래 스크린샷과 같이

특정 속성을 가진 선택된 개체 집합 만들기
섹션의 코드 스니펫을 줄이려면 다음과 같이 기계에서 첫 20개 서비스에 대한 변수를 만듭니다.
Get-Service
명령을 실행하고 Select-Object
cmdlet를 사용하여 처음 20
개의 개체를 선택하고 개체를 $testServices
라는 변수에 저장하십시오. 다음과 같이 Name
, Status
, 및 DependentServices
속성만 선택하십시오.
PowerShell Expand Property 스위치는 한 번에 하나의 속성만 확장할 수 있습니다. 이에 반해 Property 스위치는 동시에 여러 속성을 선택할 수 있습니다.
변수 이름 $testServices
를 실행하여 그 내용의 구조를 확인하십시오.
아래 스크린샷과 유사한 서비스 속성을 표시하는 테이블이 표시됩니다.

PowerShell Expand Property로 컬렉션 속성 확장하기
A PowerShell object can have properties that are collections of objects, also known as collection properties. In this section, you will learn how to use PowerShell Expand Property to expand a collection property to view its members’ properties.
$testServices
변수에 대해 Select-Object
cmdlet를 실행하고 각 서비스의 DependentServices
속성을 확장하십시오.
DependentServices
는 컬렉션 속성이므로 확장된 DependentServices
에서 결과를 연결한 서비스 목록이 출력됩니다.

PowerShell Expand Property로 속성 결합하여 분류된 출력 생성
이제 종속 서비스 목록이 있지만, 이들이 무엇에 종속되는지 어떻게 알 수 있습니까? 이 섹션에서는 확장된 속성을 분류하는 데 -Property
스위치를 사용하는 방법을 배우게 됩니다.
DependentServices
속성을 Name
으로 분류하려면 아래 명령을 실행하십시오.
종속 서비스에 이미 Name
속성이 있으므로 분류 단계가 실패합니다.
아래 오류는 초기 서비스 목록($testServices에)에 확장된 DependentServices 속성의 Name 속성과 충돌하는 Name 속성이 이미 있음을 나타냅니다.

하나의 해결책은 식별자 속성을 다음과 같이 바꾸는 것입니다.
이전 명령의 출력을 수정하여 $depServ라는 변수에서 식별자 속성으로 지정된 ‘Depends On’이라는 계산된 속성을 지정합니다. ‘Depends On’은 $testService의 각 서비스의 Name 값을 포함할 것입니다.
속성 이름인 ‘Depends on’은 이 튜토리얼에서 임의로 선택된 것이며 사용자의 선택에 따라 임의의 표현이 될 수 있습니다.
$depServ를 Select-Object를 통해 종속 서비스의 Name, Status 및 Depends On 속성을 선택합니다.
이제 $testServices에 종속된 서비스를 확인할 수 있습니다.

다음과 같이 PowerShell Expand Property를 사용하여 Format-List를 결합하여 표시할 수 있습니다.
PowerShell은 특히 테이블 출력에서 표시할 객체 속성을 제한할 수 있으며 -ExpandProperty 스위치 출력도 동일한 경험을 할 수 있습니다. 이를 해결하기 위해 대신 목록으로 확장된 속성을 표시할 수 있습니다.
아래의 Get-Process cmdlet를 실행하여 explorer 프로세스가 사용하는 모든 모듈을 검색합니다. -ExpandProperty 스위치를 켜서 모듈의 속성을 표시합니다.
화면에 출력되는 결과는 자동으로 세 속성만 표시되도록 자르는 다음 스크린샷과 유사해야 합니다.

객체를 Format-List
cmdlet로 파이프하여 모듈 객체의 모든 값을 더 관리하기 쉬운 목록으로 볼 수 있습니다.
아래에 표시된대로 출력은 모든 속성과 그 값 목록을 표시합니다. 데이터를 파일에 저장하거나 다른 cmdlet로 전달하여 추가 처리할 수도 있습니다.

결론
여기까지 성공적으로 진행한 결과로, Select-Object cmdlet의 PowerShell Expand Property 스위치 (-ExpandProperty)의 이점을 어떻게 활용하는지 보았습니다. PowerShell은 많은 일반 작업에 유용한 cmdlet을 제공합니다. PowerShell Cat을 사용하여 파일을 빠르게 표시하는 방법을 배우면 새로운 지식을 보완할 수 있습니다.
Source:
https://adamtheautomator.com/powershell-expand-property/