In traditional shells, each tool or command determines the format of its output. Some tools let you customize the output, and they include special parameters to control the output format.

In Windows PowerShell, the only cmdlets that format output are the format cmdlets:

None of the other cmdlets format output. As a result, you don't need to learn the formatting routines and parameters of multiple tools. Just learn about the Format cmdlets and their parameters.

When you run a command, the Windows PowerShell calls the default formatter, which is determined by the type of data being displayed. The formatter determines which properties of the output are displayed and whether they are displayed in a list or table.

For example, when you use the Get-Service cmdlet, the default display is a three-column table, such as the following:

C:\PS> get-service
Status   Name			 DisplayName
------   ----			 -----------
Running  AdtAgent		 Event Forwarder
Stopped  Alerter			Alerter
Running  ALG				Application Layer Gateway Service

To change the format of the output from any cmdlet, use the pipeline operator (|) to send the output of the command to a Format cmdlet.

For example, the following command sends the output of a Get-Service command to the Format-List cmdlet. As a result, the service data is formatted as a list for each service.

C:\PS> get-service | format-list
Name				: AdtAgent
DisplayName		 : Event Forwarder
Status			: Running
DependentServices   : {}
ServicesDependedOn  : {eventlog, dnscache}
CanPauseAndContinue : False
CanShutdown		 : True
CanStop			 : True
ServiceType		 : Win32OwnProcess

Name				: Alerter
DisplayName		 : Alerter
Status			: Stopped
DependentServices   : {}
ServicesDependedOn  : {LanmanWorkstation}
CanPauseAndContinue : False
CanShutdown		 : False
CanStop			 : False
ServiceType		 : Win32ShareProcess

Name				: ALG
DisplayName		 : Application Layer Gateway Service
Status			: Running
DependentServices   : {}

In this format, not only does the data appear in a list, instead of a table, but there is more information about each service. Instead of three columns of data for each service, there are nine rows of data. Format-List did not retrieve the extra service information. The data was always there in the objects that Get-Service retrieved, but Format-Table, the default formatter, omitted it, because it could not display more than three columns across on the screen.

In addition to determining whether the data appears in a list or table, you can also determine which properties of the object are displayed. For example, the default display of Get-Service display only the Status, Name, and DisplayName properties of the service object.

To see all of the properties of an object, use a pipeline operator (|) to send the output of a command to the Get-Member cmdlet. For example, to see all of the properties of a service object, type:

get-service | get-member -membertype *property

   TypeName: System.ServiceProcess.ServiceController

Name				MemberType	Definition
----				----------	----------
Name				AliasProperty Name = ServiceName
CanPauseAndContinue Property	System.Boolean CanPauseAndContinue {get;}
CanShutdown		 Property	System.Boolean CanShutdown {get;}
CanStop			 Property	System.Boolean CanStop {get;}
Container		 Property	System.ComponentModel.IContainer Container {get;}
DependentServices   Property	System.ServiceProcess.ServiceController[] DependentServices {get;}
DisplayName		 Property	System.String DisplayName {get;set;}
MachineName		 Property	System.String MachineName {get;set;}
ServiceHandle	 Property	System.Runtime.InteropServices.SafeHandle ServiceHandle {get;}
ServiceName		 Property	System.String ServiceName {get;set;}
ServicesDependedOn  Property	System.ServiceProcess.ServiceController[] ServicesDependedOn {get;}
ServiceType		 Property	System.ServiceProcess.ServiceType ServiceType {get;}
Site				Property	System.ComponentModel.ISite Site {get;set;}
Status			Property	System.ServiceProcess.ServiceControllerStatus Status {get;}

Because all of these properties are in the object that Get-Service retrieves for each service, you can display any or all of them. Use the Property parameter of the Format cmdlets to select the properties to be displayed and the order in which they are displayed. For example, the following command uses the Format-Table command to display only the Name, ServiceType, and CanShutDown properties of the service.

get-service | format-table name, Servicetype, Canshutdown

This is just the beginning of what you can do with Windows PowerShell displays. For more details, use the following commands to read the help for the Format cmdlets:

get-help format-list
get-help format-table
get-help format-wide
get-help format-custom