Select-Object

Selects specified properties of an object or set of objects. It can also select unique objects from an array of objects, or it can select a specified number of objects from the beginning or end of an array of objects.

Syntax

Select-Object [[-Property] <Object[]>] [-ExcludeProperty <string[]>] [-ExpandProperty <string>] [-First <int>] [-InputObject <psobject>] [-Last <int>] [-Skip <int>] [-Unique] [<CommonParameters>]

Select-Object [-Index <Int32[]>] [-InputObject <psobject>] [-Unique] [<CommonParameters>]

Description

The Select-Object cmdlet gets only the specified properties of an object or set of objects. It can also select unique objects from an array of objects, or it can select a specified number of objects from the beginning or end of an array of objects.

If you use Select-Object to select specified properties, it copies the values of those properties from the input objects and creates new objects that have the specified properties and copied values.

Use the Property parameter to specify the properties you want to select. Or, use the First, Last, Unique, Skip, and Index parameters to select particular objects from an array of input objects. For more specific object filtering, use the Where-Object cmdlet.

Parameters

-ExcludeProperty <string[]>

Removes the specifies properties from the selection. Wildcards are permitted. This parameter is effective only when the command also includes the Property parameter.

The value of the property parameter can be a calculated property, which is a hash table that specifies a name and calculates a value for the property display. Valid keys are:

-- Name or Label <string>

-- Expression <string> or <scriptblock>

For more information, see the examples.

Required?

false

Position?

named

Default Value

none

Accept Pipeline Input?

false

Accept Wildcard Characters?

true

-ExpandProperty <string>

Specifies a property to select, and indicates that an attempt should be made to expand that property. Wildcards are permitted in the property name.

For example, if the specified property is an array, each value of the array is included in the output. If the property contains an object, the properties of that object are displayed in the output.

Required?

false

Position?

named

Default Value

none

Accept Pipeline Input?

false

Accept Wildcard Characters?

true

-First <int>

Specifies the number of objects to select from the beginning of an array of input objects.

Required?

false

Position?

named

Default Value

none

Accept Pipeline Input?

false

Accept Wildcard Characters?

false

-Index <Int32[]>

Selects objects from an array based on their index values. Enter the indexes in a comma-separated list.

Indexes in an array begin with 0, where 0 represents the first value and (n-1) represents the last value.

Required?

false

Position?

named

Default Value

None

Accept Pipeline Input?

false

Accept Wildcard Characters?

false

-InputObject <psobject>

Specifies objects to send to the cmdlet through the pipeline. This parameter enables you to pipe objects to Select-Object.

Required?

false

Position?

named

Default Value

none

Accept Pipeline Input?

true (ByValue)

Accept Wildcard Characters?

false

-Last <int>

Specifies the number of objects to select from the end of an array of input objects.

Required?

false

Position?

named

Default Value

none

Accept Pipeline Input?

false

Accept Wildcard Characters?

false

-Property <Object[]>

Specifies the properties to select. Wildcards are permitted.

The value of the Property parameter can be a new calculated property. To create a calculated, property, use a hash table. Valid keys are:

-- Name (or Label) <string>

-- Expression <string> or <script block>

Required?

false

Position?

1

Default Value

none

Accept Pipeline Input?

false

Accept Wildcard Characters?

true

-Skip <int>

Skips (does not select) the specified number of items. By default, the Skip parameter counts from the beginning of the array or list of objects, but if the command uses the Last parameter, it counts from the end of the list or array.

Unlike the Index parameter, which starts counting from 0, the Skip parameter begins at 1.

Required?

false

Position?

named

Default Value

none

Accept Pipeline Input?

false

Accept Wildcard Characters?

false

-Unique

Specifies that if a subset of the input objects has identical properties and values, only a single member of the subset will be selected.

Required?

false

Position?

named

Default Value

none

Accept Pipeline Input?

false

Accept Wildcard Characters?

false

<CommonParameters>

This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see about_CommonParameters.

Inputs and Outputs

The input type is the type of the objects that you can pipe to the cmdlet. The return type is the type of the objects that the cmdlet returns.

Inputs

System.Management.Automation.PSObject

You can pipe any object to Select-Object.

Outputs

System.Management.Automation.PSObject

Notes

You can also refer to Select-Object by its built-in alias, "select". For more information, see about_Aliases.

Example 1

C:\PS>get-process | select-object ProcessName,Id,WS

This command displays a list of processes. Only the name, ID, and working set (WS) properties of the processes are displayed.






Example 2

C:\PS>get-process | select-object processname -expandproperty modules |
format-list

ProcessName	 : 00THotkey
Size			: 256
Company		 : TOSHIBA Corporation
FileVersion	 : 1, 0, 0, 27
ProductVersion	: 6, 2, 0, 0
Description	 : THotkey
Product		 : TOSHIBA THotkey
ModuleName		: 00THotkey.exe
FileName		: C:\WINDOWS\system32\00THotkey.exe
BaseAddress	 : 4194304


Description
-----------
This command displays information about the modules used by the processes running on a computer. It uses the ExpandProperty parameter to display the details contained within the modules property.






Example 3

C:\PS>get-process | sort-object -property WS | select-object -Last 5

Handles  NPM(K)	PM(K)	WS(K) VS(M)   CPU(s)	 Id ProcessName
-------  ------	-----	----- -----   ------	 -- -----------
   2866	 320	33432	45764   203   222.41   1292 svchost
	577	17	23676	50516   265	50.58   4388 WINWORD
	826	11	75448	76712   188	19.77   3780 Ps
   1367	14	73152	88736   216	61.69	676 Ps
   1612	44	66080	92780   380   900.59   6132 INFOPATH


Description
-----------
This command displays the five processes that are using the most memory. The Sort-Object cmdlet is used to sort the processes according to memory (working set) usage, and the Select-Object cmdlet is used to select only the last five members of the resulting array of objects.






Example 4

C:\PS>get-process | select-object -property ProcessName,@{Name="Start Day"; Expression = {$_.StartTime.DayOfWeek}}

ProcessName  StartDay
----		 --------
alg		Wednesday
ati2evxx	 Wednesday
ati2evxx	 Thursday
...


Description
-----------
This command displays the name and start day of the processes running on a computer. 

The values of the Property parameter are ProcessName and a calculated property named "Start Day." The "Start Day" property is added by using a hash table with Name and Expression keys.






Example 5

C:\PS>"a","b","c","a","a","a" | select-object -unique

a
b
c


Description
-----------
This command displays unique characters from an array of characters.






Example 6

C:\PS>$a = get-eventlog -log "Windows PowerShell" 

C:\PS> $a | select-object -index 0, ($a.count - 1)

These commands get the first (newest) and last (oldest) events in the Windows Powershell event log. 

The first command uses the Get-EventLog cmdlet to get all events in the Windows Powershell log. It saves the events in the $a variable.

The second command uses a pipeline operator (|) to send the events in $a to the Select-Object cmdlet. The Select-Object command uses the Index parameter to select items by their index number. The index for the first event is 0. The index for the last event is the number of items in $a minus 1.






Example 7

C:\PS>new-pssession -computername (get-content servers.txt | select-object -skip 1)

This command creates a new PSSession on each of the computers listed in the Servers.txt files, except for the first one.

This command uses the Select-Object cmdlet to select all but the first computer in a list of computer names. The resulting list of computers is set as the value of the ComputerName parameter of the New-PSSession cmdlet.






See Also