cmdlet은 Object 기반(Property+ Method 구성), Windows 명령은 Text 기반


PowerShell Cmdlet는 Object 기반으로서 Property와 그에 대한 Value로 구성되어 있다.
한편 Windows 및 Linux는 Text기반이므로 Property라는 것이 없다.
사람이라는 개체는 속성과 그 속성 값으로 구성되는데, 예를 들면 몸무게, 키, 출신지, 직장은 속성이고 그 속성의 값들이 있기 마련이다. 몸무게는 73Kg, 키는 170Cm, 출신지는 울산, 직장은 Freelancer이다.
이러한 개체(Object)는 또 다른 사람, 양, 자동차 등도 있다.
그렇다면 각 개체의 속성에 대한 값을 가지고 있는 상태에서 출신지별로 구분하거나 직장별로 선정할 수도 있다.
그렇 때 속성에 대한 값을 모두 입력된 상태에서 동일한 속성 값을 갖는 개체를 필터링할 수 있다.
이것이 바로 Where-Object, Select-Object, ForEach-Object를 사용하여 작업한다.
Where-Object는 Property를 기준으로 필터링하고, Select-Object는 지원되는 Parameter(Not Property)를 기준으로 선택하므로 상대적으로 활용성에는 제한이 있다. 하지만 Where-Object에 비해 편리한 것도 있다(-First, 등등)
이렇게 Object기반일 때는 분류하여 작업을 하기 편리하지만 리눅스처럼 Text기반일 때는 명령어에 대한 처리를 할 때 상대적으로 불편함이 따른다. 하지만 리눅스는 오래되어 발전해 왔기 때문에 나름대로 일정한 체계가 잡혀있다는 것도 사실이다.
비유하자면 PowerShell cmdlet는 체계화된 명령어이고, Linux는 관록이 있고 많은 경험이 쌓인 노련한 것이라 할 수 있다.
PowerShell을 가지고 각 Property 값을 보기만 하지 않고 값을 입력하고 수정도 할 수 있다.
Get-Service -Name bits
Get-Service | Where-Object {$_.Name -eq “bits” }
-Name bits에서 -Name은 Parameter이다.
$_.Name에서 Name은 Property이다.
위의 두 명령어의 결과는 같지만 접근 방법은 다르다.
사실 Get-Service를 실행할 때 service name을 많이 찾기 때문에 Name이라는 Property를 Parameter 이름으로 만들어서 사용하는 것이다.
원칙은 Property 이름이고, 편의를 위해서 -Name이라는 Parameter를 만든 것이다.
Parameter 이름과 Property 이름을 혼동하기 쉬우니 주의한다.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s