Select-Object
选择一个对象或一组对象的指定属性。它还可以从对象的数组中选择唯一对象,也可以从对象数组的开头或末尾选择指定个数的对象。
语法
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>]
说明
Select-Object cmdlet 仅获取一个或一组对象的指定属性。它还可以从对象的数组中选择唯一对象,也可以从对象数组的开头或末尾选择指定个数的对象。
如果使用 Select-Object 来选择指定属性,则它会从输入对象中复制这些属性的值,并创建具有指定的属性和复制的值的新对象。
使用 Property 参数指定您要选择的属性。或者,使用 First、Last、Unique、Skip 和 Index 参数从输入对象数组中选择特定对象。若要执行更特定的对象筛选,请使用 Where-Object cmdlet。
参数
-ExcludeProperty <string[]>
删除所选的指定属性。允许使用通配符。仅当命令中也包含 Property 参数时,此参数才有效。
该属性参数的值可以是计算属性,这是指定名称并计算值以显示属性的哈希表。有效键包括:
-- Name 或 Label <字符串>
-- Expression <字符串> 或 <脚本块>
有关详细信息,请参阅示例。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
true |
-ExpandProperty <string>
指定要选择的属性,并指示应当尝试展开该属性。属性名中允许使用通配符。
例如,如果指定的属性是数组,则应当在输出中包括该数组的每个值。如果属性包含对象,则该对象的属性会显示在输出中。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
true |
-First <int>
指定要从输入对象的数组的开头选择的对象数。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-Index <Int32[]>
基于对象的索引值从数组中选择对象。以逗号分隔的列表形式输入索引。
数组中的索引从 0 开始,0 表示第一个值,(n-1) 表示最后一个值。
是否为必需? |
false |
位置? |
named |
默认值 |
无 |
是否接受管道输入? |
false |
是否接受通配符? |
false |
-InputObject <psobject>
指定要通过管道发送到 cmdlet 的对象。使用此参数可以通过管道将对象传递给 Select-Object。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
true (ByValue) |
是否接受通配符? |
false |
-Last <int>
指定要从输入对象的数组的末尾选择的对象数。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-Property <Object[]>
指定要选择的属性。允许使用通配符。
Property 参数的值可以是新的计算属性。若要创建计算属性,请使用哈希表。有效键包括:
-- Name(或 Label)<字符串>
-- Expression <字符串> 或 <脚本块>
是否为必需? |
false |
位置? |
1 |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
true |
-Skip <int>
跳过(不选择)指定数量的项目。默认情况下,Skip 参数会从数组或对象列表的开头开始计数,但如果命令使用 Last 参数,它会从列表或数组的末尾开始计数。
与从 0 开始计数的 Index 参数不同,Skip 参数从 1 开始计数。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-Unique
指定如果输入对象的子集有相同的属性和值,则只选择该子集的一个成员。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
<CommonParameters>
此 cmdlet 支持通用参数:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息,请参阅 about_Commonparameters.
输入和输出
输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。
输入 |
System.Management.Automation.PSObject 可以通过管道将任何对象传递给 Select-Object。 |
输出 |
System.Management.Automation.PSObject |
说明
还可以使用 Select-Object 的内置别名“select”来对其进行引用。有关详细信息,请参阅 about_Aliases。
示例 1
C:\PS>get-process | select-object ProcessName,Id,WS
说明
-----------
此命令显示进程的列表。只显示进程的名称、ID 和工作集 (WS) 属性。
示例 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
说明
-----------
此命令显示有关在计算机上运行的进程所使用的模块的信息。它使用 ExpandProperty 参数显示在模块属性中包含的详细信息。
示例 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
说明
-----------
此命令显示占用内存最多的五个进程。Sort-Object cmdlet 用于按内存(工作集)使用量对进程排序,Select-Object cmdlet 用于只选择所得到的对象数组的最后五个成员。
示例 4
C:\PS>get-process | select-object -property ProcessName,@{Name="Start Day"; Expression = {$_.StartTime.DayOfWeek}}
ProcessName StartDay
---- --------
alg Wednesday
ati2evxx Wednesday
ati2evxx Thursday
...
说明
-----------
此命令显示计算机上正在运行的进程的名称和启动日期。
Property 参数的值为 ProcessName 和名为“Start Day”的计算属性。通过使用具有 Name 和 Expression 键的哈希表来添加“Start Day”属性。
示例 5
C:\PS>"a","b","c","a","a","a" | select-object -unique
a
b
c
说明
-----------
此命令显示字符数组中的唯一字符。
示例 6
C:\PS>$a = get-eventlog -log "Windows PowerShell"
C:\PS> $a | select-object -index 0, ($a.count - 1)
说明
-----------
这些命令获取 Windows Powershell 事件日志中的第一个(最新)和最后一个(最旧)事件。
第一条命令使用 Get-EventLog cmdlet 获取 Windows Powershell 日志中的所有事件。它将事件保存在 $a 变量中。
第二条命令使用管道运算符 (|) 将 $a 中的事件发送到 Select-Object cmdlet。Select-Object 命令使用 Index 参数按项目的索引号选择项目。第一个事件的索引为 0。最后一个事件的索引是 $a 中的项数减 1。
示例 7
C:\PS>new-pssession -computername (get-content servers.txt | select-object -skip 1)
说明
-----------
此命令在 Servers.txt 文件中列出的每台计算机上创建一个新的 PSSession,第一台计算机除外。
此命令使用 Select-Object cmdlet 选择计算机名称列表中除第一台计算机外的全部计算机。生成的计算机列表设置为 New-PSSession cmdlet 的 ComputerName 参数的值。