다음을 통해 공유


about_Types.ps1xml

간단한 설명

파일을 사용하여 Types.ps1xml PowerShell에서 사용되는 개체 형식을 확장하는 방법을 설명합니다.

자세한 설명

확장 형식 데이터는 PowerShell에서 개체 형식의 추가 속성 및 메서드("멤버")를 정의합니다. PowerShell 세션에 확장 형식 데이터를 추가하는 두 가지 기술이 있습니다.

  • Types.ps1xml file: 확장 형식 데이터를 정의하는 XML 파일입니다.
  • Update-TypeData: 파일을 다시 로드 Types.ps1xml 하고 현재 세션의 형식에 대한 확장 데이터를 정의하는 cmdlet입니다.

이 항목에서는 파일에 대해 설명합니다 Types.ps1xml . cmdlet을 Update-TypeData 사용하여 현재 세션에 동적 확장 형식 데이터를 추가하는 방법에 대한 자세한 내용은 Update-TypeData를 참조하세요.

확장 형식 데이터 정보

확장 형식 데이터는 PowerShell에서 개체 형식의 추가 속성 및 메서드("멤버")를 정의합니다. PowerShell에서 지원하는 모든 형식을 확장하고 개체 형식에 정의된 속성을 사용하는 것과 동일한 방식으로 추가된 속성과 메서드를 사용할 수 있습니다.

예를 들어 PowerShell은 cmdlet이 반환하는 개체와 같은 모든 System.DateTime 개체에 Get-Date DateTime 속성을 추가합니다.

(Get-Date).DateTime
Sunday, January 29, 2012 9:43:57 AM

PowerShell이 속성을 추가하고 PowerShell에서만 표시되므로 System.DateTime 구조에 대한 설명에서 DateTime 속성을 찾을 수 없습니다.

PowerShell은 내부적으로 확장 형식의 기본 집합을 정의합니다. 이 형식 정보는 시작할 때 모든 PowerShell 세션에 로드됩니다. DateTime 속성은 이 기본 집합의 일부입니다. PowerShell 6 이전에는 형식 정의가 PowerShell 설치 디렉터리($PSHOME)에 파일을 저장 Types.ps1xml 했습니다.

PowerShell에 확장 형식 데이터 추가

PowerShell 세션에는 확장 형식 데이터의 세 가지 원본이 있습니다.

  • 확장 형식 데이터는 PowerShell에 의해 정의되고 모든 PowerShell 세션에 자동으로 로드됩니다. PowerShell 6부터 이 정보는 PowerShell로 컴파일되며 더 이상 파일에 배송되지 Types.ps1xml 않습니다.

  • Types.ps1xml 모듈을 현재 세션으로 가져올 때 모듈을 내보내는 파일이 로드됩니다.

  • cmdlet을 사용하여 Update-TypeData 정의된 확장 형식 데이터는 현재 세션에만 추가됩니다. 파일에 저장되지 않습니다.

세션에서는 세 소스의 확장 형식 데이터가 동일한 방식으로 개체에 적용되며 지정된 형식의 모든 개체에서 사용할 수 있습니다.

TypeData cmdlet

다음 cmdlet은 PowerShell 3.0 이상의 Microsoft.PowerShell.Utility 모듈에 포함되어 있습니다.

  • Get-TypeData: 현재 세션에서 확장 형식 데이터를 가져옵니다.
  • Update-TypeData: 파일을 다시 로드합니다 Types.ps1xml . 현재 세션에 확장 형식 데이터를 추가합니다.
  • Remove-TypeData: 현재 세션에서 확장 형식 데이터를 제거합니다.

이러한 cmdlet에 대한 자세한 내용은 각 cmdlet에 대한 도움말 항목을 참조하세요.

기본 제공 Types.ps1xml 파일

디렉터리의 파일 $PSHOMETypes.ps1xml 모든 세션에 자동으로 추가됩니다.

Types.ps1xml PowerShell 설치 디렉터리($PSHOME)의 파일은 PowerShell에서 사용되는 개체에 속성과 메서드를 추가할 수 있는 XML 기반 텍스트 파일입니다. PowerShell에는 .NET 형식에 Types.ps1xml 여러 요소를 추가하는 기본 제공 파일이 있지만 추가 파일을 만들어 Types.ps1xml 형식을 추가로 확장할 수 있습니다.

예를 들어 기본적으로 배열 개체(System.Array)에는 배열의 개체 수를 나열하는 Length 속성이 있습니다. 그러나 Length라는 이름이 속성을 명확하게 설명하지 않으므로 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)
# ...

따라서 PowerShell에서 배열의 Count 속성 또는 Length 속성을 사용할 수 있습니다. 예시:

(1, 2, 3, 4).count
4
(1, 2, 3, 4).length
4

새 Types.ps1xml 파일 만들기

서식에 스크립트 블록이 포함될 수 있으므로 PowerShell과 함께 설치된 파일은 .ps1xml 변조를 방지하기 위해 디지털 서명됩니다. 따라서 .NET 형식에 속성 또는 메서드를 추가하려면 사용자 고유 Types.ps1xml 의 파일을 만든 다음 PowerShell 세션에 추가합니다.

새 파일을 만들려면 먼저 기존 Types.ps1xml 파일을 복사합니다. 새 파일에는 어떤 이름도 있을 수 있지만 파일 이름 확장명이 .ps1xml 있어야 합니다. PowerShell에 액세스할 수 있는 모든 디렉터리에 새 파일을 배치할 수 있지만 파일을 PowerShell 설치 디렉터리($PSHOME) 또는 설치 디렉터리의 하위 디렉터리에 배치하는 것이 유용합니다.

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

Types.ps1xml 및 추가 멤버

파일은 Types.ps1xml 영향을 받는 PowerShell 세션에서 지정된 .NET 형식의 개체 인스턴스에 속성과 메서드를 추가합니다. 그러나 개체의 한 인스턴스에만 속성 또는 메서드를 추가해야 하는 경우 cmdlet을 Add-Member 사용합니다.

자세한 내용은 추가 멤버를 참조 하세요.

예: FileInfo 개체에 Age 멤버 추가

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

Age 속성은 스크립트 블록을 사용하여 계산되므로 새 Age 속성의 모델로 사용할 태그를 찾 <ScriptProperty> 습니다.

다음 XML 코드를 파일에 $PSHOME\MyTypes.ps1xml저장합니다.

<?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\pwsh.exe | Select-Object Age
142

Types.ps1xml 파일의 XML

전체 스키마 정의는 GitHub의 PowerShell 소스 코드 리포지토리에 있는 Types.xsd 에서 찾을 수 있습니다.

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

파일에 멘션 각 .NET 형식은 태그로 <Type> 표시되어야 합니다.

형식 태그에는 다음 태그가 포함되어야 합니다.

<Name>: 영향을 받는 .NET 형식의 이름을 묶습니다.

<Members>: .NET 형식에 대해 정의된 새 속성 및 메서드에 대한 태그를 묶습니다.

다음 멤버 태그는 태그 내에 <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 클래스의 정적 메서드를 참조합니다.

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

예를 들어 ToString 메서드는 Microsoft.PowerShell.ToStringCodeMethods 코드 정의의 이름입니다.

  <Type>
    <Name>System.Xml.XmlNode</Name>
    <Members>
      <CodeMethod>
        <Name>ToString</Name>
        <CodeReference>
          <TypeName>Microsoft.PowerShell.ToStringCodeMethods</TypeName>
          <MethodName>XmlNode</MethodName>
        </CodeReference>
      </CodeMethod>
    </Members>
  </Type>

CodeProperty

.NET 클래스의 정적 메서드를 참조합니다.

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

예를 들어 개체의 System.IO.DirectoryInfo Mode 속성은 PowerShell FileSystem 공급자에 정의된 코드 속성입니다.

<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> 태그 내에 표시됩니다. 태그는 멤버 집합의 이름을 둘러싼 태그와 집합의 멤버(속성 및 메서드)를 둘러싸는 보조 <Members> 태그를 묶 <Name> 어야 합니다. 속성(예: 또는) 또는 메서드(예<Method>: <NoteProperty> 또는<ScriptProperty><ScriptMethod>)를 만드는 태그는 집합의 멤버일 수 있습니다.

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

  • DefaultDisplayProperty: 개체의 단일 속성입니다.

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

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

예를 들어 다음 XML은 cmdlet에서 반환되는 서비스(System.ServiceProcess.ServiceController 개체)의 기본 표시를 Get-Service 정의합니다. 상태, 이름 및 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>

PropertySet

인수를 사용하고 값을 반환하는 속성입니다.

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

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

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

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

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

예를 들어 다음 XML은 ReferencedProperties 3개가 있는 DefaultDisplayPropertySet이라는 PropertySet을 만듭니다.

<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> 메서드 결과를 반환하는 스크립트 블록을 묶는 태그가 있어야 합니다.

예를 들어 관리 개체(ConvertToDateTimeSystem.System.Management.ManagementObject)의 메서드 및 ConvertFromDateTime 메서드는 클래스의 정적 메서드 및 ToDmtfDateTime 정적 메서드를 System.Management.ManagementDateTimeConverter 사용하는 ToDateTime 스크립트 메서드입니다.

<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>

자세한 내용은 Windows PowerShell SDK(소프트웨어 개발 키트)를 참조하세요.

Update-TypeData

PowerShell 세션에 파일을 로드하려면 cmdlet을 Update-TypeData 실행합니다Types.ps1xml. 파일의 형식이 기본 제공 Types.ps1xml 파일의 형식보다 우선하도록 하려면 다음의 Update-TypeDataPrependData 매개 변수를 추가합니다. Update-TypeData 는 현재 세션에만 영향을 줍니다. 이후의 모든 세션을 변경하려면 세션을 내보내거나 PowerShell 프로필에 Update-TypeData 명령을 추가합니다.

속성에서 발생하거나 명령에 속성을 추가하는 경우 발생하는 예외는 Update-TypeData 오류를 StdErr보고하지 않습니다. 서식을 지정하고 출력하는 동안 많은 일반 형식에서 발생하는 예외를 표시하지 않습니다. .NET 속성을 가져오는 경우 다음 예제와 같이 메서드 구문을 대신 사용하여 예외 제거를 해결할 수 있습니다.

"hello".get_Length()

메서드 구문은 .NET 속성에서만 사용할 수 있습니다. cmdlet을 실행하여 추가된 속성은 Update-TypeData 메서드 구문을 사용할 수 없습니다.

Types.ps1xml 파일 서명

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

참고 항목