고유 멤버에 대해
간단한 설명
모든 PowerShell 개체에서 사용할 수 있는 PowerShell의 내장 멤버에 대한 정보를 제공합니다.
자세한 설명
개체를 만들 때 PowerShell은 각 개체에 일부 "숨겨진" 속성과 메서드를 추가합니다. 이러한 속성과 메서드는 내장 멤버로 알려져 있습니다. 이러한 내장 멤버는 일반적으로 보기에서 숨겨집니다. 이러한 숨겨진 멤버는 Force 매개 변수를 사용하여 Get-Member에서 볼 수 있습니다.
객체 보기
내장 멤버에는 개체 보기를 나타내는 MemberSet 속성 집합이 포함됩니다. MemberSet 속성에 대한 자세한 내용은 PSMemberSet참조하세요.
모든 PowerShell 개체에는 다음 속성이 포함됩니다.
psbase
psbase
MemberSet 확장 또는 적응 없이 기본 개체의 멤버를 포함합니다. 개체 형식에 따라[psobject]
인스턴스로 래핑된 .NET 인스턴스이거나 래퍼가 없는 경우 입력 개체 자체입니다.psadapted
psadapted
MemberSet 있는 경우 기본 개체와 조정된 멤버를 표시합니다. 조정된 멤버는 확장 형식 시스템(ETS)에 의해 추가됩니다.psextended
psextended
MemberSetTypes.ps1xml 파일 및 추가 멤버 cmdlet에 의해 추가된 멤버를 표시합니다.Add-Member
cmdlet을 사용하여 런타임에 모든 개체를 확장할 수 있습니다.psobject
psobject
MemberSet은 메서드, 속성 및 기타 개체 정보를 포함하여 모든 개체에 대한 풍부한 리플렉션의 원천이 됩니다..
예제
이 예제에서 $hash
사용자에 대한 정보를 포함하는 해시 테이블입니다.
Get-Member
의 Force 매개 변수는 개체의 고유 구성원을 보여줍니다.
$hash = @{
Age = 33
Name = 'Bob'
}
$hash | Get-Member -Force -MemberType MemberSet, CodeProperty
TypeName: System.Collections.Hashtable
Name MemberType Definition
---- ---------- ----------
pstypenames CodeProperty System.Collections.ObjectModel.Collection`1[[System.String, System.Private.CoreLib, Version=7…
psadapted MemberSet psadapted {Item, IsReadOnly, IsFixedSize, IsSynchronized, Keys, Values, SyncRoot, Count, Add,…
psbase MemberSet psbase {Item, IsReadOnly, IsFixedSize, IsSynchronized, Keys, Values, SyncRoot, Count, Add, Cl…
psextended MemberSet psextended {}
psobject MemberSet psobject {Members, Properties, Methods, ImmediateBaseObject, BaseObject, TypeNames, get_Membe…
psobject
사용하는 것은 Get-Member
사용하는 것과 유사하지만 더 많은 유연성을 제공합니다. 예를 들어 개체의 속성과 해당 값을 열거할 수 있습니다.
$hash.psobject.Properties | Select-Object Name, MemberType, Value
Name MemberType Value
---- ---------- -----
IsReadOnly Property False
IsFixedSize Property False
IsSynchronized Property False
Keys Property {Age, Name}
Values Property {33, Bob}
SyncRoot Property {[Age, 33], [Name, Bob]}
Count Property 2
해시 테이블을 PSCustomObject로 변환하여 생성된 객체와 비교합니다.
$user = [pscustomobject]$hash
$user.psobject.Properties | Select-Object Name, MemberType, Value
Name MemberType Value
---- ---------- -----
Age NoteProperty 33
Name NoteProperty Bob
해시 테이블의 키가 PSCustomObject속성으로 변환되었습니다. 새 속성은 이제 psextended
MemberSet의 일부입니다.
$user | Get-Member -Force -MemberType MemberSet, CodeProperty
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
pstypenames CodeProperty System.Collections.ObjectModel.Collection`1[[System.String, System.Private.CoreLib, Version=7…
psadapted MemberSet psadapted {ToString, GetType, Equals, GetHashCode}
psbase MemberSet psbase {ToString, GetType, Equals, GetHashCode}
psextended MemberSet psextended {Age, Name}
psobject MemberSet psobject {Members, Properties, Methods, ImmediateBaseObject, BaseObject, TypeNames, get_Membe…
유형 정보
pstypenames
CodeProperty 상속 순서대로 개체 형식 계층 구조를 나열합니다. 예를 들어:
$file = Get-Item C:\temp\test.txt
$file.pstypenames
System.IO.FileInfo
System.IO.FileSystemInfo
System.MarshalByRefObject
System.Object
출력은 가장 구체화된 개체 형식인 System.IO.FileInfo
에서 시작하여 그리고 가장 일반화된 형식인 System.Object
로 끝납니다.
방법
PowerShell은 모든 PowerShell 개체에 두 개의 숨겨진 메서드를 추가합니다. 이러한 메서드는 Get-Member -Force
명령 또는 탭 완성을 사용하여 표시되지 않습니다.
ForEach() 및 Where()
ForEach()
및 Where()
메서드는 모든 PowerShell 개체에서 사용할 수 있습니다.
그러나 집합 작업을 할 때 가장 유용합니다. 이러한 메서드를 사용하는 방법에 대한 자세한 내용은 about_Arrays참조하세요.
속성
모든 스칼라 형식에 기본 형식의 Count 또는 Length 속성이 있는 것은 아닙니다. PowerShell은 누락된 속성을 모든 스칼라 형식의 내장 멤버로 추가합니다.
메모
초기화되지 않은 변수는 암시적으로 $null
.
$null
은 스칼라이고, 내장된 개수 및 길이가 0입니다.
Count 및 Length 속성은 비슷하지만 데이터 형식에 따라 다르게 작동할 수 있습니다. 예를 들어, 문자열의 길이 는 문자열에 있는 문자 수를 의미합니다. Count 속성은 개체의 인스턴스 수입니다.
PS> $str = 'string'
PS> $str.Length
6
PS> $str.Count
1
이러한 속성에 대한 자세한 내용은 about_Properties참조하세요.
배열 인덱싱 스칼라 형식
개체가 인덱싱된 컬렉션이 아닌 경우 인덱스 연산자를 사용하여 첫 번째 요소에 액세스하면 개체 자체가 반환됩니다. 첫 번째 요소 이후의 인덱스 값은 $null
을 반환합니다.
PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True
자세한 내용은 about_Operators참조하세요.
형식에 대한 New() 메서드
PowerShell 5.0부터 PowerShell은 모든 .NET 형식에 대한 정적 New()
메서드를 추가합니다. 다음 예제에서는 동일한 결과를 생성합니다.
$expression = New-Object -TypeName regex -ArgumentList 'pattern'
$expression = [regex]::new('pattern')
new()
메서드를 사용하면 New-Object
사용하는 것보다 성능이 좋습니다.
자세한 내용은 about_Classes참조하십시오.
PowerShell