PSCustomObject(사용자 지정 개체)를 사용하면 구조화된 데이터를 만들수 있다.
PowerShell에서 HashTable은 키/값을 가진 컬렉션이다. 이 HashTable 생성 후 출력하면 Name과 Value가 컬럼의 헤더로 출력된다.
## HashTable
$obj = @{
FirstName = 'Lionel'
LastName = 'Messi'
}
$obj
## Output
## Name Value
## ---- -----
## LastName Messi
## FirstName Lionel
HashTable을 이용해 PSCustomObject를 만드는 방법은 다음과 같다.
## HashTable to PSCustomObject
$hash = @{
FirstName = 'Lionel'
LastName = 'Messi'
}
$obj = New-Object -TypeName PSObject -Property $hash
$obj = [PSCustomObject]$hash
## Output
## LastName FirstName
## -------- ---------
## Messi Lionel
위 PSCustomObject를 출력하면 HashTable과 결과가 다르게 출력되고 Name과 Value라는 컬럼이 없고 키가 컬럼의 헤더로 출력된다.
HashTable의 선언돠 동시에 PSCustomObject를 생성할 수도 있다.
## PSCustomObject
$obj = [PSCustomObject]@{
FirstName = 'Lionel'
LastName = 'Messi'
}
HashTable에서 값에 접근하기 위해서는 키를 제공한다. 하지만 PSCustomObject는 일반 개체처럼 속성에 액세스하고 값을 가지고 오고 속성 이름에는 문자열도 사용할 수 있다.
## PSCustomObject
$obj = [PSCustomObject]@{
FirstName = 'Lionel'
LastName = 'Messi'
}
## PSCustomObject access
$obj.FirstName
$obj.'FirstName'
Add-Member를 사용하여 PSCustomObject에 새 속성을 추가할 수 있다.
## PSCustomObject
$obj = [PSCustomObject]@{
FirstName = 'Lionel'
LastName = 'Messi'
}
## PSCustomObject에 새 속성 추가
$obj | Add-Member -MemberType NoteProperty -Name 'Country' -Value 'Argentina'
PowerShell 개체에서 사용할 수 있는 PowerShell의 내장 멤버인 .psobject를 사용해 개체의 속성을 제거할 수 있다.
$obj.psobject.Properties.Remove('Country')
개체에 모든 속성 이름 목록을 가져올 수 있다.
## List property name
$obj | Get-Member -MemberType NoteProperty | Select -ExpandProperty Name
$obj.psobject.Properties.name