PowerShell에서 Where-Object 명령 사용하는 방법

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

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

또한 WhereWhere-Object cmdlet의 별칭으로 사용할 수 있습니다.

아래는 ProcessName 속성 값으로 프로세스 목록을 필터링하는 또 다른 예제입니다. 이는 ProcessNamespotify인 프로세스만 표시합니다.

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 연산자를 사용하여, 객체의 컬렉션에 포함되지 않은 값을 선택할 수 있습니다.

예를 들어, 다음 예제는 ProcessNamespotify가 아닌 모든 프로세스를 출력합니다.

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
튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

관련 문장 - PowerShell Statement