programming ⌨/파워쉘 PowerShell

나를 위한 PowerShell(6) : Object 다루기

Kortsec1 2024. 3. 1. 15:37

PowerShell은 객체 지향형 모델이다.

객체 지향형 모델은 여러 독립적인 부품들의 조합, 즉 객체들의 유기적인 결합으로 이루어진 모델이다.

사용자의 측면에서 아래 "Windows PowerShell in Action"의 저자 Bruce Payette의 말로 정리될 수 있겠다.

 

우리는 이미 누군가 정의해놓은 오브젝트들을 사용하고있

 

 

다른 Unix-style shell은 보통 문자 입출력에 기반을 둔 text-based인 반면, PowerShell은 오브젝트를 다룬다.

그리하여 우리가 PowerShell을 통해 스크립트나 함수를 생성할 때면 항상 객체를 주고받는다

이는 다른 도구들과는 다른 PowerShell의 차별점이다.

 

 

아무리 도움말 시스템이 강력하더라도 objects에 대한 이해 없이 PowerShell을 완전히 배우기란 어려운 일이다

그러니 이번 시간엔 오브젝트에 대해 알아볼 것이다

 

 

Objects 맛보기

Get-ChildItem C:\

Img1 _ Get-ChildItem

 

Get-ChildItem, 지정된 위치에 있는 항목 및 자식 항목을 가져오는 명령이다.

그렇다면 이번엔 아래 코드를 살펴보자

Get-ChildItem -File C:\ | Select-Object Name, LastWriteTime, CreationTime, Directory, Length

Img2 _ Get-ChildItem extra values

 

Img2를 보면 기본 명령 실행 결과인 Img1과 다른 내용이 추가되어있는것을 알 수 있다.

CreationTime과 Directory는 어쩌다 나올 수 있었을까?

이는 Get-ChildItem의 결과 오브젝트에 포함되어있는 요소 이며, Get-Member를 통해 확인 가능하다.

Get-ChildItem | Get-Member

Img3 _ Get-Member

 

Get-Member는 오브젝트의 맴버, 속성 그리고 메서드를 가져오는 cmdlet이다.

 

 

 

Attributes 와 Methods

Get-Date의 예제를 Get-Help를 통해 보면 아래와 같다

Get-Help Get-Date -Examples

Img4 _ Examples of Get-Date

 

(Get-Date -Year 2020 -Month 12 -Day 31).DayOfYear

$DST.IsDaylightSaingTime()

오브젝트에 대한 이해 없이는 도무지 무슨 소린지 모를것이다.

이 프스트의 끝에 가면 위 명령줄의 의미가 이해가 갈것이니 우선 보류해두자

 

 

Attributes

Attributes는 Object가 '무엇인지' 알려준다.

아래는 Get-Volume 명령의 결과이다.

Img5 _ Get-Volume

빨간 부분이 Attributes이며

위에서 언급했듯이 Get-Member를 통해 확인 가능하다

Get-Volume | Get-Member -MemberType Properties

Img6 _ Get-Member를 통해 본 Get-Volume의 Attributes

 

우리는 다양한 attributes를 다루며 효율적으로 작업을 수행할 수 있다.

<예제>
installed hotfixes를 HTML 형식으로 저장하기

Get-HotFix | Select-Object HtFixID, InstalledOn | ConverTo-Html | Set-Content C:\Temp\hotfixes.htm

Img7 _ Attributes 활용

 

 

 

 

Methods

Methods는 Object가 무엇을 할 수 있는지를 담고있다.

이전에 우리는 Select-Object를 통해 Attributes에 접근했었다.

이번에는 새로운 방법으로 접근해보자

 

Img8 _ Object의 새로운 접근

Img8과 같이  (). 을 이용하여 접근할 수 있다.

아래 코드를 입력 후 CTRL + Space 해보자

(Get-Date).

Img9 _ Get-Date의 Properties

Get-Date 오브젝트를 통해 불러올 수 있는 다양한 속성들을 보여준다

물론 이말은, (). 수행 시 이미 결과는 나와 있다는 것이다.

 

위 리스트 중 AddDays(-7)을 해보자

(Get-Date).AddDays(-7)

Img10 _ (get-date).adddays(-7)

위 결과에서 유추할수 있겠지만

Methods무언가를 바꾸거나, 실행하는 속성이다

 

아래는 Get-ServiceMethods다.

Get-Service | Get-Member -MemberType method

Img11 _ Get-Service의 methods

 

이제 우리는 실행 방법을 알고있다. StopStart로 서비스를 만져보자

Img12 _ stop, start method

 

 

물론 문자열에도 적용 가능하다

특정 문자열을 저장한 후, 문자열을 다루는 다양한 methods를 만나보자

$string = 'hihi hello'
$string | Get-Member
$string.Substring(0,2)
$string.Split(' ')

Img13 _ 문자열의 다양한 methods

 

 

정리하자면 Methods는 무언가를 바꾸거나 실행시킬 수 있다.

Get-Member -MemberType Method

를 통해 methods탐색하고

(something).method

를 통해 실행할 수 있다.

 

 

 

미스테리의 해결

포스트의 첫 부분에서

(Get-Date -Year 2020 -Month 12 -Day 31).DayOfYear

$DST.IsDaylightSaingTime()

위 내용을 우리는 몰랐었다.

하지만 이제 알 수 있다.

 

먼저 처음. (Get-Date -Year 2020 -Month 12 -Day 31).DayOfYear

괄호 속 결과에 대해 DayOfYear라는 값을 불러온다는 의미이다.

 

다음 $DST.IsDaylightSaingTime()

$DST 즉, (Get-Date) 결과IsDaylightSaingTime method를 실행한다는 의미이다.

 

 

 

 

정리


객체 지향형 모델 : 누군가 오브젝트에 대해 이미 정의해 놓았다.

Object에는 Attributes와 Methods가 존재한다.


1. Get-Member -MemberType Properties/Method
attributes와 methods를 탐색한다

2. (something).attribute/method
특정 object의 attribute에 접근하거나 method를 실행할 수 있다.


 

 

 

참고

https://sid-500.com/2018/01/28/powershell-for-beginners-part-8-the-power-of-powershell-getting-in-touch-with-objects-get-member-select-object/

https://learn.microsoft.com/ko-kr/powershell/module/microsoft.powershell.utility/get-member?view=powershell-7.4

https://learn.microsoft.com/en-us/powershell/scripting/lang-spec/chapter-12?view=powershell-7.4