PowerShell에서 Where-Object 명령 사용하는 방법
-
PowerShell의
Where-Object
Cmdlet - PowerShell에서 스크립트 블록으로 필터 조건 만들기
-
PowerShell에서 객체 필터링에
Where-Object
사용 - PowerShell에서 매개변수를 사용하여 필터 조건 만들기
- 여러 조건문 사용

Windows PowerShell 속성으로 작업할 때 객체 컬렉션에서 특정한 것을 필터링해야 할 필요가 있을 수 있습니다. 따라서 Windows PowerShell Where-Object
cmdlet을 사용하는 방법을 아는 것은 Windows PowerShell 기술 세트에서 필수적인 기술입니다.
Where-Object
cmdlet은 객체를 필터링하는 데 유용한 명령입니다. 이 기사에서는 Where-Object
명령을 작성하는 여러 가지 방법과 그 구문, 여러 조건문 사용 방법에 대해 배울 것입니다.
PowerShell의 Where-Object
Cmdlet
Windows PowerShell Where-Object
cmdlet의 유일한 목적은 명령의 출력을 필터링하고 우리가 출력하고자 하는 특정 정보를 반환하는 것입니다.
요약하자면, Where-Object
cmdlet은 필터입니다. 이는 True
또는 False
를 반환하는 조건을 작성할 수 있게 합니다. 상황의 결과에 따라 cmdlet은 출력을 반환하거나 반환하지 않습니다.
그 조건을 스크립트 블록 또는 매개변수를 사용하여 두 가지 방법으로 구성할 수 있습니다.
PowerShell에서 스크립트 블록으로 필터 조건 만들기
스크립트 블록은 Windows PowerShell의 중요한 구성 요소입니다. 이들은 스크립팅 언어의 수많은 장소에서 사용됩니다. 스크립트 블록은 코드를 분류하고 여러 장소에서 실행하는 익명 함수입니다.
예제 스크립트 블록:
{$_.StartType -EQ 'Automatic'}
Windows PowerShell 파이프라인을 사용하여, 이러한 객체들을 Where-Object
cmdlet으로 파이프하고 FilterScript
매개변수를 사용할 수 있습니다. FilterScript
매개변수는 스크립트 블록을 수용하기 때문에, 각 객체의 속성이 특정 값과 동일한지 확인하는 조건을 생성할 수 있습니다. 아래의 예와 같습니다.
예제 코드:
Get-Service | Where-Object -FilterScript { $_.StartType -eq 'Automatic' }
Where-Object
cmdlet과 함께 위치 매개변수를 사용하고 FilterScript
매개변수 이름을 포함하지 않습니다. 대신, 그들은 스크립트 블록만 제공하여 Where-Object {$_.StartType -eq 'Automatic'}
와 같은 방식으로 더 빠르고 깔끔하게 스크립팅합니다.이러한 구문이 특정 시나리오에서는 작동하지만, 중괄호 ({}
)로 된 스크립트 블록의 개념은 코드를 덜 읽기 쉽게 만들고 경험이 적은 Windows PowerShell 사용자에게는 더 어렵게 만들었습니다. 이 가독성 문제로 인해 Windows PowerShell 팀은 매개변수를 도입했습니다.
PowerShell에서 객체 필터링에 Where-Object
사용
Get-ChildItem
은 지정된 위치에 있는 모든 파일과 폴더의 목록을 가져옵니다. 디렉터리에서 .csv
파일만 표시하고 싶다고 가정해 보겠습니다.
다음 예제는 Where-Object
cmdlet을 사용하여 .csv
파일만 필터링하고 선택하는 방법을 보여줍니다.
Get-ChildItem | Where-Object { $_.extension -eq ".csv" }
위 스크립트에서 Get-ChildItem
의 출력이 Where-Object
cmdlet으로 파이프되어, Where-Object
가 파일 확장이 .csv
인 출력을 필터링합니다.
출력:
Directory: C:\Users\rhntm
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 3/11/2022 7:57 AM 122 books.csv
-a---- 3/8/2022 2:07 PM 780199 house_data.csv
-a---- 3/8/2022 10:38 PM 421 play_tennis.csv
또한 Where
를 Where-Object
cmdlet의 별칭으로 사용할 수 있습니다.
아래는 ProcessName
속성 값으로 프로세스 목록을 필터링하는 또 다른 예제입니다. 이는 ProcessName
이 spotify
인 프로세스만 표시합니다.
Get-Process | where { $_.ProcessName -in "spotify" }
출력:
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
550 31 55036 71256 2.81 1820 3 Spotify
294 21 12328 18144 0.06 13536 3 Spotify
476 64 96012 141208 20.61 13980 3 Spotify
-notin
연산자를 사용하여, 객체의 컬렉션에 포함되지 않은 값을 선택할 수 있습니다.
예를 들어, 다음 예제는 ProcessName
이 spotify
가 아닌 모든 프로세스를 출력합니다.
Get-Process | where { $_.ProcessName -notin "spotify" }
이렇게 Where-Object
cmdlet을 사용하여 속성 값에 따라 객체 컬렉션에서 객체를 필터링할 수 있습니다.
PowerShell에서 매개변수를 사용하여 필터 조건 만들기
Windows PowerShell 3.0에서 도입된 매개변수는 쓰는 방식이 더 자연스러운 흐름을 가지고 있습니다. 이전의 예를 사용하여, 특정 출력을 필터링하기 위해 매개변수를 사용해 보겠습니다.
예제 코드:
Get-Service | Where-Object -Property StartType -EQ 'Automatic'
위에서 보시면 스크립트 블록을 사용하는 대신, 명령이 Property 매개변수에 대한 매개변수 값으로 객체 속성을 지정하고 있습니다. 또한 -eq
연산자는 이제 매개변수가 되어 Automatic
값을 전달할 수 있습니다.
이러한 방식으로 매개변수를 사용하는 것은 이제 스크립트 블록의 필요성을 제거합니다. 그러나 Microsoft가 매개변수를 더 깔끔한 스크립팅 방법으로 도입했지만, 다음 섹션에서 논의할 훌륭한 이유로 스크립트 블록을 사용하는 것이 있습니다.
여러 조건문 사용
연산자(예: -and
또는 -or
)를 사용하여 두 개 이상의 조건을 결합하여 스크립트 블록을 사용해 평가할 수 있습니다. 그러나 각 조건을 성공적으로 평가하기 위해서는 서브식이라는 특정 Windows PowerShell 구성 요소를 사용해야 합니다.
Windows PowerShell에서 우리는 서브식을 사용하여 Where-Object
와 같은 필터링 구문 내에서 식을 실행할 수 있습니다. 우리는 실행할 조건문을 괄호(()
)로 묶음으로써 이를 수행합니다.
예제 코드:
Get-Process | Where-Object { ($_.CPU -gt 2.0) -and ($_.CPU -lt 10) }
예제 스크립트 블록:
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------ - ------ ---- - ---- - ------ -- -- ---------- -
334 21 18972 26384 5.23 3808 0 AnyDesk
635 34 13304 51264 9.56 4140 5 notepad
726 36 12820 51196 4.69 12088 5 notepad
802 46 18356 65088 7.98 10784 5 OneDrive
340 18 6472 26436 3.44 1252 5 RuntimeBroker
698 34 14672 44484 3.63 3284 5 RuntimeBroker
323 19 5732 23432 4.00 11200 5 RuntimeBroker
560 18 6440 27752 4.63 8644 5 sihost
632 31 21524 69972 2.81 6392 5 StartMenuExperienceHost
390 18 9756 30832 3.94 3084 5 svchost
523 24 8768 36312 2.17 6300 5 svchost
524 17 6416 21036 4.42 10932 5 SynTPEnh
525 22 15336 38904 3.41 2192 5 TextInputHost
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn