특정한 속성 값만 알고 싶을 때 필터링하여 작업을 한다. 그런데 Filtering을 할 때 2가지 방법이 있다.
1) All kinds of cmdlets | Where-Object
2) A specific cmdlets -Filter
혹시 둘 다 지원되는 cmdlet라면 어떤 것을 사용하면 좋을까?
-Filter라는 매개변수(Parameter)를 사용하면 처리 성능이 좋고 부하가 적게 걸린다.
그 이유는 Where-Object는 앞의 결과의 모든 것을 가지고 와서 Filter을 하기 때문에 불필요한 정보까지를 포함하여 filtering을 한다. 그렇지만 -Filter는 필요한 속성 값을 가지고만 filtering을 하기 때문에 속도가 빠르다. 즉, Where-Object는 앞의 cmdlet의 결과를 가지고 2차적으로 작업을 하는 것이고 -filter는 2차적으로 처리하는 것이 아니고 그냥 처음부터 filtering을 하는 것이기 때문이다.
다음을 테스트를 하여 TotalSeconds 항목을 서로 비교해본다.
Measure-Command {gwmi win32_service -Filter “state <> ‘stopped'”}
Measure-Command {gwmi win32_service | where-Object {$_.state -ne “stopped”}}
어떤 것이 처리 시간이 적게 걸렸는가?
Like this:
Like Loading...