customFormats.ps1xml

<?xml version="1.0" encoding="utf-8" ?>
<!-- *******************************************************************
These sample files contain formatting information used by the Windows
PowerShell engine. Do not edit or change the contents of this file
directly. Please see the Windows PowerShell documentation or type
Get-Help Update-FormatData for more information.

Copyright (c) Microsoft Corporation. All rights reserved.
 
THIS SAMPLE CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
OF ANY KIND,WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
PURPOSE. IF THIS CODE AND INFORMATION IS MODIFIED, THE ENTIRE RISK OF USE
OR RESULTS IN CONNECTION WITH THE USE OF THIS CODE AND INFORMATION
REMAINS WITH THE USER.
******************************************************************** -->
<Configuration>
    <SelectionSets>
        <SelectionSet>
            <Name>FileSystemTypes</Name>
            <Types>
                <TypeName>System.IO.DirectoryInfo</TypeName>
                <TypeName>System.IO.FileInfo</TypeName>
            </Types>
        </SelectionSet>
    </SelectionSets>

    <!-- ################ GLOBAL CONTROL DEFINITIONS ################ -->
    <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>
    
    <!-- ################ VIEW DEFINITIONS ################ -->

    <ViewDefinitions>
       <View>
            <Name>children</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>Length</Label>
                        <Width>14</Width>
                        <Alignment>right</Alignment>
                    </TableColumnHeader>
                    <TableColumnHeader>
                      <Label>Name</Label>
                    </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>
                               <PropertyName>Length</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <ScriptBlock>
                                    if (($host.UI.SupportsVirtualTerminal) -and (Test-Path variable:psFileColors) -and (Test-Path function:write-rgb)) {
                                        
                                        $file = $_
                                        $escape = [char]27 + '['
                                        $resetAttributes = "$($escape)0m"
                                        
                                        switch -regex ([System.IO.Path]::GetExtension($file.Name).Trim('.')) {
                                            # Applications
                                            '^(exe)$' {
                                                $r = $psFileColors.Applications.Red
                                                $g = $psFileColors.Applications.Green
                                                $b = $psFileColors.Applications.Blue

                                                $outputString = "$($escape)38;2;$($r);$($g);$($b)m$($file.Name)$($resetAttributes)"
                                            }
                                            # Scripts
                                            '^(ps1|cmd|bat|sh|py|rb|js|pl)$' {
                                                $r = $psFileColors.Scripts.Red
                                                $g = $psFileColors.Scripts.Green
                                                $b = $psFileColors.Scripts.Blue

                                                $outputString = "$($escape)38;2;$($r);$($g);$($b)m$($file.Name)$($resetAttributes)"
                                            }
                                            # Modules and Assemblies
                                            '^(psm1|dll)$' {
                                                $r = $psFileColors.Modules.Red
                                                $g = $psFileColors.Modules.Green
                                                $b = $psFileColors.Modules.Blue

                                                $outputString = "$($escape)38;2;$($r);$($g);$($b)m$($file.Name)$($resetAttributes)"
                                            }
                                            # Data Files
                                            '^(csv|xml|ps1xml|clixml|psd1|json)$' {
                                                $r = $psFileColors.DataFiles.Red
                                                $g = $psFileColors.DataFiles.Green
                                                $b = $psFileColors.DataFiles.Blue

                                                $outputString = "$($escape)38;2;$($r);$($g);$($b)m$($file.Name)$($resetAttributes)"
                                            }
                                            # Text Files
                                            '^(txt|me|md)$' {
                                                $r = $psFileColors.TextFiles.Red
                                                $g = $psFileColors.TextFiles.Green
                                                $b = $psFileColors.TextFiles.Blue

                                                $outputString = "$($escape)38;2;$($r);$($g);$($b)m$($file.Name)$($resetAttributes)"
                                            }
                                            # Config Files
                                            '^(conf|config|reg|ini)$' {
                                                $r = $psFileColors.ConfigFiles.Red
                                                $g = $psFileColors.ConfigFiles.Green
                                                $b = $psFileColors.ConfigFiles.Blue

                                                $outputString = "$($escape)38;2;$($r);$($g);$($b)m$($file.Name)$($resetAttributes)"
                                            }
                                            # Documents
                                            '^(docx?|xlsx?|pdf|html?|chm)$' {
                                                $r = $psFileColors.Documents.Red
                                                $g = $psFileColors.Documents.Green
                                                $b = $psFileColors.Documents.Blue

                                                $outputString = "$($escape)38;2;$($r);$($g);$($b)m$($file.Name)$($resetAttributes)"
                                            }
                                            # Log Files
                                            '^(log)$' {
                                                $r = $psFileColors.LogFiles.Red
                                                $g = $psFileColors.LogFiles.Green
                                                $b = $psFileColors.LogFiles.Blue

                                                $outputString = "$($escape)38;2;$($r);$($g);$($b)m$($file.Name)$($resetAttributes)"
                                            }
                                            # Dump Files
                                            '^(dmp)$' {
                                                $r = $psFileColors.DumpFiles.Red
                                                $g = $psFileColors.DumpFiles.Green
                                                $b = $psFileColors.DumpFiles.Blue

                                                $outputString = "$($escape)38;2;$($r);$($g);$($b)m$($file.Name)$($resetAttributes)"
                                            }
                                            # Compressed Files
                                            '^(zip|7z|rar|tar)$' {
                                                $r = $psFileColors.CompressedFiles.Red
                                                $g = $psFileColors.CompressedFiles.Green
                                                $b = $psFileColors.CompressedFiles.Blue

                                                $outputString = "$($escape)38;2;$($r);$($g);$($b)m$($file.Name)$($resetAttributes)"
                                            }
                                            DEFAULT {$outputString = $file.Name}
                                        }

                                        if ($file.PSIsContainer) {
                                            $r = $psFileColors.Directories.Red
                                            $g = $psFileColors.Directories.Green
                                            $b = $psFileColors.Directories.Blue

                                            $outputString = "$($escape)38;2;$($r);$($g);$($b)m$($file.Name)$($resetAttributes)"
                                        }
                                        
                                        if ([bool]($file.Attributes -band [System.IO.FileAttributes]::Hidden)) {
                                            $r = $psFileColors.Hidden.Red
                                            $g = $psFileColors.Hidden.Green
                                            $b = $psFileColors.Hidden.Blue

                                            $outputString = "$($escape)38;2;$($r);$($g);$($b)m$($file.Name)$($resetAttributes)"
                                        }

                                        if ([bool]($file.Attributes -band [System.IO.FileAttributes]::ReparsePoint)) {
                                            $r = $psFileColors.ReparsePoints.Red
                                            $g = $psFileColors.ReparsePoints.Green
                                            $b = $psFileColors.ReparsePoints.Blue

                                            $reparsePointTarget = [System.Win32]::GetSymbolicLinkTarget($file.FullName)
                                            
                                            if ($reparsePointTarget) {
                                                $outputString += ' > '
                                                $outputString += "$($escape)38;2;$($r);$($g);$($b)m$($reparsePointTarget)$($resetAttributes)"
                                            }
                                        }

                                        #return
                                        return $outputString
                                    }
                                    $_.Name
                                </ScriptBlock>
                            </TableColumnItem>
                        </TableColumnItems>
                    </TableRowEntry>
                </TableRowEntries>
            </TableControl>
        </View>
        <View>
            <Name>children</Name>
            <ViewSelectedBy>
                <SelectionSetName>FileSystemTypes</SelectionSetName>
            </ViewSelectedBy>
            <GroupBy>
                <PropertyName>PSParentPath</PropertyName>
                <CustomControlName>FileSystemTypes-GroupingFormat</CustomControlName>
            </GroupBy>
            <ListControl>
                <ListEntries>
                    <ListEntry>
                        <EntrySelectedBy>
                            <TypeName>System.IO.FileInfo</TypeName>
                        </EntrySelectedBy>
                        <ListItems>
                            <ListItem>
                                <PropertyName>Name</PropertyName>
                            </ListItem>
                            <ListItem>
                                <PropertyName>Length</PropertyName>
                            </ListItem>
                           <ListItem>
                                <PropertyName>CreationTime</PropertyName>
                            </ListItem>
                            <ListItem>
                                <PropertyName>LastWriteTime</PropertyName>
                            </ListItem>
                            <ListItem>
                                <PropertyName>LastAccessTime</PropertyName>
                            </ListItem>
                            <ListItem>
                                <PropertyName>Mode</PropertyName>
                            </ListItem>
                            <ListItem>
                                <PropertyName>LinkType</PropertyName>
                            </ListItem>
                            <ListItem>
                                <PropertyName>Target</PropertyName>
                            </ListItem>
                            <ListItem>
                                <PropertyName>VersionInfo</PropertyName>
                            </ListItem>
                        </ListItems>
                    </ListEntry>
                    <ListEntry>
                        <ListItems>
                            <ListItem>
                                <PropertyName>Name</PropertyName>
                            </ListItem>
                            <ListItem>
                                <PropertyName>CreationTime</PropertyName>
                            </ListItem>
                            <ListItem>
                                <PropertyName>LastWriteTime</PropertyName>
                            </ListItem>
                            <ListItem>
                                <PropertyName>LastAccessTime</PropertyName>
                            </ListItem>
                          <ListItem>
                            <PropertyName>Mode</PropertyName>
                          </ListItem>
                          <ListItem>
                            <PropertyName>LinkType</PropertyName>
                          </ListItem>
                          <ListItem>
                            <PropertyName>Target</PropertyName>
                          </ListItem>
                        </ListItems>
                    </ListEntry>
                </ListEntries>
            </ListControl>
        </View>
        <View>
            <Name>children</Name>
            <ViewSelectedBy>
                <SelectionSetName>FileSystemTypes</SelectionSetName>
            </ViewSelectedBy>
            <GroupBy>
                <PropertyName>PSParentPath</PropertyName>
                <CustomControlName>FileSystemTypes-GroupingFormat</CustomControlName>
            </GroupBy>
            <WideControl>
                <WideEntries>
                    <WideEntry>
                        <WideItem>
                            <PropertyName>Name</PropertyName>
                        </WideItem>
                    </WideEntry>
                    <WideEntry>
                        <EntrySelectedBy>
                            <TypeName>System.IO.DirectoryInfo</TypeName>
                        </EntrySelectedBy>
                        <WideItem>
                            <PropertyName>Name</PropertyName>
                            <FormatString>[{0}]</FormatString>
                        </WideItem>
                    </WideEntry>
                </WideEntries>
            </WideControl>
        </View>
        <View>
            <Name>FileSecurityTable</Name>
            <ViewSelectedBy>
                <TypeName>System.Security.AccessControl.FileSystemSecurity</TypeName>
            </ViewSelectedBy>
            <GroupBy>
                <PropertyName>PSParentPath</PropertyName>
                <CustomControlName>FileSystemTypes-GroupingFormat</CustomControlName>
            </GroupBy>
            <TableControl>
                <TableHeaders>
                   <TableColumnHeader>
                      <Label>Path</Label>
                   </TableColumnHeader>
                   <TableColumnHeader />
                   <TableColumnHeader>
                      <Label>Access</Label>
                   </TableColumnHeader>
                </TableHeaders>
                <TableRowEntries>
                    <TableRowEntry>
                        <TableColumnItems>
                            <TableColumnItem>
                                <ScriptBlock>
                                    split-path $_.Path -leaf
                                </ScriptBlock>
                            </TableColumnItem>
                            <TableColumnItem>
                               <PropertyName>Owner</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <ScriptBlock>
                                    $_.AccessToString
                                </ScriptBlock>
                            </TableColumnItem>
                        </TableColumnItems>
                    </TableRowEntry>
                </TableRowEntries>
            </TableControl>
        </View>
       <View>
            <Name>FileSystemStream</Name>
            <ViewSelectedBy>
                <TypeName>Microsoft.PowerShell.Commands.AlternateStreamData</TypeName>
            </ViewSelectedBy>
            <GroupBy>
                <PropertyName>Filename</PropertyName>
            </GroupBy>
            <TableControl>
                <TableHeaders>
                   <TableColumnHeader>
                      <Width>20</Width>
                      <Alignment>left</Alignment>
                   </TableColumnHeader>
                    <TableColumnHeader>
                        <Width>10</Width>
                        <Alignment>right</Alignment>
                    </TableColumnHeader>
                </TableHeaders>
                <TableRowEntries>
                    <TableRowEntry>
                        <TableColumnItems>
                            <TableColumnItem>
                                <PropertyName>Stream</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <PropertyName>Length</PropertyName>
                            </TableColumnItem>
                        </TableColumnItems>
                    </TableRowEntry>
                </TableRowEntries>
            </TableControl>
        </View>
    </ViewDefinitions>
</Configuration>