다음을 통해 공유


Add-Member

PowerShell 개체의 인스턴스에 사용자 지정 속성 및 메서드를 추가합니다.

구문

Add-Member
   -InputObject <PSObject>
   -TypeName <String>
   [-PassThru]
   [<CommonParameters>]
Add-Member
   [-NotePropertyMembers] <IDictionary>
   -InputObject <PSObject>
   [-TypeName <String>]
   [-Force]
   [-PassThru]
   [<CommonParameters>]
Add-Member
   [-NotePropertyName] <String>
   [-NotePropertyValue] <Object>
   -InputObject <PSObject>
   [-TypeName <String>]
   [-Force]
   [-PassThru]
   [<CommonParameters>]
Add-Member
   [-MemberType] <PSMemberTypes>
   [-Name] <String>
   [[-Value] <Object>]
   [[-SecondValue] <Object>]
   -InputObject <PSObject>
   [-TypeName <String>]
   [-Force]
   [-PassThru]
   [<CommonParameters>]

Description

Add-Member cmdlet을 사용하면 PowerShell 개체의 인스턴스에 멤버(속성 및 메서드)를 추가할 수 있습니다. 예를 들어 개체에 대한 설명이 포함된 NoteProperty 멤버 또는 개체를 변경하는 스크립트를 실행하는 ScriptMethod 멤버를 추가할 수 있습니다.

Add-Member사용하려면 개체를 Add-Member파이프하거나 InputObject 매개 변수를 사용하여 개체를 지정합니다.

MemberType 매개 변수는 추가할 멤버의 형식을 나타냅니다. Name 매개 변수는 새 멤버에 이름을 할당하고 Value 매개 변수는 멤버의 값을 설정합니다.

추가하는 속성 및 메서드는 지정한 개체의 특정 인스턴스에만 추가됩니다. Add-Member 개체 형식을 변경하지 않습니다. 새 개체 형식을 만들려면 Add-Type cmdlet을 사용합니다.

Export-Clixml cmdlet을 사용하여 추가 멤버를 포함한 개체의 인스턴스를 파일에 저장할 수도 있습니다. 그런 다음 Import-Clixml cmdlet을 사용하여 내보낸 파일에 저장된 정보에서 개체의 인스턴스를 다시 만들 수 있습니다.

Windows PowerShell 3.0부터 Add-Member 개체에 메모 속성을 더 쉽게 추가할 수 있는 새로운 기능이 있습니다. NotePropertyNameNotePropertyValue 매개 변수를 사용하여 메모 속성을 정의하거나 메모 속성 이름 및 값의 해시 테이블을 사용하는 NotePropertyMembers 매개 변수를 사용할 수 있습니다.

또한 Windows PowerShell 3.0부터 출력 개체를 생성하는 PassThru 매개 변수가 덜 자주 필요합니다. 이제 Add-Member 새 멤버를 더 많은 형식의 입력 개체에 직접 추가합니다. 자세한 내용은 PassThru 매개 변수 설명을 참조하세요.

예제

예제 1: PSObject에 메모 속성 추가

다음은 파일을 나타내는 FileInfo 개체에 값이 "Done"인 Test.txt note 속성을 추가하는 예제입니다.

첫 번째 명령은 Get-ChildItem cmdlet을 사용하여 파일을 나타내는 Test.txt 개체를 가져옵니다. $a 변수에 저장합니다.

두 번째 명령은 $a개체에 note 속성을 추가합니다.

세 번째 명령은 점 표기법을 사용하여 개체의 $a 속성 값을 가져옵니다. 출력에서 보여 주듯이 값은 "완료"입니다.

$A = Get-ChildItem c:\ps-test\test.txt
$A | Add-Member -NotePropertyName Status -NotePropertyValue Done
$A.Status

Done

예제 2: PSObject에 별칭 속성 추가

다음 예제에서는 파일을 나타내는 개체에 Test.txt 별칭 속성을 추가합니다. 새 속성은 Length 속성의 별칭입니다.

첫 번째 명령은 Get-ChildItem cmdlet을 사용하여 Test.txtFileInfo 개체를 가져옵니다.

두 번째 명령은 Size 별칭 속성을 추가합니다. 세 번째 명령은 점 표기법을 사용하여 새 Size 속성의 값을 가져옵니다.

$A = Get-ChildItem C:\Temp\test.txt
$A | Add-Member -MemberType AliasProperty -Name Size -Value Length
$A.Size

2394

예제 3: 문자열에 StringUse note 속성 추가

다음은 문자열에 StringUse note 속성을 추가하는 예제입니다. Add-Member String 입력 개체에 형식을 추가할 수 없으므로 PassThru 매개 변수를 지정하여 출력 개체를 생성할 수 있습니다. 예제의 마지막 명령은 새 속성을 표시합니다.

이 예제에서는 NotePropertyMembers 매개 변수를 사용합니다. NotePropertyMembers 매개 변수의 값은 해시 테이블입니다. 키는 Note 속성 이름, StringUse값이며, 값은 note 속성 값인 표시.

$A = "A string"
$A = $A | Add-Member -NotePropertyMembers @{StringUse="Display"} -PassThru
$A.StringUse

Display

예제 4: FileInfo 개체에 스크립트 메서드 추가

다음은 파일 크기를 가장 가까운 MegaByte로 계산하는 FileInfo 개체에 SizeInMB 스크립트 메서드를 추가하는 예제입니다. 두 번째 명령은 형식의 Round 정적 메서드를 사용하여 파일 크기를 두 번째 소수 자릿수로 반올림하는 [math] 만듭니다.

Value 매개 변수는 현재 개체를 나타내는 $This 자동 변수도 사용합니다. $This 변수는 새 속성과 메서드를 정의하는 스크립트 블록에서만 유효합니다.

마지막 명령은 점 표기법을 사용하여 변수의 개체에서 새 $A 스크립트 메서드를 호출합니다.

$A = Get-ChildItem C:\Temp\test.txt
$S = {[math]::Round(($this.Length / 1MB), 2)}
$A | Add-Member -MemberType ScriptMethod -Name "SizeInMB" -Value $S
$A.SizeInMB()

0.43

예제 5: 개체의 모든 속성을 다른 개체에 복사

이 함수는 한 개체의 모든 속성을 다른 개체에 복사합니다.

foreach 루프는 Get-Member cmdlet을 사용하여 From 개체의 각 속성을 가져옵니다. foreach 루프 내의 명령은 각 속성에 대해 계열로 수행됩니다.

Add-Member 명령은 From 개체의 속성을 To 개체에 NoteProperty추가합니다. 값은 Value 매개 변수를 사용하여 복사됩니다. Force 매개 변수를 사용하여 멤버 이름이 같은 멤버를 추가합니다.

function Copy-Property ($From, $To)
{
    $properties = Get-Member -InputObject $From -MemberType Property
    foreach ($p in $properties)
    {
        $To | Add-Member -MemberType NoteProperty -Name $p.Name -Value $From.$($p.Name) -Force
    }
}

예제 6: 사용자 지정 개체 만들기

이 예제에서는 Asset 사용자 지정 개체를 만듭니다.

New-Object cmdlet은 PSObject만듭니다. 이 예제에서는 변수에 $Asset 저장합니다.

두 번째 명령은 [ordered] 형식 가속기를 사용하여 이름과 값의 정렬된 사전을 만듭니다. 이 명령은 결과를 $D 변수에 저장합니다.

세 번째 명령은 cmdlet의 Add-Member 매개 변수를 사용하여 $D 변수의 사전을 PSObject추가합니다. TypeName 속성은 PSObject새 이름 Asset할당합니다.

마지막 명령은 새 Asset 개체를 Get-Member cmdlet으로 파이프합니다. 출력은 개체에 Asset 형식 이름과 정렬된 사전에서 정의한 메모 속성이 있음을 보여 줍니다.

$Asset = New-Object -TypeName PSObject
$d = [ordered]@{Name="Server30";System="Server Core";PSVersion="4.0"}
$Asset | Add-Member -NotePropertyMembers $d -TypeName Asset
$Asset | Get-Member

TypeName: Asset

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
Name        NoteProperty System.String Name=Server30
PSVersion   NoteProperty System.String PSVersion=4.0
System      NoteProperty System.String System=Server Core

매개 변수

-Force

이 cmdlet은 개체에 이름이 같은 사용자 지정 멤버가 있더라도 새 멤버를 추가한다는 것을 나타냅니다. Force 매개 변수를 사용하여 형식의 표준 멤버를 바꿀 수 없습니다.

형식:SwitchParameter
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-InputObject

새 멤버가 추가되는 개체를 지정합니다. 개체가 포함된 변수를 입력하거나 개체를 가져오는 명령이나 식을 입력합니다.

형식:PSObject
Position:Named
Default value:None
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:False

-MemberType

추가할 멤버의 형식을 지정합니다. 이 매개 변수는 필수입니다. 이 매개 변수에 허용되는 값은 다음과 같습니다.

  • NoteProperty
  • AliasProperty
  • ScriptProperty
  • CodeProperty
  • ScriptMethod
  • CodeMethod

이러한 값에 대한 자세한 내용은 MSDN 라이브러리의 PSMemberTypes 열거형 참조하세요.

모든 개체에 모든 형식의 멤버가 있는 것은 아닙니다. 개체에 없는 멤버 형식을 지정하면 PowerShell에서 오류가 반환됩니다.

형식:PSMemberTypes
별칭:Type
허용되는 값:AliasProperty, CodeProperty, Property, NoteProperty, ScriptProperty, Properties, PropertySet, Method, CodeMethod, ScriptMethod, Methods, ParameterizedProperty, MemberSet, Event, Dynamic, All
Position:0
Default value:None
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Name

이 cmdlet이 추가하는 멤버의 이름을 지정합니다.

형식:String
Position:1
Default value:None
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-NotePropertyMembers

해시 테이블 또는 메모 속성 이름 및 값의 순서가 지정된 사전을 지정합니다. 키가 note 속성 이름이고 값이 note 속성 값인 해시 테이블 또는 사전을 입력합니다.

PowerShell의 해시 테이블 및 정렬된 사전에 대한 자세한 내용은 about_Hash_Tables참조하세요.

이 매개 변수는 Windows PowerShell 3.0에서 도입되었습니다.

형식:IDictionary
Position:0
Default value:None
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-NotePropertyName

note 속성 이름을 지정합니다.

이 매개 변수를 NotePropertyValue 매개 변수와 함께 사용합니다. 이 매개 변수는 선택 사항입니다.

이 매개 변수는 Windows PowerShell 3.0에서 도입되었습니다.

형식:String
Position:0
Default value:None
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-NotePropertyValue

note 속성 값을 지정합니다.

이 매개 변수를 NotePropertyName 매개 변수와 함께 사용합니다. 이 매개 변수는 선택 사항입니다.

이 매개 변수는 Windows PowerShell 3.0에서 도입되었습니다.

형식:Object
Position:1
Default value:None
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-PassThru

작업 중인 항목을 나타내는 개체를 반환합니다. 기본적으로 이 cmdlet은 출력을 생성하지 않습니다.

대부분의 개체에 대해 Add-Member 입력 개체에 새 멤버를 추가합니다. 그러나 입력 개체가 문자열인 경우 Add-Member 입력 개체에 멤버를 추가할 수 없습니다. 이러한 개체의 경우 PassThru 매개 변수를 사용하여 출력 개체를 만듭니다.

Windows PowerShell 2.0에서 Add-Member 개체가 아닌 개체의 PSObject 래퍼에만 멤버를 추가했습니다. PassThru 매개 변수를 사용하여 PSObject 래퍼가 있는 개체에 대한 출력 개체를 만듭니다.

형식:SwitchParameter
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-SecondValue

AliasProperty, ScriptProperty, CodeProperty또는 CodeMethod 멤버에 대한 선택적 추가 정보를 지정합니다.

AliasProperty추가할 때 사용되는 경우 이 매개 변수는 데이터 형식이어야 합니다. 지정된 데이터 형식으로의 변환은 AliasProperty값에 추가됩니다.

예를 들어 문자열 속성에 대한 대체 이름을 제공하는 AliasProperty 추가하는 경우 System.Int32SecondValue 매개 변수를 지정하여 해당 AliasProperty사용하여 액세스할 때 해당 문자열 속성의 값을 정수로 변환해야 함을 나타낼 수도 있습니다.

SecondValue 매개 변수를 사용하여 ScriptProperty 멤버를 추가할 때 추가 ScriptBlock 지정할 수 있습니다. Value 매개 변수에 지정된 첫 번째 ScriptBlock변수 값을 가져오는 데 사용됩니다. SecondValue 매개 변수에 지정된 두 번째 ScriptBlock변수 값을 설정하는 데 사용됩니다.

형식:Object
Position:3
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-TypeName

형식의 이름을 지정합니다.

형식이 System 네임스페이스의 클래스이거나 형식 가속기가 있는 형식인 경우 형식의 짧은 이름을 입력할 수 있습니다. 그렇지 않으면 전체 형식 이름이 필요합니다. 이 매개 변수는 InputObjectPSObject경우에만 유효합니다.

이 매개 변수는 Windows PowerShell 3.0에서 도입되었습니다.

형식:String
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Value

추가된 멤버의 초기 값을 지정합니다. AliasProperty, CodeProperty, ScriptProperty 또는 CodeMethod 멤버를 추가하는 경우 SecondValue 매개 변수를 사용하여 선택적 추가 정보를 제공할 수 있습니다.

형식:Object
Position:2
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

입력

PSObject

모든 개체 형식을 이 cmdlet으로 파이프할 수 있습니다.

출력

None or System.Object

PassThru 매개 변수를 사용하면 이 cmdlet은 새로 확장된 개체를 반환합니다. 그렇지 않으면 이 cmdlet은 출력을 생성하지 않습니다.

참고

PSObject 개체에만 멤버를 추가할 수 있습니다. 개체가 PSObject 개체인지 확인하려면 -is 연산자를 사용합니다.

예를 들어 $obj 변수에 저장된 개체를 테스트하려면 $obj -is [PSObject]입력합니다.

MemberType, 이름, SecondValue 매개 변수의 이름은 선택 사항입니다. 매개 변수 이름을 생략하면 명명되지 않은 매개 변수 값은 MemberType, Name, ValueSecondValue순서대로 표시되어야 합니다.

매개 변수 이름을 포함하는 경우 매개 변수는 순서에 따라 표시할 수 있습니다.

새 속성 및 메서드의 값을 정의하는 스크립트 블록에서 $this 자동 변수를 사용할 수 있습니다. $this 변수는 속성 및 메서드가 추가되는 개체의 인스턴스를 나타냅니다. $this 변수에 대한 자세한 내용은 about_Automatic_Variables참조하세요.