PowerShell Select-Object 간단 사용법: 초보자 가이드

PowerShell은 데이터 관리에 강력한 도구이지만 일반적으로 한 번에 너무 많은 정보를 제공합니다. 너무 많은 정보는 압도적이고 해석하기 어려울 수 있습니다. 걱정하지 마세요. PowerShell의 Select-Object cmdlet을 활용하면 유용합니다.

이 튜토리얼에서는 Select-Object cmdlet의 기본을 배워서 여러 가지 방법으로 결과를 좁히거나 필터링하는 방법을 알아보겠습니다.

계속 읽고 쉬운 데이터 관리를 시작해보세요!

전제 조건

이 튜토리얼은 실습을 포함하고 있습니다. 따라하기 위해서는 PowerShell이 설치된 시스템이어야 합니다. 이 튜토리얼은 PowerShell 7을 사용하는 Windows 10을 기준으로 하지만 다른 최신 버전도 작동할 것입니다.

PowerShell Select-Object cmdlet이란 무엇인가요?

Select-Object cmdlet은 객체나 데이터 집합에서 특정 속성을 선택할 수 있도록 하여 데이터 관리를 간소화합니다. 동시에 속성의 이름을 변경하거나 기존 속성을 기반으로 계산된 속성을 만들 수도 있습니다.

기본 Select-Object 구문은 다음과 같습니다:

Parameter Function
-InputObject Specifies the object or data set you want to work with, which can be an object, an array of objects, or an output of another cmdlet.
Property Specifies the property or properties to select from the InputObject parameter. You can specify multiple properties separated by commas.
Optional Parameters Allows you to refine your selection, such as selecting a certain number of objects or skipping objects.
Select-Object [-InputObject] [Property] [Optional Parameters]

속성별로 객체 선택

Select-Object cmdlet에 대한 자세한 소개가 필요하다면, 일반적인 사용 사례 중 하나로 시작해 보는 게 어떨까요? Select-Object cmdlet을 사용하여 객체에서 특정 속성을 선택함으로써 이 튜토리얼을 시작하세요.

컴퓨터에서 실행 중인 프로세스 목록이 있다고 가정해 보겠습니다. 하지만 각 프로세스의 이름만 보고 싶은 경우입니다. Select-Object cmdlet에 Name 속성을 지정하면 해결됩니다.

PowerShell을 열고 아래의 Get-Process 명령을 실행하여 모든 프로세스 목록을 가져와서 이름별로만 출력합니다 (Select-Object) .

Get-Process | Select-Object Name
Selecting objects by property

실행 중인 프로세스 외에도, Select-Object cmdlet을 사용하여 CSV 파일에서 작업할 수 있습니다. 많은 열이 있는 CSV 파일이 있지만 그 중 일부만 필요한 경우 Select-Object cmdlet을 사용하여 관련 있는 열만 선택하고 데이터를 조작하고 분석할 수 있습니다.

지금 다음 명령을 실행하여 여러 속성을 선택하십시오 (Select-Object): NameCPU (쉼표로 구분). 이 기능은 각 개체의 일부 속성 만 필요한 대량 데이터 집합과 작업 할 때 도움이됩니다.

또한이 명령은 개체 목록을 CPU 속성을 참조로 사용하여 -Descending 순서로 정렬합니다 (Sort-Object).

Get-Process | Select-Object Name, CPU | Sort-Object -Descending CPU

아래에서는 자원을 많이 소비하는 프로세스가 있는 경우 Google Chrome을 시작으로 프로세스 목록이 나열됩니다.

Selecting multiple properties

계산된 속성 만들기

당신의 요구에 더 적합한 속성을 찾을 때 계산된 속성을 만들어보십시오. 왜냐하면 계산된 속성을 통해 데이터를 조작하고 변환하거나 기존 속성을 결합하거나 수학적 연산을 수행하거나 특정한 방식으로 데이터를 포맷 할 수 있습니다.

계산된 속성을 만들려면 새로운 속성 이름과 속성 값을 계산하는 방법을 정의하는 표현식을 지정해야합니다:

다음 명령을 실행하여 다음을 수행하십시오:

  • 실행 중인 프로세스 목록을 검색하고 (Get-Process), NameCPU 속성만 선택합니다 (Select-Object).
  • 새로운 계산된 속성을 만들어서 Name Memory (MB)을 사용하십시오. 이는 각 프로세스의 메모리 사용량을 메가바이트로 계산합니다. 메모리 사용량은 Expression을 사용하여 WorkingSet 속성을 1MB로 나눈 것입니다. 유효한 PowerShell 식을 사용하여 계산된 속성을 만들 수 있습니다.
  • 계산된 Memory (MB) 속성을 사용하여 검색된 모든 실행 중인 프로세스를 계산된 -Descending 순서로 출력합니다.
Get-Process | Select-Object Name, CPU, @{Name="Memory (MB)";Expression={$_.WorkingSet/1MB}} | Sort-Object -Descending "Memory (MB)"
Creating a calculated property

지정된 속성 제외

현실에서 Select-Object 명령의 결과에는 사용자 이름 및 암호와 같은 민감한 정보가 포함될 수 있습니다. 이 위험을 피하는 방법은 무엇인가요?

출력에서 민감한 데이터가 표시되지 않도록 하려면 -ExcludeProperty 매개변수를 추가하여 출력에서 특정 속성을 제외합니다.

다음 명령을 실행하여 다음 작업을 수행합니다:

  • 지정된 디렉터리(C:\\)에서 모든 파일 및 폴더(Get-ChildItem)의 목록을 재귀적으로 검색합니다(-Recurse).
  • 파이프 출력을 Select-Object cmdlet에 전달하여 Name, Length, 및 LastWriteTime 속성을 선택하십시오.
  • 출력에서 FullName 속성을 제외하십시오(-ExcludeProperty). 이렇게 함으로써 출력에 전체 경로가 표시되지 않아 기밀 정보가 드러나지 않습니다.
Get-ChildItem -Path C:\ -Recurse | Select-Object Name, Length, LastWriteTime -ExcludeProperty FullName
Excluding a specified property

처음이나 마지막 개체 수 생략하기

대규모 데이터 집합을 다룰 때 필요한 데이터를 찾는 것은 석탄 광산에서 다이아몬드를 찾는 것과 같을 수 있습니다. 하지만 불필요한 데이터를 걸러내는 데 시간을 낭비할 이유가 있을까요?

PowerShell에서 Select-Object cmdlet은 출력에서 처음 몇 개(-Skip)나 마지막 몇 개(-SkipLast)의 개체를 제외할 수 있는 두 개의 매개변수를 제공합니다.

출력에서 여러 개체를 건너뛰는 방법을 보려면 다음과 같이 실행하십시오:

아래 명령을 실행하여 모든 실행 중인 프로세스(Get-Process)를 가져오되 처음 100개의 개체는 -Skip합니다.

건너뛰는 개체 수는 정수 값(소수점 없는 양의 정수)에 기반하므로 이 경우에는 100입니다.

Get-Process | Select-Object -Skip 100
Skipping the first 100 objects

이제 다음 명령을 실행하여 작업 디렉터리의 내용(Get-ChildItem) 목록을 가져오되 마지막 100개의 개체는 건너뜁니다(-SkipLast).

Get-ChildItem | Select-Object -SkipLast 100
Skipping the last 100 objects

개체의 처음이나 마지막 개수 선택하기

다음은 첫 번째와 마지막 객체를 건너뛰는 대신 첫 번째와 마지막 객체를 선택하는 것이 흥미로울 수 있습니다. Select-Object cmdlet은 FirstLast 매개변수를 사용하여 다른 모든 것을 건너뛰어 시간과 리소스를 절약할 수 있습니다.

다음 명령을 실행하여 모든 프로세스를 가져오지만 반환된 객체 중에서는 -First 10 객체만 선택합니다.

Get-Process | Select-Object -First 10
Selecting the first 10 objects returned

이제 아래 명령을 실행하여 작업 디렉터리의 모든 내용을 가져오지만 반환된 객체 중에서는 -Last 10 객체만 선택합니다.

Get-ChildItem | Select-Object -Last 10
Selecting the last 10 objects returned

배타적으로 고유한 객체 선택

더 큰 데이터 집합과 작업할 때 일반적으로 출력에서 제외하려는 중복 값이 발생할 것입니다. 그러나 Select-Object cmdlet을 사용하면 중복 값을 수동으로 제외할 필요가 없습니다.

-Unique 매개변수를 추가하면 출력에서 고유한 객체만 선택하여 분석을 간소화하고 결과의 정확성을 향상시킬 수 있습니다.

다음 명령을 실행하여 -First 2 객체를 선택하고 반환하세요.

"1","1","2","3" | Select-Object -First 2

아래에서는 다른 객체가 중복 값인지 여부와 관계없이 두 개의 반환된 객체를 볼 수 있습니다.

Selecting and returning objects with duplicate values

마지막으로 다음 명령을 실행하여 각 -First 2 객체에 대해 하나의 -Unique 값을 반환합니다.

"1","1","2","3" | Select-Object -First 2 -Unique

이번에는 다른 값이 중복이므로 처음 두 객체 중에서 하나만 반환된 것을 볼 수 있습니다. 이 출력을 통해 -Unique 매개 변수가 데이터에서 중복된 객체를 빠르게 삭제하는 데 유용하다는 것을 알 수 있습니다.

Selecting unique objects exclusively

결론

PowerShell은 정보를 과다하게 생성하는 경향이 있습니다. 그러나 이 튜토리얼에서는 PowerShell Select-Object cmdlet이 데이터를 스트림으로 보여주어 필요한 정보만 볼 수 있도록 도와준다는 것을 배웠습니다.

여러 가지 매개 변수가 출력에서 데이터를 선택하고 제외하는 방법을 확인했습니다. Select-Object cmdlet을 사용하면 대량의 데이터를 관리하는 것이 번거로운 작업이 되지 않습니다.

이 시점에서 결과를 더 잘 분석하고 문제 해결에 적합하게 다듬을 수 있습니다. 하지만 왜 다음으로 계산된 속성을 형식화하는 방법을 배우지 않을까요? 그러면 가독성과 사용성을 향상시킬 수 있습니다.

Source:
https://adamtheautomator.com/powershell-select-object/