앞서 간략히 소개한 파워셸 개체에 대해서 이번에는 조금 더 구체적으로 설명해볼까 합니다. 파워셸의 실행 결과는 몇 가지 케이스 말고는 대부분 개체
입니다. 명령의 결과를 알맞게 출력하기 위해 개체의 선택과 정렬, 필터링을 위한 다양한 방법을 알아봅시다.
파워셸 명령어를 사용하다 보면 개체에 대한 수 많은 속성 노출됩니다. 다만 이러한 속성들이 학습 목적 경우에는 필요하겠습니다만 특정 정보만 필요한 상황이나 작업일 경우 비효율적인, 그리고 오히려 불필요한 요소가 될 수 있습니다. 이럴 경우 효과적으로 사용할 수 있는 명령어는 Select-Object
가 있습니다.
Select-Object
는 단독으로 실행하기 보다는 파이프라인 시스템에서 바로 전에 실행된 명령의 결과를 입력을 받아서 실행되는 구조입니다. (앞선 3장에서 설명했듯이 파이프라인은 왼쪽에서 오른쪽으로 명령어가 이어지는 구조입니다.)
예를 들어 현재 시스템의 서비스 목록을 확인하는 명령어를 다음과 같이 사용할 수 있습니다.
Get-Service | Select-Object -First 7
Select-Object
뒤에 -First N
/-Last n
/-Skip n
등 다양한 매개변수를 통해 목록의 결과를 제한할 수있습니다.
추가적으로 특정 속성을 지정하여 출력하는 방법도 있습니다. 예를 들어 프로세스 목록을 표기할때 해당 명령어의 속성들을 지정하여 다음과 같이 표기할 수 있습니다.
Get-Process | Select-Object -Property Name,ID,PM
앞서 사용했던 명령 길이 제한 -First N
/-Last n
/-Skip n
매개변수들을 넣어 응용할 수 있습니다.
Get-Process | Select-Object -Property Name,ID,PM -First 2
파워셸 명령어 마다 특정한 순서로 정렬합니다. Get-EventLog
명령어를 사용하면 시간순으로 정렬하고 앞서서 계속 예시로 선보였던 Get-Service
/ Select-Object
는 알파벳 순서를 정렬됩니다. 명령의 결과를 다른 순서로 정렬할때 사용하는 명령어는 Sort-Object
입니다.
Sort-Object
는 단독으로 사용되지 않으면 항상 파이프라인 에서 사용됩니다. 또한 기본적으로 오름차순으로 정렬되어 표기됩니다. 해당 명령어의 옵션은 다음과 같습니다.
옵션 | 설명 |
---|---|
-Property | 정렬을 위해 사용하려는 속성 이름을 받는 매개변수 |
-Descending | 정렬 순서를 내림차순으로 바꿈, 대소문자 구분 x |
-CaseSensitive | 대소문자 구분 |
Measure-Object
는 개체의 숫자 속성과 텍스트 파일 등 문자열 개체의 문자/단어/줄을 계산할 수 있게 도와주는 명령어입니다. 해당 명령어의 사용 옵션은 다음과 같습니다.
옵션 | 설명 |
---|---|
-Property | 속성은 숫자 값 |
-Average | 지정한 속성의 평균 값을 나타낸다 |
-Minimum | 지정한 속성의 최소 값을 나타낸다 |
-Maximum | 지정한 속성의 최댓 값을 나타낸다 |
-Character | 입력 개체의 글자 수(공백 포함) 나타낸다 |
-Line | 입력한 개체의 줄 수를 나타낸다 |
-Character | 입력 개체의 단어 수를 나타낸다 |
예를 들어 Hello My PowerShell
과 같은 문자열 개체의 글자 수를 작성하고 싶다면 다음과 같이 구문을 사용하면 됩니다.
"Hello My PowerShell" | Measure-Object -Character
파워셸은 기본적은 모든 개체를 반환합니다. 그러나 실무에서는 개체들 중 특정 조건에 맞는 개체만 콘솔창에서 확인이 필요한 경우가 많습니다. 이럴 경우에 사용하는 명령어가 바로 Where-Object
입니다. Where-Object
는 다른 명령의 결과를 받을 수 있는 경우에만 사용하며, 개체의 처음과 끝만 지정이 가능한 Select-object
보다는 조금 더 유연한 사용이 가능합니다.
특히나 이러한 필터링을 명령어의 사용할때에는 비교 연산자를 같이 사용하는 경우가 많은데 파워셸 비교 연산자 목록은 다음과 같습니다. (보다 쉬운 이해를 위해 기존에 통용되는 비교연산자로 설명을 대체했습니다.)
연산자 | 설명 |
---|---|
-eq | == |
-ne | != |
-gt | > |
-lt | < |
-ge | >= |
-le | <= |
-in 및 -Contains | 특정 개체가 있는지 확인 |
-notin | 특정 개체가 없는지 확인 |
-as | 특정 개체가 특정 형식인지 여부 확인 |
-like | 임의 문자 기호와 일치 하는지 확인 |
-nolike | 임의 문자 기호와 일치 하지 않는지 확인 |
-match | 정규식과 일치여부 |
-nomatch | 정규식과 일치하지 않는다 |
Where-Object
명령어와 비교연산자를 섞은 구문의 예시는 다음과 같습니다.
Get-Service | Where-Object -Property Status -eq Running
비교 연산자 뿐만 아니라 기존에 통용되는 논리 연산자도 사용하여 다음과 같은 옵션들을 활용해 표기할 수 있습니다.
연산자 | 설명 |
---|---|
A-and B | A와 B모두 참일떄 |
A-or B | A와 B 둘중 하나라도 참일때 |
A-xor B | A와 B가 서로 다른 값인 경우 참 |
-not or ! | 참은 거짓, 거짓은 참 |
Get-Service | Where-Object {$.Status -eq "Running" -or $_.Status -eq "stopped"}
특히나 고급 필터링 기술 예시의 필터 스크립트 $.와 같은 구문을 작성한다면 보다 효과적인 개체 필터링이 가능해집니다. $.는 $PSItem와 동일한 의미를 가지며 파이프라인 개체의 현재 개체를 포함합니다. 파이프라인의 모든 개체에 대해 작업을 수행하는 명령에서 이 변수를 사용하면 상당히 유용해지게 됩니다.
여기까지 대략적으로 PowerShell 아주 기본적인 내용을 정리하고 소개하고 있는데요. 정리하면서도 느끼지만
Microsoft 자체 Learn 항목에서 파워셸에 대해 이렇게 잘 정리할 수 있을까 싶을 정도로 잘 정리 되어 있습니다. 괜히 제꺼와 비교하면서도 민망하기도 하구요. 혹여나 다른 서적이나 인강을 고민하시고 있는 분들도 아래의 주소를 통해 무료로 공부해보세요.