PowerShell은 객체 지향형 모델이다.
객체 지향형 모델은 여러 독립적인 부품들의 조합, 즉 객체들의 유기적인 결합으로 이루어진 모델이다.
사용자의 측면에서 아래 "Windows PowerShell in Action"의 저자 Bruce Payette의 말로 정리될 수 있겠다.
우리는 이미 누군가 정의해놓은 오브젝트들을 사용하고있다
다른 Unix-style shell은 보통 문자 입출력에 기반을 둔 text-based인 반면, PowerShell은 오브젝트를 다룬다.
그리하여 우리가 PowerShell을 통해 스크립트나 함수를 생성할 때면 항상 객체를 주고받는다
이는 다른 도구들과는 다른 PowerShell의 차별점이다.
아무리 도움말 시스템이 강력하더라도 objects에 대한 이해 없이 PowerShell을 완전히 배우기란 어려운 일이다
그러니 이번 시간엔 오브젝트에 대해 알아볼 것이다
Objects 맛보기
Get-ChildItem C:\
Get-ChildItem, 지정된 위치에 있는 항목 및 자식 항목을 가져오는 명령이다.
그렇다면 이번엔 아래 코드를 살펴보자
Get-ChildItem -File C:\ | Select-Object Name, LastWriteTime, CreationTime, Directory, Length
Img2를 보면 기본 명령 실행 결과인 Img1과 다른 내용이 추가되어있는것을 알 수 있다.
CreationTime과 Directory는 어쩌다 나올 수 있었을까?
이는 Get-ChildItem의 결과 오브젝트에 포함되어있는 요소 이며, Get-Member를 통해 확인 가능하다.
Get-ChildItem | Get-Member
Get-Member는 오브젝트의 맴버, 속성 그리고 메서드를 가져오는 cmdlet이다.
Attributes 와 Methods
Get-Date의 예제를 Get-Help를 통해 보면 아래와 같다
Get-Help Get-Date -Examples
(Get-Date -Year 2020 -Month 12 -Day 31).DayOfYear
$DST.IsDaylightSaingTime()
오브젝트에 대한 이해 없이는 도무지 무슨 소린지 모를것이다.
이 프스트의 끝에 가면 위 명령줄의 의미가 이해가 갈것이니 우선 보류해두자
Attributes
Attributes는 Object가 '무엇인지' 알려준다.
아래는 Get-Volume 명령의 결과이다.
빨간 부분이 Attributes이며
위에서 언급했듯이 Get-Member를 통해 확인 가능하다
Get-Volume | Get-Member -MemberType Properties
우리는 다양한 attributes를 다루며 효율적으로 작업을 수행할 수 있다.
<예제>
installed hotfixes를 HTML 형식으로 저장하기
Get-HotFix | Select-Object HtFixID, InstalledOn | ConverTo-Html | Set-Content C:\Temp\hotfixes.htm
Methods
Methods는 Object가 무엇을 할 수 있는지를 담고있다.
이전에 우리는 Select-Object를 통해 Attributes에 접근했었다.
이번에는 새로운 방법으로 접근해보자
Img8과 같이 (). 을 이용하여 접근할 수 있다.
아래 코드를 입력 후 CTRL + Space 해보자
(Get-Date).
Get-Date 오브젝트를 통해 불러올 수 있는 다양한 속성들을 보여준다
물론 이말은, (). 수행 시 이미 결과는 나와 있다는 것이다.
위 리스트 중 AddDays(-7)을 해보자
(Get-Date).AddDays(-7)
위 결과에서 유추할수 있겠지만
Methods는 무언가를 바꾸거나, 실행하는 속성이다
아래는 Get-Service의 Methods다.
Get-Service | Get-Member -MemberType method
이제 우리는 실행 방법을 알고있다. Stop과 Start로 서비스를 만져보자
물론 문자열에도 적용 가능하다
특정 문자열을 저장한 후, 문자열을 다루는 다양한 methods를 만나보자
$string = 'hihi hello'
$string | Get-Member
$string.Substring(0,2)
$string.Split(' ')
정리하자면 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://learn.microsoft.com/en-us/powershell/scripting/lang-spec/chapter-12?view=powershell-7.4
'programming ⌨ > 파워쉘 PowerShell' 카테고리의 다른 글
나를 위한 PowerShell(7) : WMI 클래스 활용 (0) | 2024.03.18 |
---|---|
나를 위한 PowerShell(5) : Pipeline과 출력 형식 (0) | 2024.02.29 |
나를 위한 PowerShell(4) : 개인 설정과 ISE (0) | 2024.02.28 |
나를 위한 PowerShell(3) : Execution Policy와 우회 (0) | 2024.02.26 |