다음을 통해 공유


about_Format.ps1xml

간단한 설명

PowerShell의 파일은 Format.ps1xml PowerShell 콘솔에서 개체의 기본 표시를 정의합니다. 사용자 고유 Format.ps1xml 의 파일을 만들어 개체의 표시를 변경하거나 PowerShell에서 만든 새 개체 형식에 대한 기본 표시를 정의할 수 있습니다.

자세한 설명

PowerShell의 파일은 Format.ps1xml PowerShell에서 개체의 기본 표시를 정의합니다. 사용자 고유 Format.ps1xml 의 파일을 만들어 개체의 표시를 변경하거나 PowerShell에서 만든 새 개체 형식에 대한 기본 표시를 정의할 수 있습니다.

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

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

PowerShell에는 7개의 서식 파일이 포함되어 있습니다. 이러한 파일은 설치 디렉터리($PSHOME)에 있습니다. 각 파일은 Microsoft .NET Framework 개체 그룹의 표시를 정의합니다.

  1. Certificate.Format.ps1xml

    X.509 인증서 및 인증서 저장소와 같은 인증서 저장소의 개체입니다.

  2. DotNetTypes.Format.ps1xml

    CultureInfo, FileVersionInfo 및 EventLogEntry 개체와 같은 기타 .NET Framework 형식입니다.

  3. FileSystem.Format.ps1xml

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

  4. Help.Format.ps1xml

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

  5. PowerShellCore.Format.ps1xml

    PowerShell 코어 cmdlet에서 생성된 개체(예: Get-MemberGet-History.

  6. PowerShellTrace.Format.ps1xml

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

  7. Registry.Format.ps1xml

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

서식 파일은 각 개체의 네 가지 보기를 정의할 수 있습니다.

  • 테이블
  • List
  • 넓게
  • 사용자 지정

예를 들어 명령의 Get-ChildItem 출력이 명령에 Format-List 파이프되는 Format-List 경우 파일의 뷰 FileSystem.Format.ps1xml 를 사용하여 파일 및 폴더 개체를 목록으로 표시하는 방법을 결정합니다.

서식 파일에 둘 이상의 개체 보기가 포함된 경우 PowerShell은 개체가 찾은 첫 번째 뷰를 적용합니다.

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

새 Format.ps1xml 파일 만들기

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

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

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

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

예: 문화권 개체에 달력 데이터 추가

이 예제에서는 현재 PowerShell 세션의 cmdlet에 의해 생성된 문화권 개체 System.Globalization.CultureInfoGet-Culture 서식을 변경하는 방법을 보여줍니다. 예제의 명령은 문화권 개체의 기본 테이블 뷰 표시에 Calendar 속성을 추가합니다.

첫 번째 단계는 문화권 개체의 Format.ps1xml 현재 뷰가 포함된 파일을 찾는 것입니다. 다음 Select-String 명령은 파일을 찾습니다.

$Parms = @{
  Path = "$PSHOME\*Format.ps1xml"
  Pattern = "System.Globalization.CultureInfo"
}

Select-String @Parms
C:\Windows\System32\WindowsPowerShell\v1.0\DotNetTypes.format.ps1xml:113:
     <Name>System.Globalization.CultureInfo</Name>
C:\Windows\System32\WindowsPowerShell\v1.0\DotNetTypes.format.ps1xml:115:
<TypeName>System.Globalization.CultureInfo</TypeName>

이 명령은 정의가 파일에 있음을 표시합니다 DotNetTypes.Format.ps1xml .

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

Copy-Item $PSHome\DotNetTypes.format.ps1xml MyDotNetTypes.Format.ps1xml

MyDotNetTypes.Format.ps1xml Visual Studio Code와 같은 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>
    </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> <Configuration> 는 태그 및 <ViewDefinitions> 태그를 제외하고 파일의 나머지 부분을 삭제합니다. 디지털 서명이 있는 경우 사용자 지정 Format.ps1xml파일에서 삭제합니다.

이제 파일은 MyDotNetTypes.Format.ps1xml 다음 샘플과 같이 표시됩니다.

<?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자 값을 으로 <Width>지정합니다.

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

및 태그를 사용하여 테이블 행에 Calendar<TableColumnItem> <PropertyName 대한 새 열 항목을 추가합니다.

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

파일을 저장 후 닫습니다. 현재 PowerShell 세션에 새 서식 파일을 추가하는 데 사용합니다 Update-FormatData .

이 예제에서는 PrependPath 매개 변수를 사용하여 새 파일을 원래 파일보다 높은 우선 순위 순서로 배치합니다. 자세한 내용은 Update-FormatData를 참조하세요.

Update-FormatData -PrependPath $PSHOME\MyDotNetTypes.Format.ps1xml

변경 사항을 테스트하려면 Calendar 속성을 포함하는 출력을 입력 Get-Culture 하고 검토합니다.

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

Format.ps1xml 파일의 XML

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

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

  • <Name> 는 뷰의 이름을 식별합니다.
  • <ViewSelectedBy> 는 뷰가 적용되는 개체 형식 또는 형식을 지정합니다.
  • <GroupBy> 는 뷰의 항목을 그룹으로 결합하는 방법을 지정합니다.
  • <TableControl>, <ListControl><WideControl><CustomControl> 각 항목이 표시되는 방법을 지정하는 태그를 포함합니다.

ViewSelectedBy 태그

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

GroupBy 태그

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

TableControlTag

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

참고 항목

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

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

ListControl 태그

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

WideControl 태그

태그는 <WideControl> 일반적으로 태그를 <WideEntries> 포함합니다. 태그에는 <WideEntries> 하나 이상의 <WideEntry> 태그가 포함됩니다. 태그에는 <WideEntry> 하나의 <WideItem> 태그가 포함됩니다.

태그는 <WideItem> 태그 또는 태그를 <PropertyName> <ScriptBlock> 포함해야 합니다. 태그는 <PropertyName> 뷰의 지정된 위치에 표시할 속성을 지정합니다. 태그는 <ScriptBlock> 뷰의 지정된 위치에 평가 및 표시할 스크립트를 지정합니다.

태그에는 <WideItem> 속성을 표시하는 방법을 지정하는 태그가 포함될 <FormatString> 수 있습니다.

CustomControl 태그

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

Types.ps1xml의 기본 표시

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

  • <DefaultDisplayProperty>
  • <DefaultDisplayPropertySet>
  • <DefaultKeyPropertySet>

자세한 내용은 about_Types.ps1xml을 참조하세요.

Format.ps1xml 파일 사용 추적

파일 로드 또는 애플리케이션에서 오류를 검색하려면 Name 매개 변수 값 Format.ps1xml 으로 다음 형식 구성 요소와 함께 cmdlet을 사용합니다Trace-Command.

  • FormatFileLoading
  • FormatViewBinding

자세한 내용은 Trace-CommandGet-TraceSource를 참조하세요.

Format.ps1xml 파일 서명

파일 사용자를 보호하려면 디지털 서명을 사용하여 파일에 서명합니다 Format.ps1xml . 자세한 내용은 about_Signing 참조하세요.

Format-Table 사용자 지정 보기에 대한 샘플 XML

다음 샘플에서는 에서 만든 System.IO.DirectoryInfoSystem.IO.FileInfo 개체에 대한 사용자 지정 보기를 만듭니다Format-Table.Get-ChildItem 사용자 지정 뷰의 이름은 mygciview이며 CreationTime 열을 테이블에 추가합니다.

사용자 지정 보기는 PowerShell 5.1에 저장된 편집된 버전의 FileSystem.Format.ps1xml 파일에서 $PSHOME 만들어집니다.

사용자 지정 .ps1xml 파일을 저장한 후 PowerShell 세션에 보기를 포함하는 데 사용합니다 Update-FormatData . 이 예제에서는 사용자 지정 뷰가 테이블 형식을 사용해야 합니다. 그렇지 않으면 Format-Table 실패합니다.

View 매개 변수와 함께 사용자 Format-Table 지정 뷰의 이름을 지정하고 테이블의 출력에 서식을 지정합니다. 명령이 실행되는 방법에 대한 예제는 Format-Table을 참조 하세요.

$Parms = @{
  Path = "$PSHOME\*Format.ps1xml"
  Pattern = "System.IO.DirectoryInfo"
}
Select-String @Parms
Copy-Item $PSHome\FileSystem.format.ps1xml .\MyFileSystem.Format.ps1xml
Update-FormatData -PrependPath $PSHOME\Format\MyFileSystem.Format.ps1xml

참고 항목

XML 샘플을 줄 너비 제한 내에 맞추려면 일부 들여쓰기를 압축하고 코드 내에서 줄 바꿈을 사용해야 했습니다.

<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
    <SelectionSets>
        <SelectionSet>
            <Name>FileSystemTypes</Name>
            <Types>
                <TypeName>System.IO.DirectoryInfo</TypeName>
                <TypeName>System.IO.FileInfo</TypeName>
            </Types>
        </SelectionSet>
    </SelectionSets>
<Controls>
<Control>
<Name>FileSystemTypes-GroupingFormat</Name>
<CustomControl>
 <CustomEntries>
  <CustomEntry>
    <CustomItem>
    <Frame>
    <LeftIndent>4</LeftIndent>
    <CustomItem>
    <Text AssemblyName="System.Management.Automation"
    BaseName="FileSystemProviderStrings"
    ResourceId="DirectoryDisplayGrouping"/>
    <ExpressionBinding>
     <ScriptBlock>
      $_.PSParentPath.Replace("Microsoft.PowerShell.Core\FileSystem::", "")
     </ScriptBlock>
    </ExpressionBinding>
    <NewLine/>
    </CustomItem>
    </Frame>
    </CustomItem>
    </CustomEntry>
 </CustomEntries>
</CustomControl>
</Control>
</Controls>
<ViewDefinitions>
    <View>
    <Name>mygciview</Name>
    <ViewSelectedBy>
        <SelectionSetName>FileSystemTypes</SelectionSetName>
    </ViewSelectedBy>
    <GroupBy>
      <PropertyName>PSParentPath</PropertyName>
      <CustomControlName>FileSystemTypes-GroupingFormat</CustomControlName>
    </GroupBy>
        <TableControl>
            <TableHeaders>
                <TableColumnHeader>
                    <Label>Mode</Label>
                    <Width>7</Width>
                    <Alignment>left</Alignment>
                </TableColumnHeader>
                <TableColumnHeader>
                    <Label>LastWriteTime</Label>
                    <Width>25</Width>
                    <Alignment>right</Alignment>
                </TableColumnHeader>
                <TableColumnHeader>
                    <Label>CreationTime</Label>
                    <Width>25</Width>
                    <Alignment>right</Alignment>
                </TableColumnHeader>
                <TableColumnHeader>
                    <Label>Length</Label>
                    <Width>14</Width>
                    <Alignment>right</Alignment>
                </TableColumnHeader>
                <TableColumnHeader/>
            </TableHeaders>
            <TableRowEntries>
                <TableRowEntry>
                    <Wrap/>
                    <TableColumnItems>
                        <TableColumnItem>
                            <PropertyName>Mode</PropertyName>
                        </TableColumnItem>
                        <TableColumnItem>
                            <ScriptBlock>
                                [String]::Format("{0,10}  {1,8}",
                                    $_.LastWriteTime.ToString("d"),
                                    $_.LastWriteTime.ToString("t"))
                            </ScriptBlock>
                        </TableColumnItem>
                        <TableColumnItem>
                            <ScriptBlock>
                                [String]::Format("{0,10}  {1,8}",
                                    $_.CreationTime.ToString("d"),
                                    $_.LastWriteTime.ToString("t"))
                            </ScriptBlock>
                        </TableColumnItem>
                        <TableColumnItem>
                        <PropertyName>Length</PropertyName>
                        </TableColumnItem>
                        <TableColumnItem>
                            <PropertyName>Name</PropertyName>
                        </TableColumnItem>
                    </TableColumnItems>
                </TableRowEntry>
            </TableRowEntries>
        </TableControl>
    </View>
  </ViewDefinitions>
</Configuration>

참고 항목