항목
    about_Types.ps1xml

간단한 설명
    Types.ps1xml 파일을 사용하여 Windows PowerShell에서 사용되는 Microsoft .NET Framework 유형의 
    개체를 확장하는 방법에 대해 설명합니다. 

자세한 설명
    Windows PowerShell 설치 디렉터리($pshome)의 Types.ps1xml 파일은 속성과 메서드를 
    Windows PowerShell에서 사용되는 개체에 추가하는 데 사용할 수 있는 XML 기반의 텍스트 파일입니다. 
    Windows PowerShell에는 몇 가지 요소를 .NET Framework 유형에 추가하는 기본 제공 Types.ps1xml 
    파일이 있지만 추가 Types.ps1xml 파일을 만들어 유형을 더 확장할 수 있습니다.

    예를 들어 배열 개체(System.Array)에는 기본적으로 배열의 개체 수를 표시하는 Length 속성이 있습니다. 
    그러나 "length"라는 이름이 속성을 명확하게 설명하지 않기 때문에 Windows PowerShell은 동일한 값을 
    표시하는 "Count"라는 별칭 속성을 추가합니다. 다음 XML에서는 Count 속성을 System.Array 유형에 추가합니다.

        <Type>
            <Name>System.Array</Name>
            <Members>
                <AliasProperty>
                    <Name>Count</Name>
                    <ReferencedMemberName>
                        Length
                    </ReferencedMemberName>
                </AliasProperty>
            </Members>
        </Type>

    새 AliasProperty를 가져오려면 다음 예제와 같이 모든 배열에 대해 Get-Member 명령을 사용합니다.

        Get-Member -inputobject (1,2,3,4)


    이 명령은 다음과 같은 결과를 반환합니다.

	Name           MemberType    Definition
	----           ----------    ----------
	Count          AliasProperty Count = Length
	Address        Method        System.Object& Address(Int32 )
	Clone          Method        System.Object Clone()
	CopyTo         Method        System.Void CopyTo(Array array, Int32 index):
	Equals         Method        System.Boolean Equals(Object obj)
	Get            Method        System.Object Get(Int32 )
	...

    이에 따라 Windows PowerShell에서 배열의 Count 속성이나 Length 속성을 사용할 수 있습니다. 
    예를 들면 다음과 같습니다.

	C:\PS> (1, 2, 3, 4).count
	4

	C:\PS> (1, 2, 3, 4).length
	4
 

  새 Types.ps1xml 파일 만들기

      형식 지정에 스크립트 블록이 포함될 수 있으므로 Windows PowerShell과 함께 설치된 .ps1xml 파일에는 
      변조를 방지하도록 디지털 서명이 되어 있습니다. 따라서 속성이나 메서드를 .NET Framework 유형에 
      추가하려면 자체 Types.ps1xml 파일을 만든 다음 Windows PowerShell 콘솔에 추가합니다.

      새 파일을 만들려면 기존 Types.ps1xml 파일을 복사하여 시작합니다. 새 파일의 이름은 임의로 지정할 수 
      있지만 파일 이름 확장명은 .ps1xml이 되어야 합니다. Windows PowerShell에 액세스할 수 있는 디렉터리에 
      새 파일을 배치할 수 있지만 Windows PowerShell 설치 디렉터리($pshome)나 설치 디렉터리의 하위 디렉터리에 
      배치하는 것이 좋습니다.

      새 파일을 저장한 경우에는 Update-TypeData cmdlet을 사용하여 새 파일을 사용자의 Windows PowerShell 콘솔에 
      추가합니다. 사용자의 유형을 기본 제공 파일에 정의된 유형보다 우선적으로 적용하려면 Update-TypeData cmdlet의 
      PrependData 매개 변수를 사용합니다. Update-TypeData는 현재 콘솔에만 영향을 미칩니다. 이후의 모든 콘솔을 
      변경하려면 콘솔을 내보내거나 Update-TypeData 명령을 사용자의 Windows PowerShell 프로필에 추가합니다.


  Types.ps1xml 및 Add-Member

      Types.ps1xml 파일은 영향을 받는 Windows PowerShell 콘솔에서 지정된 .NET Framework 유형의 모든 개체 
      인스턴스에 속성과 메서드를 추가합니다. 그러나 속성이나 메서드를 개체 인스턴스 하나에만 추가해야 하는 
      경우에는 Add-Member cmdlet을 사용하십시오.

      자세한 내용은 Add-Member를 참조하십시오.


  예제: FileInfo 개체에 Age 멤버 추가

      이 예제에서는 Age 속성을 파일 개체(System.IO.FileInfo)에 추가하는 방법을 보여 줍니다. 파일의 사용 기간은 
      만든 시간과 현재 시간의 차이(일 수)입니다.

      가장 쉬운 방법은 원래 Types.ps1xml 파일을 새 파일의 템플릿으로 사용하는 것입니다. 다음 명령은 원래 파일을 
      $pshome 디렉터리에 있는 MyTypes.ps1xml이라는 파일에 복사합니다.

          copy-item Types.ps1xml MyTypes.ps1xml


      그런 다음 Types.ps1xml 파일을 메모장과 같은 XML 또는 텍스트 편집기에서 엽니다. Age 속성이 스크립트 
      블록을 사용하여 계산되기 때문에 새 Age 속성의 모델로 사용할 <ScriptProperty> 태그를 찾습니다. 

      코드의 <Type> 및 </Type> 태그 사이의 XML을 복사하여 스크립트 속성을 만듭니다. 그런 다음 여는 
      <?xml> 및 <Types> 태그와 닫는 </Types> 태그를 제외한 파일의 나머지 부분을 삭제합니다. 또한 
      오류를 방지하기 위해 디지털 서명도 삭제해야 합니다.

      원래 Types.ps1xml 파일에서 복사된 다음 스크립트 속성과 같은 모델 스크립트 속성부터 시작합니다.

          <?xml version="1.0" encoding="utf-8" ?>
          <Types>
              <Type>
                 <Name>System.Guid</Name>
                    <Members>
                        <ScriptProperty>
                            <Name>Guid</Name>
                            <GetScriptBlock>$this.ToString()</GetScriptBlock>
                        </ScriptProperty>
                    </Members>
              </Type>
          </Types>


      그런 다음 .NET Framework 유형의 이름, 속성의 이름 및 스크립트 블록의 값을 변경하여 파일 개체의 
      Age 속성을 만듭니다.


          <?xml version="1.0" encoding="utf-8" ?>
          <Types>
              <Type>
                 <Name>System.IO.FileInfo</Name>
                    <Members>
                        <ScriptProperty>
                            <Name>Age</Name>
                            <GetScriptBlock>
                               ((get-date) - ($this.creationtime)).days
                            </GetScriptBlock>
                        </ScriptProperty>
                    </Members>
              </Type>
          </Types>


      파일을 저장하고 닫은 후에 다음 명령과 같은 Update-TypeData 명령을 사용하여 새 Types.ps1xml 
      파일을 현재 콘솔에 추가합니다. 이 명령은 PrependData 매개 변수를 사용하여 원래 파일보다 우선 
      순위가 높은 순위에 새 파일을 배치합니다. Update-TypeData에 대한 자세한 내용은 Update-TypeData를 
      참조하십시오.

          update-typedata -prependpath $pshome\MyTypes.ps1xml

      변경을 테스트하려면 Get-ChildItem 명령을 사용하여 $pshome 디렉터리에 있는 PowerShell.exe 파일을 
      가져온 다음 Format-List cmdlet으로 파이프하여 파일의 모든 속성을 나열합니다. 변경의 결과로 Age 속성이 
      목록에 나타납니다.

        get-childitem $pshome\powershell.exe | format-list -property *	


        PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS...
        PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS...
        PSChildName       : powershell.exe
        PSDrive           : C
        PSProvider        : Microsoft.PowerShell.Core\FileSystem
        PSIsContainer     : False
        Age               : 16
        VersionInfo       : File:             C:\WINDOWS\system32\WindowsPow...
                    InternalName:     POWERSHELL
                    OriginalFilename: PowerShell.EXE
	...


      다음 명령을 사용하여 파일의 Age 속성도 표시할 수 있습니다.

	  (get-childitem $pshome\powershell.exe).age
          16
 

  Types.ps1xml 파일의 XML

      <Types> 태그는 Types.ps1xml 파일에 정의된 모든 유형을 묶습니다.<Types> 태그의 쌍은 
      하나만 있어야 합니다.

      Types.ps1xml 파일에서 설명된 각 .NET Framework 유형은 <Type> 태그의 쌍으로 표시되어야 
      합니다. 

      <Type> 태그에는 다음과 같은 태그가 포함되어야 합니다.

          <Name>: 영향을 받는 .NET Framework 유형의 이름을 묶는 
                  <Name> 태그의 쌍

          <Members>: .NET Framework 유형에 대해 정의된 새 속성과 
                     메서드의 태그를 묶는 <Members> 태그의 쌍

      다음 멤버 태그는 <Members> 태그 안에 포함될 수 있습니다.

      <AliasProperty>: 기존 속성의 새 이름을 정의합니다.

         <AliasProperty> 태그에는 새 속성의 이름을 지정하는 <Name> 태그의 쌍과 기존 속성을 지정하는 
         <ReferencedMemberName> 태그의 쌍이 있어야 합니다. 
         예를 들어 Count 별칭 속성은 배열 개체의 Length 속성에 대한 별칭입니다.

             <Type>
                 <Name>System.Array</Name>
                 <Members>
                     <AliasProperty>
                         <Name>Count</Name>
                         <ReferencedMemberName>Length</ReferencedMemberName>
                     </AliasProperty>
                 </Members>
             </Type>


      <CodeMethod>: .NET Framework 클래스의 정적 메서드를 참조합니다.

         <CodeMethod> 태그에는 새 메서드의 이름을 지정하는 <Name> 태그의 쌍과 메서드가 정의된 코드를 
         지정하는 <GetCodeReference> 태그의 쌍이 있어야 합니다. 

         예를 들어 디렉터리(System.IO.DirectoryInfo 개체)의 Mode 속성은 Windows PowerShell 파일 시스템 
         공급자에 정의된 코드 속성입니다.
        
             <Type>
                 <Name>System.IO.DirectoryInfo</Name>
                 <Members>
                     <CodeProperty>
                        <Name>Mode</Name>
                        <GetCodeReference>
                           <TypeName>Microsoft.PowerShell.Commands.FileSystemProvider</TypeName>
                           <MethodName>Mode</MethodName>
                        </GetCodeReference>
                     </CodeProperty>
                 </Members>
             </Type>

 
      <CodeProperty>: .NET Framework 클래스의 정적 메서드를 참조합니다.

         <CodeProperty> 태그에는 새 속성의 이름을 지정하는 <Name> 태그의 쌍과 속성이 정의된 코드를 지정하는 
         <GetCodeReference> 태그의 쌍이 있어야 합니다. 

         예를 들어 디렉터리(System.IO.DirectoryInfo 개체)의 Mode 속성은 Windows PowerShell 파일 시스템 
         공급자에 정의된 코드 속성입니다.

             <Type>
                 <Name>System.IO.DirectoryInfo</Name>
                 <Members>
                     <CodeProperty>
                        <Name>Mode</Name>
                        <GetCodeReference>
                           <TypeName>Microsoft.PowerShell.Commands.FileSystemProvider</TypeName>
                           <MethodName>Mode</MethodName>
                        </GetCodeReference>
                     </CodeProperty>
                 </Members>
             </Type>


      <MemberSet>: 멤버(속성 및 메서드)의 컬렉션을 정의합니다. 

         <MemberSet> 태그는 주 <Members> 태그 안에 나타납니다. 이 태그는 멤버 집합의 이름을 
         둘러싸는 <Name> 태그의 쌍과 집합의 멤버(속성 및 메서드)를 둘러싸는 보조 <Members> 
         태그의 쌍을 묶어야 합니다. 속성(예: <NoteProperty> 또는 <ScriptProperty>)이나 메서드(예: 
         <Method> 또는 <ScriptMethod>)를 만드는 태그는 집합의 멤버일 수 있습니다.

         Types.ps1xml 파일에서 <MemberSet> 태그는 Windows PowerShell에서 .NET Framework 개체의 
         기본 보기를 정의하는 데 사용됩니다. 이 경우에 멤버 집합의 이름(<Name> 태그 안의 값)은 
         항상 "PsStandardMembers"이고, 속성의 이름(<Name> 태그의 값)은 다음 중 하나입니다.

	    - DefaultDisplayProperty: 하나의 개체 속성입니다.

            - DefaultDisplayPropertySet: 하나 이상의 개체 속성입니다.

            - DefaultKeyPropertySet: 하나 이상의 개체 키 속성입니다. 키 속성은 세션 기록에 
              있는 항목의 ID 번호와 같이 속성 값의 인스턴스를 식별합니다.

         예를 들어 다음 XML에서는 Get-Service cmdlet이 반환하는 서비스(System.ServicePr
         ocess.ServiceController 개체)의 기본 표시를 정의합니다. 또한 Status, Name 및 
         DisplayName 속성이 있는 기본 속성 집합으로 구성된 "PsStandardMembers"라는 멤버 
         집합을 정의합니다.

             <Type>
                <Name>System.ServiceProcess.ServiceController</Name>
                <Members>
                   <MemberSet>
                       <Name>PSStandardMembers</Name>
                       <Members>
                           <PropertySet>
                             <Name>DefaultDisplayPropertySet</Name>
                             <ReferencedProperties>
                                <Name>Status</Name>
                                <Name>Name</Name>
                                <Name>DisplayName</Name>
                             </ReferencedProperties>
                           </PropertySet>
                       </Members>
                   </MemberSet>
                </Members>
             </Type>


   
      <Method>: 기본 개체의 네이티브 메서드를 참조합니다. 

      <Methods>: 개체의 메서드 컬렉션입니다.

      <NoteProperty>: 정적 값이 포함된 속성을 정의합니다.

         <NoteProperty> 태그에는 새 속성의 이름을 지정하는 <Name> 태그의 쌍과 속성의 값을 지정하는 
         <Value> 태그의 쌍이 있어야 합니다.

         예를 들어 다음 XML에서는 디렉터리(System.IO.DirectoryInfo 개체)의 Status 속성을 만듭니다. 
         Status 속성의 값은 항상 "Success"입니다.

             <Type>
                 <Name>System.IO.DirectoryInfo</Name>
                 <Members>
                     <NoteProperty>
                        <Name>Status</Name>
	                <Value>Success</Value>
                     </NoteProperty>
                 </Members>
             </Type>


      <ParameterizedProperty>: 인수와 반환 값을 사용하는 속성입니다.

      <Properties>: 개체의 속성 컬렉션입니다.

      <Property>: 기본 개체의 속성입니다.

      <PropertySet>: 개체의 속성 컬렉션을 정의합니다.

         <PropertySet> 태그에는 속성 집합의 이름을 지정하는 <Name> 태그의 쌍과 속성을 지정하는 
         <ReferencedProperty> 태그의 쌍이 있어야 합니다. 속성의 이름은 <Name> 태그 쌍으로 묶입니다. 

         Types.ps1xml에서 <PropertySet> 태그는 개체의 기본 표시에 대한 속성 집합을 정의하는 데 
         사용됩니다. <MemberSet> 태그의 <Name> 태그에 있는 "PsStandardMembers" 값으로 
         기본 표시를 식별할 수 있습니다.

         예를 들어 다음 XML에서는 디렉터리(System.IO.DirectoryInfo 개체)의 Status 속성을 만듭니다. 
         Status 속성의 값은 항상 "Success"입니다.

             <Type>
                 <Name>System.ServiceProcess.ServiceController</Name>
                 <Members>
                     <MemberSet>
                         <Name>PSStandardMembers</Name>
                         <Members>
                             <PropertySet>
                                 <Name>DefaultDisplayPropertySet</Name>
                                 <ReferencedProperties>
                                     <Name>Status</Name
                                     <Name>Name</Name>
                                     <Name>DisplayName</Name>
                                 </ReferencedProperties>
                             </PropertySet>
                         <Members>
                     <MemberSet>
                 <Members>
             <Type>


     <ScriptMethod>: 해당 값이 스크립트의 출력인 메서드를 정의합니다.

         <ScriptMethod> 태그에는 새 메서드의 이름을 지정하는 <Name> 태그의 쌍과 메서드 결과를 
         반환하는 스크립트 블록을 묶는 <Script> 태그의 쌍이 있어야 합니다. 예를 들어 관리 
         개체(System.System.Management.ManagementObject)의 ConvertToDateTime 및 ConvertFromDateTime 
         메서드는 System.Management.ManagementDateTimeConverter 클래스의 ToDateTime 및 
         ToDmtfDateTime 정적 메서드를 사용하는 스크립트 메서드입니다. 

             <Type>
                 <Name>System.Management.ManagementObject</Name>
                 <Members>
                     <ScriptMethod>
                         <Name>ConvertToDateTime</Name>
                         <Script>
                             [System.Management.ManagementDateTimeConverter]::ToDateTime($args[0])
                         </Script>
                     </ScriptMethod>
                     <ScriptMethod>
                         <Name>ConvertFromDateTime</Name>
                         <Script>
                             [System.Management.ManagementDateTimeConverter]::ToDmtfDateTime($args[0])
                         </Script>
                     </ScriptMethod>
                 </Members>
             </Type>


      <ScriptProperty>: 해당 값이 스크립트의 출력인 속성을 정의합니다.

         <ScriptProperty> 태그에는 새 속성의 이름을 지정하는 <Name> 태그의 쌍과 속성 값을 
         반환하는 스크립트 블록을 묶는 <GetScriptBlock> 태그의 쌍이 있어야 합니다.
         예를 들어 파일(System.IO.FileInfo 개체)의 VersionInfo 속성은 
         System.Diagnostics.FileVersionInfo 개체에 대한 GetVersionInfo 정적 
         메서드의 FullName 속성을 사용하여 생성되는 스크립트 속성입니다.

             <Type>
                <Name>System.IO.FileInfo</Name>
                <Members>
                    <ScriptProperty>
                       <Name>VersionInfo</Name>
                       <GetScriptBlock>
                           [System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)
                       </GetScriptBlock>
                    </ScriptProperty>   
                </Members>
             </Type>


      자세한 내용은 MSDN(Microsoft Developer Network) 라이브러리
      (https://go.microsoft.com/fwlink/?LinkId=144538)에서 Windows PowerShell SDK(소프트웨어 
      개발 키트)를 참조하십시오.


  Update-TypeData
    
      Types.ps1xml 파일을 Windows PowerShell 콘솔에 로드하려면 Update-TypeData cmdlet을 사용합니다. 
      사용자 파일의 유형을 기본 제공 Types.ps1xml 파일의 유형보다 우선적으로 적용하려면 Update-TypeData의 
      PrependData 매개 변수를 사용합니다. Update-TypeData는 현재 콘솔에만 영향을 줍니다. 이후의 모든 
      콘솔을 변경하려면 콘솔을 내보내거나 Update-TypeData 명령을 사용자의 Windows PowerShell 프로필에 
      추가합니다.


  Types.ps1xml 파일 서명

      자체 Types.ps1xml 파일의 사용자를 보호하기 위해 디지털 서명을 사용하여 파일에 서명할 수 있습니다. 자세한 
      내용은 about_Signing을 참조하십시오.
    	

참고 항목
    about_Signing
    Copy-Item
    Get-Member
    Update-TypeData





목차