Windows PowerShell Scripting – Format-Table (FT)
Format-Table, or FT for short, controls the formatting of the output of your Windows PowerShell commands. Whenever presentation of information is important, pipe the script’s output into Format-Table. On this page I will show you examples of this straightforward, but important command.
Windows PowerShell Format-Table Topics
- Format-Table – Simple Examples
- Format-Table – Intermediate examples
- Format-Table with Get-WmiObject
- Format-Table Alias FT
- PowerShell Format-List
Scenario: we wish to investigate processes running on workstation or a Windows Server.
PowerShell and .Net framework are installed on your computer.
You are at the prompt PS> Or if you have PowerShell 2.0, launch the ISE.
Let us get started with an example using the default formatting:
# Preliminary example, no Format-Table yet Get-Process
The ‘problem’ is that the name of the process is on the right, and we have columns in the output which are of no interest.
Now let me introduce Format-Table so that we can control which properties to display in the output. Let us suppose that we are only interested in ‘Handles’.
# Example of PowerShell Format-Table Get-Process | Format-Table ProcessName, Handles -auto
Note 1: Thanks to Format-Table, we now have the name of the process in the first column.
Note 2: -auto prevents the output spreading to the full width and consequently, the -auto parameter makes the figures easier to read. To see the effect try the above command without -auto.
Guy Recommends: Network Performance Monitor (FREE TRIAL)
SolarWinds Network Performance Monitor (NPM) will help you discover what’s happening on your network. This utility will also guide you through troubleshooting; the dashboard will indicate whether the root cause is a broken link, faulty equipment or resource overload.
What I like best is the way NPM suggests solutions to network problems. Its also has the ability to monitor the health of individual VMware virtual machines. If you are interested in troubleshooting, and creating network maps, then I recommend that you try NPM on a 30-day free trial.
The main thing that goes wrong with Format-Table is forgetting the pipe (|) before the command. My technique is to get the main command working then use (|) to pipe the output into Format-Table. From there we can list the names of the properties we wish to display.
A secondary problem with this cmdlet is forgetting the comma between the properties; but remember, there is no comma after Format-Table and before the 1st property.
Get-Process | Format-Table ProcessName, Handles ID -auto Get-Process | Format-Table ProcessName, Handles, ID -auto
It is time to research what other properties of Get-Process are available, then we can fine tune our Format-Table command.
# Example of PowerShell Format-Table for properties Get-Process | Get-Member -Membertype property
Example 2b: Even here, I cannot resist using Format-Table to filter which column gets exported to the file.
$Proc = Get-Process | Get-Member -Membertype property $Proc | Format-Table Name | Out-File procprop1.txt
Note 3: It’s not really necessary to introduce the variable $Proc. However, one advantage of this technique is that it saves problems with our script word-wrapping to the next line.
Example 3a: As a result of this research we can choose some different columns in the output, for example, BasePriority and HandleCount:
# Example of PowerShell Format-Table for multiple items
Get-Process | Format-Table Name, HandleCount, BasePriority
Example 3b: Let us see what happens is we add -auto.
# Example of PowerShell Format output for multiple items Get-Process | Format-Table Name, HandleCount, BasePriority -auto
Guy Recommends: SolarWinds Engineer’s Toolset (FREE TRIAL)
This Engineer’s Toolset provides a comprehensive console of 50 utilities for troubleshooting computer problems. Guy says it helps me monitor what’s occurring on the network, and each tool teaches me more about how the underlying system operates.
There are so many good gadgets; it’s like having free rein of a sweetshop. Thankfully the utilities are displayed logically: monitoring, network discovery, diagnostic, and Cisco tools. Try the SolarWinds Engineer’s Toolset on a 14-day free trial now!
Format-Table comes into its own when dealing with Get-WmiObject classes. Because the output contains more than 5 properties, and the default layout is courtesy of Format-List; I prefer to select my properties, and use Format-Table.
Example 4: Get-WmiObject
# Example of Get-WmiObject with default output Get-WmiObject -Class Win32_NetworkAdapter
Observe (above) that the default format prescribed for Get-WmiObject is Format-List. However, we can pipe the output into Format-Table (see below)
Clear-Host # Example of Get-WmiObject with Format-Table output Get-WmiObject -Class Win32_NetworkAdapter | Format-Table DeviceId, Name, MACAddress -AutoSize
We have already seen Format-Table’s -auto parameter, now let us research more switches:
# Extra parameters for PowerShell to Format output Clear-host Get-Help Format-Table -full
Note 4: One of my favourite Format-Table parameters is -GroupBy
Example 5: -GroupBy
Format-Table has a parameter called -GroupBy, which offers a method of aggregating the data.
Clear-host $Proc = Get-Process | Sort-Object -descending BasePriority $Proc | Format-Table name, HandleCount -groupby BasePriority -auto
Note 5: Out-GridView: PowerShell v 2.0 introduces a new cmdlet to control data display. See more on how to pipe the results into out-GridView.
Example 6: Sort-object (Can be abbreviated to ‘Sort’)
Another technique for getting order into the output is to employ Sort-object.
$Proc = Get-Process | Sort-Object -descending BasePriority $Proc | Format-Table Name, HandleCount, BasePriority -auto
With Microsoft, there are always at least three ways of doing everything, what seems like redundancy when you are an expert, seems like perspective when you are a beginner. One obvious example is that you can abbreviate Format-Table to FT. As you increase your range of PowerShell commands, keep an eye out for another PowerShell Alias, for example, gwmi for Get-WmiObject and gci (Get-Childitem).
Here are alternative methods of achieving the above objectives, each example is designed to develop your binocular vision, hence see the target more clearly. For example, if you experiment with format-wide and format-List you will extend your range of formatting options.
Guy Recommends: SolarWinds Admin Bundle for Active Directory (FREE TOOL)
Import users from a spreadsheet. Just provide a list of the users with their fields in the top row, and save as .csv file. Then launch this FREE utility and match your fields with AD’s attributes, click and import the users.
Optionally, you can provide the name of the OU where the new accounts will be born. Download your FREE bulk import tool.
If you need more comprehensive application analysis software, Download a free trial of SAM (Server & Application Monitor)
PowerShell FT Alias Examples
Example 7a: [Use in conjunction with Example 1a and 1b above]
# Example of PowerShell Format output with FT Get-Process | FT ProcessName, Handles, PagedMemorySize -auto
Learning points. You can substitute FT for Format-Table. Also you can research other properties, for example PagedMemorySize.
Clear-host Get-Process | Get-Member -Membertype method | FT name
Learning points. In addition to property, you can research an object’s method. For instance, in other scripts you may wish to employ the .kill() method.
Get-Process | FT Name, HandleCount -groupby BasePriority -auto
Learning points. It’s not essential to use variables. This is a simpler example focusing on the -groupby switch.
How to Discover More Formatting Cmdlets
Clear-Host Get-Command -verb format
In addition to Format-Table, you can display data in not one column but two or three columns. This is the format-wide or (fw) option, which is useful where you have a long list with only one field, for example:
Get-Process | Get-Member -Membertype method | Format-Wide name -column 3.
The other way PowerShell can format output is with a list. This is useful when you want to display multiple properties for one object. Here is an example:
#Example of PowerShell Format-List Get-Process services | Format-List -property *
Note 6: What makes using the format-List worthwhile is the * (star) wildcard.
As regards our working technique for Format-Table, we have reached a crossroads. My preferred working method is to create scripts and then run them from the PowerShell command line. The other alternative is to keep typing and re-typing the commands in the shell. My technique comes into its own when the commands are complex; as a bonus, my scripts document what I do so it’s easy to refer and refine previous experiments.
If you too like this script (cmdlet) method, then first make sure PowerShell will allow the script to run, you only have to do this once, type :
Assuming that I have saved example 2 in a file called proc.ps1, what I do is go to the PS prompt and type .\proc. You either have to save the script into the working directory, or else use cd to change to the directory where the script was saved.
Presentation really does transform the output of your PowerShell scripts. Also, when you get too much information the answer is to filter and reduce the number of columns in the display. On other occasions, you need to display extra properties, which are not shown by the default command. In each case, Format-Table gives you control over the presentation of your output.
While Format-Table (or FT for short), is a ubiquitous command, it does have numerous switches. With judicious application of its many switches, you can produce creative and effective outputs.
See more Microsoft PowerShell output tutorials:
Please email me if you have a better example script. Also please report any factual mistakes, grammatical errors or broken links, I will be happy to correct the fault.