about_Format.ps1xml

업데이트 날짜: 2012년 8월

적용 대상: Windows PowerShell 2.0, Windows PowerShell 3.0

항목

about_Format.ps1xml

간단한 설명

Windows PowerShell®의 Format.ps1xml 파일은 Windows PowerShell 콘솔에서 개체의 기본 표시를 정의합니다. 직접 Format.ps1xml 파일을 만들어 개체의 표시를 변경하거나 Windows PowerShell에서 만든 새 개체 형식의 기본 표시를 정의할 수 있습니다.

자세한 설명

Windows PowerShell의 Format.ps1xml 파일은 Windows PowerShell에서 개체의 기본 표시를 정의합니다. 직접 Format.ps1xml 파일을 만들어 개체의 표시를 변경하거나 Windows PowerShell에서 만든 새 개체 형식의 기본 표시를 정의할 수 있습니다.

Windows PowerShell은 개체를 표시할 때 구조화된 형식 지정 파일의 데이터를 사용하여 개체의 기본 표시를 결정합니다. 형식 지정 파일의 데이터는 개체가 테이블로 렌더링되는지 아니면 목록으로 렌더링되는지와 기본적으로 표시되는 속성을 결정합니다.

형식 지정은 표시에만 영향을 주고 파이프라인을 따라 전달되는 개체 속성 또는 개체 속성이 전달되는 방식에는 영향을 주지 않습니다. Format.ps1xml 파일은 해시 테이블의 출력 형식을 사용자 지정하는 데 사용할 수 없습니다.

Windows PowerShell에는 형식 지정 파일이 7개 있습니다. 이러한 파일은 설치 디렉터리($pshome)에 있습니다. 각 파일은 Microsoft .NET Framework 개체의 그룹 표시를 정의합니다.

Certificate.Format.ps1xml

인증서 저장소의 개체(예: X.509 인증서 및 인증서 저장소)입니다.

DotNetTypes.Format.ps1xml

기타 .NET Framework 형식(예: CultureInfo, FileVersionInfo 및 EventLogEntry 개체)입니다.

FileSystem.Format.ps1xml

파일 및 디렉터리와 같은 파일 시스템 개체입니다.

Help.Format.ps1xml

자세히 보기와 전체 보기, 매개 변수 및 예제와 같은 도움말 보기입니다.

PowerShellCore.format.ps1xml

Windows PowerShell 핵심 cmdlet에서 생성한 개체(예: Get-Member 및 Get-History)입니다.

PowerShellTrace.format.ps1xml

Trace-Command cmdlet에서 생성한 개체와 같은 추적 개체입니다.

Registry.format.ps1xml

키 및 항목과 같은 레지스트리 개체입니다.

형식 지정 파일은 각 개체의 네 가지 보기, 즉 테이블, 목록, 와이드 및 사용자 지정 보기를 정의할 수 있습니다. 예를 들어 Get-ChildItem 명령의 출력이 Format-List 명령에 파이프되면 Format-List는 FileSystem.format.ps1xml 파일의 보기를 사용하여 파일과 폴더 개체를 목록으로 표시하는 방법을 결정합니다.

형식 지정 파일에 둘 이상의 개체 보기가 포함되어 있는 경우 Windows PowerShell은 검색되는 첫 번째 보기를 적용합니다.

Format.ps1xml 파일에서 보기는 보기 이름, 보기를 적용할 수 있는 개체의 형식, 열 머리글, 보기의 본문에 표시되는 속성 등을 설명하는 XML 태그 집합으로 정의됩니다. Format.ps1xml 파일의 형식은 데이터가 사용자에게 표시되기 바로 전에 적용됩니다.

새로운 Format.ps1xml 파일 만들기

형식 지정에 스크립트 블록이 포함될 수 있으므로 Windows PowerShell과 함께 설치된 .ps1xml 파일은 변조를 방지하도록 디지털 서명되어 있습니다. 따라서 기존 개체 보기의 표시 형식을 변경하거나 새 개체에 대한 보기를 추가하려면 고유한 Format.ps1xml 파일을 만든 다음 Windows PowerShell 세션에 추가합니다.

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

현재 보기의 형식을 변경하려면 형식 지정 파일에서 보기를 찾은 다음 태그를 사용하여 보기를 변경합니다. 새 개체 형식에 대한 보기를 만들려면 새 보기를 만들거나 기존 보기를 모델로 사용합니다. 태그는 이 항목의 다음 섹션에서 설명합니다. 그런 다음 파일을 검토하는 모든 사람이 변경 내용을 명확하게 구분할 수 있도록 파일에서 다른 보기를 모두 삭제할 수 있습니다.

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

예: Culture 개체에 일정 데이터 추가

이 예제에서는 Get-Culture cmdlet에서 생성한 culture 개체의 형식(System.Globalization.CultureInfo)을 변경하는 방법을 보여 줍니다. 이 예제의 명령은 calendar 속성을 culture 개체의 기본 테이블 보기 표시에 추가합니다.

첫 번째 단계에서는 culture 개체의 현재 보기가 포함된 Format.ps1xml 파일을 찾습니다. 다음 Select-String 명령은 파일을 찾습니다.

  select-string -path $pshome\*format.ps1xml `
              -pattern System.Globalization.CultureInfo

이 명령은 정의가 DotNetTypes.Format.ps1xml 파일에 있음을 나타냅니다.

다음 명령은 파일 내용을 새 파일 MyDotNetTypes.Format.ps1xml에 복사합니다.

  copy-item DotNetTypes.Format.ps1xml MyDotNetTypes.Format.ps1xml

그런 다음 MyDotNetTypes.Format.ps1xml 파일을 메모장과 같은 텍스트 편집기나 XML에서 엽니다. System.Globalization.CultureInfo 개체 섹션을 찾습니다. 다음 XML은 CultureInfo 개체의 보기를 정의합니다. 이 개체에는 TableControl 보기만 있습니다.

      <View>
          <Name>System.Globalization.CultureInfo</Name>
          <ViewSelectedBy>
             <TypeName>Deserialized.System.Globalization.CultureInfo</TypeName>
             <TypeName>System.Globalization.CultureInfo</TypeName>
          </ViewSelectedBy>

          <TableControl>
              <TableHeaders>
                  <TableColumnHeader>
                      <Width>16</Width>
                  </TableColumnHeader>
                  <TableColumnHeader>
                      <Width>16</Width>
                  </TableColumnHeader>
                  <TableColumnHeader/>
              </TableHeaders>
              <TableRowEntries>
                  <TableRowEntry>
                      <TableColumnItems>
                          <TableColumnItem>
                              <PropertyName>LCID</PropertyName>
                          </TableColumnItem>
                          <TableColumnItem>
                              <PropertyName>Name</PropertyName>
                          </TableColumnItem>
                          <TableColumnItem>
                              <PropertyName>DisplayName</PropertyName>
                          </TableColumnItem>
                      </TableColumnItems>
                  </TableRowEntry>
               </TableRowEntries>
          </TableControl>
      </View>

파일에서 여는 <?XML>, <Configuration> 및 <ViewDefinitions> 태그와 닫는 <ViewDefintions> 및 <Configuration> 태그를 제외한 나머지를 삭제합니다. 파일을 변경할 때마다 디지털 서명도 삭제해야 합니다.

      <?xml version="1.0" encoding="utf-8" ?>
      <Configuration>
          <ViewDefinitions>
              <View>
                  <Name>System.Globalization.CultureInfo</Name>
                  <ViewSelectedBy>
                      <TypeName>Deserialized.System.Globalization.CultureInfo</TypeName>
                      <TypeName>System.Globalization.CultureInfo</TypeName>
                  </ViewSelectedBy>

                  <TableControl>
                      <TableHeaders>
                          <TableColumnHeader>
                              <Width>16</Width>
                          </TableColumnHeader>
                          <TableColumnHeader>
                              <Width>16</Width>
                          </TableColumnHeader>
                          <TableColumnHeader/>
                      </TableHeaders>
                      <TableRowEntries>
                          <TableRowEntry>
                              <TableColumnItems>
                                  <TableColumnItem>
                                      <PropertyName>LCID</PropertyName>
                                  </TableColumnItem>
                                  <TableColumnItem>
                                      <PropertyName>Name</PropertyName>
                                  </TableColumnItem>
                                  <TableColumnItem>
                                      <PropertyName>DisplayName</PropertyName>
                                  </TableColumnItem>
                              </TableColumnItems>
                          </TableRowEntry>
                       </TableRowEntries>
                  </TableControl>
              </View>
          </ViewDefinitions>
      </Configuration>

그런 다음 새로운 <TableColumnHeader> 태그 집합을 추가하여 Calendar 속성에 대한 새 열을 만듭니다. Calendar 속성 값이 길 수 있으므로 다음과 같이 45자의 값이 사용됩니다.

                <TableControl>
                    <TableHeaders>
                        <TableColumnHeader>
                            <Width>16</Width>
                        </TableColumnHeader>
                        <TableColumnHeader>
                            <Width>16</Width>
                        </TableColumnHeader>
                 
                        <TableColumnHeader>
                            <Width>45</Width>
                        </TableColumnHeader>

                        <TableColumnHeader/>
                    </TableHeaders>

이제 다음과 같이 테이블 행에 새 열 항목을 추가합니다.

                <TableRowEntries>
                    <TableRowEntry>
                        <TableColumnItems>
                            <TableColumnItem>
                                <PropertyName>LCID</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <PropertyName>Name</PropertyName>
                            </TableColumnItem>

                            <TableColumnItem>
                                <PropertyName>Calendar</PropertyName>
                            </TableColumnItem>

                            <TableColumnItem>
                                <PropertyName>DisplayName</PropertyName>
                            </TableColumnItem>
                        </TableColumnItems>
                    </TableRowEntry>
                 </TableRowEntries>

파일을 저장하고 닫은 후에 다음 명령과 같은 Update-FormatData 명령을 사용하여 새 서식 파일을 현재 세션에 추가합니다. 이 명령은 PrependData 매개 변수를 사용하여 원래 파일보다 우선 순위가 높은 순위에 새 파일을 배치합니다. Update-FormatData에 대한 자세한 내용을 보려면 "get-help update-formatdata"를 입력하세요.

  update-formatdata -prependpath $pshome\MyDotNetTypes.format.ps1xml

변경 내용을 테스트하려면 "get-culture"를 입력한 다음 Calendar 속성이 포함된 출력을 검토합니다.

      C:\PS> get-culture

      LCID Name  Calendar                               DisplayName
      ---- ----  --------                               -----------
      1033 en-US System.Globalization.GregorianCalendar English (United States)

Format.ps1xml 파일의 XML

각 Format.ps1xml 파일의 ViewDefinitions 섹션에는 각 보기를 정의하는 <View> 태그가 있습니다. 일반적인 <View> 태그에는 다음과 같은 태그가 포함됩니다.

<이름>

<Name> 태그는 보기의 이름을 식별합니다.

<ViewSelectedBy>

<ViewSelectedBy> 태그는 보기가 적용되는 개체 형식을 지정합니다.

<GroupBy>

<GroupBy> 태그는 보기의 항목을 그룹으로 결합하는 방법을 지정합니다.

<TableControl>

<ListControl>

<WideControl>

<CustomControl>

이러한 태그에는 각 항목을 표시하는 방법을 지정하는 태그(<DefaultDisplayProperty>)가 포함됩니다.

<ViewSelectedBy> 태그에는 보기가 적용되는 각 개체 형식에 대한 <TypeName> 태그가 포함될 수 있습니다. 또는 <SelectionSet> 태그를 사용하여 다른 곳에 정의한 선택 집합을 참조하는 <SelectionSetName> 태그가 포함될 수 있습니다.

<GroupBy> 태그에는 항목을 그룹화하는 기준 개체 속성을 지정하는 <PropertyName> 태그가 포함됩니다. 또한 각 그룹의 레이블로 사용할 문자열을 지정하는 <Label> 태그 또는 <Control> 태그를 사용하여 다른 곳에 정의한 사용자 지정 컨트롤을 참조하는 <CustomControlName> 태그가 포함됩니다. <Control> 태그에는 <Name> 태그 및 <CustomControl> 태그가 포함됩니다.

일반적으로 <TableControl> 태그에는 테이블의 머리글과 행에 대한 형식을 정의하는 <TableHeaders> 및 <TableRowEntries> 태그가 포함됩니다. <TableHeaders> 태그에는 일반적으로 <Label>, <Width> 및 <Alignment> 태그를 포함하는 <TableColumnHeader> 태그가 포함됩니다. <TableRowEntries> 태그에는 테이블의 각 행에 대한 <TableRowEntry> 태그가 포함됩니다. <TableRowEntry> 태그에는 행의 각 열에 대한 <TableColumnItem> 태그가 포함된 <TableColumnItems> 태그가 포함됩니다. 일반적으로 <TableColumnItem> 태그에는 정의된 위치에 표시할 개체 속성을 식별하는 <PropertyName> 태그나 위치에 표시할 결과를 계산하는 스크립트 코드를 포함하는 <ScriptBlock> 태그가 포함됩니다.

참고: 스크립트 블록은 계산 결과가 유용할 수 있는 다른 위치에도 사용될 수 있습니다.

<TableColumnItem> 태그에는 속성이나 계산 결과가 표시되는 방법을 지정하는 <FormatString> 태그가 포함될 수도 있습니다.

<ListControl> 태그에는 일반적으로 <ListEntries> 태그가 포함됩니다. <ListEntries> 태그에는 <ListItems> 태그가 포함됩니다. <ListItems> 태그에는 <PropertyName> 태그를 포함하는 <ListItem> 태그가 포함됩니다. <PropertyName> 태그는 목록에 지정된 위치에 표시할 개체 속성을 지정합니다. 선택 집합을 사용하여 보기 선택을 정의한 경우 <ListControl> 태그에는 하나 이상의 <TypeName> 태그가 포함된 <EntrySelectedBy> 태그가 포함될 수도 있습니다. 이러한 <TypeName> 태그는 <ListControl> 태그를 표시할 개체 형식을 지정합니다.

<WideControl> 태그에는 일반적으로 <WideEntries> 태그가 포함됩니다. <WideEntries> 태그에는 하나 이상의 <WideEntry> 태그가 포함됩니다. <WideEntry> 태그에는 일반적으로 보기의 지정된 위치에 표시할 속성을 지정하는 <PropertyName> 태그가 포함됩니다. <PropertyName> 태그에는 속성이 표시되는 방법을 지정하는 <FormatString> 태그가 포함될 수 있습니다.

<CustomControl> 태그에서는 스크립트 블록을 사용하여 형식을 정의할 수 있습니다. 일반적으로 <CustomControl> 태그에는 여러 개의 <CustomEntry> 태그가 포함된 <CustomEntries> 태그가 포함됩니다. 각 <CustomEntry> 태그에는 <Text>, <Indentation>, <ExpressionBinding> 및 <NewLine> 태그를 포함하여 보기의 지정된 위치에 대한 내용과 형식을 지정하는 다양한 태그가 포함될 수 있는 <CustomItem> 태그가 포함됩니다.

Update-FormatData

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

Types.ps1xml의 기본 표시

일부 기본 개체 형식의 기본 표시는 $pshome 디렉터리의 Types.ps1xml 파일에 정의되어 있습니다. 이 노드에는 PsStandardMembers라는 이름이 지정되고 하위 노드는 다음 태그 중 하나를 사용합니다.

<DefaultDisplayProperty>

<DefaultDisplayPropertySet>

<DefaultKeyPropertySet>

자세한 내용을 보려면 다음 명령을 입력하세요.

  get-help about_types.ps1xml

Format.ps1xml 파일 사용 추적

Format.ps1xml 파일의 로드 또는 적용 시 오류를 감지하려면 다음과 같은 형식 구성 요소와 함께 Trace-Command cmdlet을 Name 매개 변수의 값으로 사용합니다.

  FormatFileLoading
          UpdateFormatData
          FormatViewBinding

자세한 내용을 보려면 다음 명령을 입력하세요.

          get-help trace-command
          get-help get-tracesource     

Format.ps1xml 파일에 서명

Format.ps1xml 파일의 사용자를 보호하려면 디지털 서명을 사용하여 파일에 서명합니다. 자세한 내용을 보려면 다음을 입력합니다.

          get-help about_signing

참고 항목

Update-FormatData

Trace-Command

Get-TraceSource