Get-ChildItemColor icon indicating copy to clipboard operation
Get-ChildItemColor copied to clipboard

Provides colorized version of Get-ChildItem Cmdlet of PowerShell.

Created 2019-07-20 Sat 10:30

#+TITLE: Get-ChildItemColor #+AUTHOR: Joon Ro

=Get-ChildItemColor= provides colorization of outputs of ~Get-ChildItem~ Cmdlet of PowerShell. It is based on Tim Johnson's [[http://tasteofpowershell.blogspot.com/2009/02/get-childitem-dir-results-color-coded.html][script,]] another [[http://mow001.blogspot.com/2006/01/colorized-msh-ls-replacement.html][script]] by [[http://thepowershellguy.com/][the PowerShell Guy]], and [[https://github.com/Davlind/PSColor][PSColor]].

It provides two main functionalities:

  1. ~Get-ChildItemColor~, which adds coloring to the output of ~Get-ChildItem~.
  2. ~Get-ChildItemColorFormatWide~, which is colored version of ~Get-ChildItemColor | Format-Wide~. This uses ~Write-Host~ to output coloring, because ~Get-ChildItemColor | Format-Wide~ does not allow multiple colors in one line.

=Get-ChildItemColor= has the following features:

  • Both functions support pipelines --- they are pipeline-aware, so they just return untouhed output of ~Get-ChildItem~ when used as a part of a pipeline.
  • As of v3.0.0, it no longer overloads ~Out-Default~, and thus does not have unintended consequences.
  • Both functions work as intended inside OneDrive directories.
  • Screenshots ** Get-ChildItemColor [[file:./screenshots/Get-ChildItemColor.png]] ** Get-ChildItemColorFormatWide (=ls= equivalent) [[file:./screenshots/Get-ChildItemColorFormatWide.png]]
  • Install ** Install from [[https://www.powershellgallery.com/packages/Get-ChildItemColor/][PowerShellGallery]] PowerShellGet is required, which is included in Windows 10 and WMF5. If you are using PowerShell V3 or V4, you will need to install [[https://www.microsoft.com/en-us/download/details.aspx?id=49186][PowerShellGet]].

Then, you can run =Install-Module Get-ChildItemColor=. ** Install from GitHub After cloning the repo, you can put files in =/src= folder into =Get-ChildItemColor= folder under your =PSModulePath= (e.g., =$ENV:UserProfile\Documents\PowerShell\Modules= for PowerShell 6 and later). The =master= branch always contains the latest release version. ** Install from [[https://chocolatey.org][Chocolatey]] The module is available as a [[https://chocolatey.org/packages/get-childitemcolor][Chocolatey package]]. Install it using =choco install get-childitemcolor=.

  • Usage When you import the module:

#+begin_src powershell Import-Module Get-ChildItemColor #+end_src

it provides two functions, =Get-ChildItemColorFormatWide= and =Get-ChildItemColor=.

You can add aliases to these functions for convenience. For example, I have the following in my profile[fn:pathProfile] (please do not put this into ISE profile[fn:pathProfileISE] as it does not work in ISE):

#+begin_src powershell If (-Not (Test-Path Variable:PSise)) { # Only run this in the console and not in the ISE Import-Module Get-ChildItemColor

Set-Alias l Get-ChildItemColor -option AllScope
Set-Alias ls Get-ChildItemColorFormatWide -option AllScope [-HideHeader] [-TrailingSlashDirectory]

} #+end_src

So =l= yields colored output of =Get-ChildItem= and =ls= yields colored output of =Get-ChildItem | Format-Wide= equivalent.

~Get-ChildItemColorFormatWide~ has the following optional switches:

  • -HideHeader :: supress printing of headers (path on top).
  • -TrailingSlashDirectory :: add a trailing slash to directory names.

[fn:pathProfile] ~$Home[My ]Documents\PowerShell\Profile.ps1~ or ~$Home[My ]Documents\WindowsPowerShell\Profile.ps1~

[fn:pathProfileISE] ~$Home[My ]Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1~

** Customizing color One can dynamically change the color scheme for different items, thanks to [[https://github.com/asidlo][asidlo]]'s [[https://github.com/joonro/Get-ChildItemColor/pull/23][contribution]]. See the example below.

#+begin_src powershell

Change color for directories to Blue

$GetChildItemColorTable.File['Directory'] = "Blue"

Change color for executables to Green

ForEach ($Exe in $GetChildItemColorExtensions['ExecutableList']) { $GetChildItemColorTable.File[$Exe] = "Green" } #+end_src ** Adding a new category One can create a new category and assign colors easily like the example below. #+begin_src powershell $GetChildItemColorExtensions['OfficeList'] = @( ".docx", ".pdf", ".pptx", ".xlsx" )

ForEach ($Extension in $GetChildItemColorExtensions['OfficeList']) { $GetChildItemColorTable.File.Add($Extension, "Green") } #+end_src ** Customizing vertical space You can adjust the vertical spacing using =$Global:GetChildItemColorVerticalSpace=. Default is 1 (PowerShell's default is 2).

#+begin_src powershell $Global:GetChildItemColorVerticalSpace = 1 #+end_src

  • Authors
  • [[http://github.com/joonro][Joon Ro]].
  • Changelog
  • See [[https://github.com/joonro/Get-ChildItemColor/releases][Releases]] for newer changelog. ** v2.4.0
  • Add ~HideHeader~ switch to ~Get-ChildItemColorFormatWide~ ([[https://github.com/joonro/Get-ChildItemColor/issues/29][#29]]) ** v2.3.0
  • Better handling of header printout ([[https://github.com/joonro/Get-ChildItemColor/issues/41][#41]]) ** v2.2.2
  • Add instructions about adding a new category. ** v2.2.1
  • [[https://github.com/joonro/Get-ChildItemColor/pull/44][Fix uint32 error in cell width calculation]]. (Thanks to [[https://github.com/DanielCarmingham][DanielCarmingham]])
  • [[https://github.com/joonro/Get-ChildItemColor/pull/35][Add Chocolatey install instructions]]. (Thanks to [[https://github.com/pauby][pauby]]) ** v2.2.0
  • Fix #27, Display issue with Chinese. (Thanks to [[https://github.com/shiena][shiena]]) ** v2.1.1
  • BUGFIX: Print directory names correctly when =-Recurse= option is used ** v2.1.0
  • Re-organize folder structure ** v2.0.0
  • Incorporate [[https://github.com/Davlind/PSColor][PSColor]]'s implementation of coloring the output of =Get-ChildItem=.
  • Add =$Global:GetChildItemColorVerticalSpace= option. ** v1.3.1
  • PR #21: Added ReparsePoint (symlink) detection, matched color scheme with Linux (thanks to [[https://github.com/cmilanf][cmilanf]])
  • Make empty lines consistent between Get-ChildItemColor and Get-ChildItemColorFormatWide (Fixes [[https://github.com/joonro/Get-ChildItemColor/issues/17][#17]]) ** v1.3.0
  • PR [[https://github.com/joonro/Get-ChildItemColor/pull/23][#23]]: Added customizable color output. (thanks to [[https://github.com/asidlo][asidlo]])
  • Improve README ** v1.2.3
  • Add LICENSE ** v1.2.2
  • Improve README (#15)
  • Beautify code ** v1.2.1
  • PR #13: Fallback to Gray when no =OriginalForegroundColor= (thanks to [[https://github.com/joonro/Get-ChildItemColor/issues?q=is%3Apr+author%3Amikesigs][mikesigs]])
  • PR #12: Fix a typo (thanks to [[https://github.com/joonro/Get-ChildItemColor/issues?q=is%3Apr+author%3Ajqly][jqly]]) ** v1.2.0
  • Robust to non-file entries (Issue #10) ** v1.1.0
  • Revert back to previous implementation of =Get-ChildItemColorFormatWide= ** v1.0.0
  • The script changes =$Host.UI.RawUI.ForegroundColor= only and keep the item object intact
  • =Get-ChildItemColorFormatWide= is basically =Get-ChildItemColor | Format-Wide= ** v0.5.3
  • Better performance by reducing if's
  • Proper printing of =DirectoryEntry= for =FormatWide= case ** v0.5.2
  • Published on PowerShellGallery
  • Refactoring; separate out two functions ** v0.4.2
  • Make it a PowerShell module ** v0.4.1
  • Returns vanila =Get-Childitem= results for =DictionaryEntry= cases. ** v0.4.0
  • Make function names consistent to the PowerShell naming convention (#8)
  • Use parameters more consistently, =-Path= works with paths with spaces (#3), and =-Force= works (#9)