PowerShell ์ธํฐํ๋ฆฌํฐ ์ฐฝ์ ์๋ ๋ช
๋ น์ ํ
์คํธ ์ถ๋ ฅ์ ์ธ๊ฐ์ ์ธ์์ ์ ํฉํ ํ์์ผ๋ก ์ ๋ณด๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ์ผ ๋ฟ์
๋๋ค. ์ฌ์ค ์์์ผ
๋ชฉ์ฐจ :
PowerShell์ ๊ฐ์ฒด
๊ฐ์ฒด๋ ๋ฐ์ดํฐ ํ๋(์์ฑ, ์ด๋ฒคํธ ๋ฑ)์ ์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ฉ์๋(๋ฉ์๋)์ ๋ชจ์์ด๋ผ๋ ์ ์ ์๊ธฐํด ๋ณด๊ฒ ์ต๋๋ค. ํด๋น ๊ตฌ์กฐ๋ ์ผ๋ฐ์ ์ผ๋ก ํตํฉ .NET Core ํ๋ซํผ์์ ์ฌ์ฉ๋๋ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ํ์์ผ๋ก ์ง์ ๋ฉ๋๋ค. COM, CIM(WMI) ๋ฐ ADSI ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์์
ํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ์ดํฐ์ ๋ํด ๋ค์ํ ์์
์ ์ํํ๋ ค๋ฉด ์์ฑ๊ณผ ๋ฉ์๋๊ฐ ํ์ํฉ๋๋ค. ๋ํ PowerShell์์๋ ๊ฐ์ฒด๋ฅผ ํจ์ ๋ฐ cmdlet์ ์ธ์๋ก ์ ๋ฌํ๊ณ ํด๋น ๊ฐ์ ๋ณ์์ ํ ๋นํ ์ ์์ผ๋ฉฐ,
๊ฐ์ฒด ๊ตฌ์กฐ ๋ณด๊ธฐ
์๋ฅผ ๋ค์ด, ์์คํ ์์ ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ๋ํ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ Get-Process cmdlet์ ์คํํด ๋ณด๊ฒ ์ต๋๋ค.
๋ฐํ๋ ๊ฐ์ฒด์ ์์ฑ๊ณผ ํด๋น ๋ฉ์๋์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ง ์๋ ์ผ๋ถ ํ์ํ๋ ํ
์คํธ ๋ฐ์ดํฐ๊ฐ ํ์๋ฉ๋๋ค. ์ถ๋ ฅ์ ๋ฏธ์ธ ์กฐ์ ํ๋ ค๋ฉด ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ๊ฒ์ฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์์ผ ํ๋ฉฐ, Get-Member cmdlet์ด ์ด์ ๋์์ด ๋ ๊ฒ์
๋๋ค.
Get-Process | Get-Member
์ฌ๊ธฐ์๋ ์ด๋ฏธ ์ ํ๊ณผ ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ ์์ผ๋ฉฐ ์ถ๊ฐ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์
๋ ฅ์ ํฌํจ๋ ๊ฐ์ฒด์ ์์ฑ๋ง ํ์ํ ์ ์์ต๋๋ค.
Get-Process | Get-Member -MemberType Property
์ด๋ฌํ ์ง์์ ๋ํํ์ผ๋ก ๊ด๋ฆฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ฑฐ๋ ๊ณ ์ ํ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ ๋ฐ ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์๋ต ์์ฑ์ ์ฌ์ฉํ์ฌ ์ ์ง๋ ํ๋ก์ธ์ค์ ๋ํ ์ ๋ณด๋ฅผ ์ป์ผ๋ ค๋ ๊ฒฝ์ฐ์ ๋๋ค.
๊ฐ์ฒด ํํฐ๋ง
PowerShell์ ์ฌ์ฉํ๋ฉด ํน์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ๊ฐ์ฒด๊ฐ ํ์ดํ๋ผ์ธ์ ํตํด ์ ๋ฌ๋ ์ ์์ต๋๋ค.
Where-Object { ะฑะปะพะบ ััะตะฝะฐัะธั }
๊ดํธ ์์ ์คํฌ๋ฆฝํธ ๋ธ๋ก์ ์คํํ ๊ฒฐ๊ณผ๋ ๋ถ์ธ ๊ฐ์ด์ด์ผ ํฉ๋๋ค. true($true)์ด๋ฉด Where-Object cmdlet์ ์ ๋ ฅ๋ ๊ฐ์ฒด๊ฐ ํ์ดํ๋ผ์ธ์ ๋ฐ๋ผ ์ ๋ฌ๋๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด($false) ์ญ์ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ค์ง๋ Windows Server ์๋น์ค ๋ชฉ๋ก์ ํ์ํด ๋ณด๊ฒ ์ต๋๋ค. Status ์์ฑ์ด "Stopped"๋ก ์ค์ ๋ ํญ๋ชฉ:
Get-Service | Where-Object {$_.Status -eq "Stopped"}
์ฌ๊ธฐ์ ๋ค์ ํ
์คํธ ํํ์ ๋ณผ ์ ์์ง๋ง ํ์ดํ๋ผ์ธ์ ํต๊ณผํ๋ ๊ฐ์ฒด์ ์ ํ๊ณผ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ ค๋ ๊ฒฝ์ฐ ์ด๋ ต์ง ์์ต๋๋ค.
Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member
๊ฐ์ฒด ์ ๋ ฌ
๊ฐ์ฒด๋ฅผ ํ์ดํ๋ผ์ธ์ผ๋ก ์ฒ๋ฆฌํ ๋ ๊ฐ์ฒด๋ฅผ ์ ๋ ฌํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์์ต๋๋ค. Sort-Object cmdlet์๋ ์์ฑ ์ด๋ฆ(์ ๋ ฌ ํค)์ด ์ ๋ฌ๋๊ณ ํด๋น ๊ฐ์ ๋ฐ๋ผ ์ ๋ ฌ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. ์ฌ์ฉ๋ CPU ์๊ฐ(cpu ์์ฑ)์ ๊ธฐ์ค์ผ๋ก ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ์ถ๋ ฅ์ ์ฝ๊ฒ ์ ๋ ฌํ ์ ์์ต๋๋ค.
Get-Process | Sort-Object โProperty cpu
-Property ๋งค๊ฐ ๋ณ์๋ Sort-Object cmdlet์ ํธ์ถํ ๋ ์๋ตํ ์ ์์ผ๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ญ๋ฐฉํฅ ์ ๋ ฌ์ ๊ฒฝ์ฐ -Descending ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Get-Process | Sort-Object cpu -Descending
๊ฐ์ฒด ๋ฐ ํด๋น ๋ถ๋ถ ์ ํ
Select-Object cmdlet์ ์ฌ์ฉํ๋ฉด -First ๋๋ -Last ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ดํ๋ผ์ธ์ ์์ ๋๋ ๋์์ ํน์ ๊ฐ์์ ๊ฐ์ฒด๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋จ์ผ ๊ฐ์ฒด๋ ํน์ ์์ฑ์ ์ ํํ ์ ์๊ณ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์๋ ์์ต๋๋ค. ๊ฐ๋จํ ์๋ฅผ ์ฌ์ฉํ์ฌ cmdlet์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ค์ ๋ช ๋ น์ ์ต๋ RAM ์(WS ์์ฑ)์ ์๋นํ๋ 10๊ฐ ํ๋ก์ธ์ค์ ๋ํ ์ ๋ณด๋ฅผ ํ์ํฉ๋๋ค.
Get-Process | Sort-Object WS -Descending | Select-Object -First 10
ํ์ดํ๋ผ์ธ์ ํต๊ณผํ๋ ๊ฐ์ฒด์ ํน์ ์์ฑ๋ง ์ ํํ๊ณ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์์ฑ์ ์์ฑํ ์ ์์ต๋๋ค.
Get-Process | Select-Object ProcessName, Id -First 1
ํ์ดํ๋ผ์ธ ์์ ์ ๊ฒฐ๊ณผ๋ก Get-Process cmdlet์์ ๋ฐํ๋ ๊ตฌ์กฐ์ ๊ตฌ์กฐ๊ฐ ๋ค๋ฅธ ์ ๊ฐ์ฒด๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค. Get-Member๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member
Select-Object๋ ์ฐ๋ฆฌ๊ฐ ์ง์ ํ ๋ ๊ฐ์ ํ๋๋ง ํฌํจํ๋ ๋จ์ผ ๊ฐ์ฒด(-First 1)๋ฅผ ๋ฐํํฉ๋๋ค. ํด๋น ๊ฐ์ Get-Process cmdlet์ ์ํด ํ์ดํ๋ผ์ธ์ ์ ๋ฌ๋ ์ฒซ ๋ฒ์งธ ๊ฐ์ฒด์์ ๋ณต์ฌ๋์์ต๋๋ค. PowerShell ์คํฌ๋ฆฝํธ์์ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ Select-Object๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()
Select-Object๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํํ๋์ด์ผ ํ๋ ๊ฐ์ฒด์ ๊ณ์ฐ๋ ์์ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}
์ปจ๋ฒ ์ด์ด๋ฅผ ํต๊ณผํ๋ ๋ฌผ์ฒด์ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member
ForEach-Object, Group-Object ๋ฐ Measure-Object
๊ฐ์ฒด ์์ ์ ์ํ ๋ค๋ฅธ cmdlet์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ์ฅ ์ ์ฉํ ์ธ ๊ฐ์ง์ ๋ํด ์ด์ผ๊ธฐํด ๋ณด๊ฒ ์ต๋๋ค.
ForEach-๊ฐ์ฒด ํ์ดํ๋ผ์ธ์ ๊ฐ ๊ฐ์ฒด์ ๋ํด PowerShell ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค.
ForEach-Object { ะฑะปะพะบ ััะตะฝะฐัะธั }
๊ทธ๋ฃน ๊ฐ์ฒด ์์ฑ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฃนํํฉ๋๋ค.
Group-Object PropertyName
-NoElement ๋งค๊ฐ๋ณ์์ ํจ๊ป ์คํํ๋ฉด ๊ทธ๋ฃน์ ์์ ์๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ธก์ ๊ฐ์ฒด ํ์ดํ๋ผ์ธ์ ๊ฐ์ฒด ํ๋ ๊ฐ๋ณ๋ก ๋ค์ํ ์์ฝ ๋งค๊ฐ๋ณ์๋ฅผ ์ง๊ณํฉ๋๋ค(ํฉ๊ณ๋ฅผ ๊ณ์ฐํ๊ณ ์ต์๊ฐ, ์ต๋๊ฐ ๋๋ ํ๊ท ๊ฐ๋ ์ฐพ์ต๋๋ค).
Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum
์ผ๋ฐ์ ์ผ๋ก ์ค๋ช
๋ cmdlet์ ๋ํํ์ผ๋ก ์ฌ์ฉ๋๋ฉฐ ์คํฌ๋ฆฝํธ์์ ์์ฑ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
.NET ๋ฐ COM ๊ฐ์ฒด ๋ง๋ค๊ธฐ(์ ๊ฐ์ฒด)
์์คํ ๊ด๋ฆฌ์์๊ฒ ์ ์ฉํ .NET Core ๋ฐ COM ์ธํฐํ์ด์ค๊ฐ ํฌํจ๋ ์ํํธ์จ์ด ๊ตฌ์ฑ ์์๊ฐ ๋ง์ด ์์ต๋๋ค. System.Diagnostics.EventLog ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด Windows PowerShell์์ ์ง์ ์์คํ ๋ก๊ทธ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. -TypeName ๋งค๊ฐ ๋ณ์์ ํจ๊ป New-Object cmdlet์ ์ฌ์ฉํ์ฌ ์ด ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ง๋๋ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
New-Object -TypeName System.Diagnostics.EventLog
ํน์ ์ด๋ฒคํธ ๋ก๊ทธ๋ฅผ ์ง์ ํ์ง ์์์ผ๋ฏ๋ก ํด๋์ค์ ๊ฒฐ๊ณผ ์ธ์คํด์ค์๋ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ง ์์ต๋๋ค. ์ด๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ์์ฑ ์ค์ -ArgumentList ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์์ฑ์ ๋ฉ์๋๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
๋ก๊ทธ์ ์ก์ธ์คํ๋ ค๋ฉด "Application" ๋ฌธ์์ด์ ์์ฑ์์ ์ธ์๋ก ์ ๋ฌํด์ผ ํฉ๋๋ค.
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog
$AppLog ๋ณ์์ ๋ช
๋ น ์ถ๋ ฅ์ ์ ์ฅํ์ต๋๋ค. ํ์ดํ๋ผ์ธ์ ์ผ๋ฐ์ ์ผ๋ก ๋ํํ ๋ชจ๋์์ ์ฌ์ฉ๋์ง๋ง ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ ค๋ฉด ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ์งํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ํ ํต์ฌ .NET Core ํด๋์ค๋ ์์คํ
๋ค์์คํ์ด์ค์ ํฌํจ๋์ด ์์ต๋๋ค. PowerShell์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๋ค์์คํ์ด์ค์์ ์ง์ ๋ ์ ํ์ ์ฐพ์ผ๋ฏ๋ก System.Diagnostics.EventLog ๋์ Diagnostics.EventLog๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๋งค์ฐ ์ ํํฉ๋๋ค.
๋ก๊ทธ ์์ ์ ์ํด ์ ์ ํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
$AppLog | Get-Member -MemberType Method
์ก์ธ์ค ๊ถํ์ด ์๋ ๊ฒฝ์ฐ Clear() ๋ฉ์๋์ ์ํด ์ญ์ ๋์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
$AppLog.Clear()
New-Object cmdlet์ COM ๊ตฌ์ฑ ์์ ์์ ์๋ ์ฌ์ฉ๋ฉ๋๋ค. Windows ์คํฌ๋ฆฝํธ ์๋ฒ์ ํจ๊ป ์ ๊ณต๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ถํฐ Internet Explorer์ ๊ฐ์ ActiveX ์์ฉ ํ๋ก๊ทธ๋จ์ ์ด๋ฅด๊ธฐ๊น์ง ์๋นํ ๋ง์ ๊ฒ๋ค์ด ์์ต๋๋ค. COM ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ ค๋ฉด ์ํ๋ ํด๋์ค์ ํ๋ก๊ทธ๋๋ฐ ProgId๋ฅผ ์ฌ์ฉํ์ฌ -ComObject ๋งค๊ฐ ๋ณ์๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค.
New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject
์์์ ๊ตฌ์กฐ๋ก ์์ ๋ง์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ ค๋ฉด New-Object๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋๋ฌด ๊ตฌ์์ด๊ณ ๋ฒ๊ฑฐ๋ก์ ๋ณด์ ๋๋ค. ์ด cmdlet์ PowerShell ์ธ๋ถ์ ์ํํธ์จ์ด ๊ตฌ์ฑ ์์์ ์๋ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ํฅํ ๊ธฐ์ฌ์์๋ ์ด ๋ฌธ์ ์ ๋ํด ๋ ์์ธํ ๋ ผ์ํ ๊ฒ์ ๋๋ค. .NET ๋ฐ COM ๊ฐ์ฒด ์ธ์๋ CIM(WMI) ๋ฐ ADSI ๊ฐ์ฒด๋ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ ์ ๋ฉ์๋ ํธ์ถ
System.Environment ๋ฐ System.Math๋ฅผ ํฌํจํ ์ผ๋ถ .NET Core ํด๋์ค๋ ์ธ์คํด์คํํ ์ ์์ต๋๋ค. ๊ทธ๋ค์
[System.Environment] | Get-Member
์ ์ ๋ฉค๋ฒ๋ง ๋ณด๋ ค๋ฉด -Static ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ Get-Member๋ฅผ ํธ์ถํฉ๋๋ค(๊ฐ์ฒด ์ ํ ์ฐธ๊ณ ).
[System.Environment] | Get-Member -Static
์ ์ ์์ฑ ๋ฐ ๋ฉ์๋์ ์ก์ธ์คํ๋ ค๋ฉด ๋ฆฌํฐ๋ด ๋ค์ ๋ง์นจํ ๋์ ๋ ๊ฐ์ ์ฐ์ ์ฝ๋ก ์ ์ฌ์ฉํ์ธ์.
[System.Environment]::OSVersion
๋๋
$test=[System.Math]::Sqrt(25)
$test
$test.GetType()
PSCustomObject๋ฅผ ์ ๋ ฅํ์ธ์.
PowerShell์์ ์ฌ์ฉํ ์ ์๋ ๋ค์ํ ๋ฐ์ดํฐ ์ ํ ์ค์์ ์์ ๊ตฌ์กฐ์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋๋ก ์ค๊ณ๋ PSCustomObject๋ฅผ ์ธ๊ธํ ๊ฐ์น๊ฐ ์์ต๋๋ค. New-Object cmdlet์ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฒ์ ๊ณ ์ ์ ์ด์ง๋ง ๋ฒ๊ฑฐ๋กญ๊ณ ์ค๋๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
$object = New-Object โTypeName PSCustomObject -Property @{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'}
๊ฐ์ฒด์ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
$object | Get-Member
PowerShell 3.0๋ถํฐ ๋ค๋ฅธ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
$object = [PSCustomObject]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ ์ค ํ๋๋ก ๋ฐ์ดํฐ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
$object.Name
$object.'Name'
$value = 'Name'
$object.$value
๋ค์์ ๊ธฐ์กด ํด์ํ ์ด๋ธ์ ๊ฐ์ฒด๋ก ๋ณํํ๋ ์์ ๋๋ค.
$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()
์ด ์ ํ์ ๊ฐ์ฒด์ ๋จ์ ์ค ํ๋๋ ํด๋น ์์ฑ์ ์์๊ฐ ๋ณ๊ฒฝ๋ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด [ordered] ์์ฑ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ค๋ฅธ ์ต์
๋ ์์ต๋๋ค. ์์์๋ cmdlet ์ฌ์ฉ์ ์ดํด๋ณด์์ต๋๋ค.
$object | Add-Member โMemberType NoteProperty โName Age โValue 33
$object | Get-Member
Add-Member cmdlet์ ์ฌ์ฉํ๋ฉด "-MemberType ScriptMethod" ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ด์ ์ ๋ง๋ $object์ ์์ฑ๋ฟ๋ง ์๋๋ผ ๋ฉ์๋๋ ์ถ๊ฐํ ์ ์์ต๋๋ค.
$ScriptBlock = {
# ะบะพะด
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member
ScriptBlock ์ ํ์ $ScriptBlock ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ฉ์๋์ ๋ํ ์ฝ๋๋ฅผ ์ ์ฅํ์ต๋๋ค.
์์ฑ์ ์ ๊ฑฐํ๋ ค๋ฉด ํด๋น ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ญ์์ค.
$object.psobject.properties.remove('Name')
๋๋ง์ ์์ ๋ง๋ค๊ธฐ
PowerShell 5.0์๋ ๋ค์์ ์ ์ํ๋ ๊ธฐ๋ฅ์ด ๋์
๋์์ต๋๋ค.
class MyClass
{
# ัะตะปะพ ะบะปะฐััะฐ
}
์ด๋ ํด๋น ์์ฑ, ๋ฉ์๋ ๋ฐ ๊ธฐํ ์์๋ฅผ ์ค๋ช ํ๋ ๋ณธ๋ฌธ์ด ํฌํจ๋ ์ง์ ํ .NET Core ์ ํ์ ๋๋ค. ๊ฐ์ฅ ๊ฐ๋จํ ํด๋์ค๋ฅผ ์ ์ํ๋ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
class MyClass
{
[string]$Name
[string]$City
[string]$Country
}
๊ฐ์ฒด(ํด๋์ค ์ธ์คํด์ค)๋ฅผ ๋ง๋ค๋ ค๋ฉด cmdlet์ ์ฌ์ฉํ์ธ์.
$object = New-Object -TypeName MyClass
๋๋
$object = [MyClass]::new()
๊ฐ์ฒด์ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํด ๋ณด๊ฒ ์ต๋๋ค.
$object | Get-Member
๋ฒ์๋ฅผ ์์ง ๋ง์ธ์. ์ ํ ์ด๋ฆ์ ๋ฌธ์์ด๋ก ์ฐธ์กฐํ๊ฑฐ๋ ํด๋์ค๊ฐ ์ ์๋ ์คํฌ๋ฆฝํธ๋ ๋ชจ๋ ์ธ๋ถ์์ ์ ํ ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ํจ์๋ ๋ชจ๋์ด๋ ์คํฌ๋ฆฝํธ ์ธ๋ถ์์ ์ก์ธ์คํ ์ ์๋ ํด๋์ค ์ธ์คํด์ค(๊ฐ์ฒด)๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค.
๊ฐ์ฒด๋ฅผ ์์ฑํ ํ ํด๋น ์์ฑ์ ์ ๋ ฅํฉ๋๋ค.
$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object
ํด๋์ค ์ค๋ช
์ ์์ฑ ์ ํ๋ฟ๋ง ์๋๋ผ ํด๋น ๊ธฐ๋ณธ๊ฐ๋ ์ง์ ํฉ๋๋ค.
class Example
{
[string]$Name = 'John Doe'
}
ํด๋์ค ๋ฉ์๋์ ๋ํ ์ค๋ช ์ ํจ์ ์ค๋ช ๊ณผ ์ ์ฌํ์ง๋ง ํจ์ ๋จ์ด๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. ํจ์์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ํ ๊ฒฝ์ฐ ๋งค๊ฐ๋ณ์๊ฐ ๋ฉ์๋์ ์ ๋ฌ๋ฉ๋๋ค.
class MyClass
{
[string]$Name
[string]$City
[string]$Country
#ะพะฟะธัะฐะฝะธะต ะผะตัะพะดะฐ
Smile([bool]$param1)
{
If($param1) {
Write-Host ':)'
}
}
}
์ด์ ์ฐ๋ฆฌ ๋ฐ ๋ํ๋ ์์ ์ ์์ต๋๋ค.
$object = [MyClass]::new()
$object.Smile($true)
๋ฉ์๋๋ ์ค๋ฒ๋ก๋๋ ์ ์์ต๋๋ค. ๋ํ ํด๋์ค์๋
class MyClass2 : MyClass
{
#ัะตะปะพ ะฝะพะฒะพะณะพ ะบะปะฐััะฐ, ะฑะฐะทะพะฒัะผ ะดะปั ะบะพัะพัะพะณะพ ัะฒะปัะตััั MyClass
}
[MyClass2]::new().Smile($true)
PowerShell์์ ๊ฐ์ฒด ์์ ์ ๋ํ ์ค๋ช ์ ์์ ํ์ง ์์ต๋๋ค. ๋ค์ ๊ฐํ๋ฌผ์์๋ ์ค์ ์ฌ๋ก๋ฅผ ํตํด ์ด๋ฅผ ์ฌํ์ํค๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค. ์๋ฆฌ์ฆ์ ๋ค์ฏ ๋ฒ์งธ ๊ธฐ์ฌ์์๋ PowerShell์ ํ์ฌ ์ํํธ์จ์ด ๊ตฌ์ฑ ์์์ ํตํฉํ๋ ๋ฌธ์ ๋ฅผ ๋ค๋ฃฐ ๊ฒ์ ๋๋ค. ์ง๋ํธ์ ์๋ ๋งํฌ์์ ๋ณด์ค ์ ์์ต๋๋ค.
์ถ์ฒ : habr.com