Select

您所在的位置:网站首页 unique参数 Select

Select

#Select| 来源: 网络整理| 查看: 265

Select-Object 参考 模块: Microsoft.PowerShell.Utility

选择对象或对象属性。

语法 Select-Object [-InputObject ] [[-Property] ] [-ExcludeProperty ] [-ExpandProperty ] [-Unique] [-CaseInsensitive] [-Last ] [-First ] [-Skip ] [-Wait] [] Select-Object [-InputObject ] [[-Property] ] [-ExcludeProperty ] [-ExpandProperty ] [-Unique] [-CaseInsensitive] [-Skip ] [-SkipLast ] [] Select-Object [-InputObject ] [-Unique] [-CaseInsensitive] [-Wait] [-Index ] [] Select-Object [-InputObject ] [-Unique] [-CaseInsensitive] [-SkipIndex ] [] 说明

Select-Object cmdlet 选择对象的指定属性或对象集。 它还可以从数组中选择唯一对象、指定数目的对象或指定位置中的对象。

若要从集合中选择对象,请使用 First、Last、Unique、Skip 和 Index 参数。 若要选择对象属性,请使用 Property 参数。 当你选择属性时,Select-Object 将返回只具有指定属性的新对象。

从 Windows PowerShell 3.0 开始,Select-Object 包含了一种优化功能,可防止命令创建和处理未使用的对象。

当你在命令管道中结合 First 或 Index 参数使用 Select-Object 时,PowerShell 将在达到对象选定数目后立即停止运行生成对象的命令。 若要禁用此优化行为,请使用 Wait 参数。

示例 示例 1:按属性选择对象

此命令创建具有进程对象的 Name、ID 和工作集 (WS) 属性的对象。

Get-Process | Select-Object -Property ProcessName, Id, WS 示例 2:按属性选择对象并设置结果格式

此示例获取有关计算机上的进程使用的模块的信息。 它使用 Get-Process cmdlet 获取计算机上的进程。

它使用 Select-Object cmdlet 输出 Get-Process 所输出的每个 System.Diagnostics.Process 实例的 Modules 属性中包含的 [System.Diagnostics.ProcessModule] 实例数组。

Select-Object cmdlet 的 Property 参数选择进程名称。 这会向每个 [System.Diagnostics.ProcessModule] 实例添加一个 ProcessNameNoteProperty,并使用当前进程的 ProcessName 属性的值填充它。

最后,使用 Format-List cmdlet 在列表中显示每个进程的名称和模块。

Get-Process Explorer | Select-Object -Property ProcessName -ExpandProperty Modules | Format-List ProcessName : explorer ModuleName : explorer.exe FileName : C:\WINDOWS\explorer.exe BaseAddress : 140697278152704 ModuleMemorySize : 3919872 EntryPointAddress : 140697278841168 FileVersionInfo : File: C:\WINDOWS\explorer.exe InternalName: explorer OriginalFilename: EXPLORER.EXE.MUI FileVersion: 10.0.17134.1 (WinBuild.160101.0800) FileDescription: Windows Explorer Product: Microsoft Windows Operating System ProductVersion: 10.0.17134.1 ... 示例 3:选择占用内存最多的进程

此示例获取占用内存最多的五个进程。 Get-Process cmdlet 获取计算机上的进程。 Sort-Object cmdlet 根据内存(工作集)使用量对进程进行排序,Select-Object cmdlet 仅选择生成的对象数组的最后五个成员。

包含 Sort-Object cmdlet 的命令中不需要 Wait 参数,因为 Sort-Object 会处理所有对象,然后返回集合。 Select-Object 优化仅适用于将对象进行处理后分别返回对象的命令。

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 示例 4:从数组中选择唯一字符

此示例使用 Select-Object 的 Unique 参数从字符数组中获取唯一字符。

"a","b","c","a","A","a" | Select-Object -Unique a b c A 示例 5:将“-Unique”与其他参数配合使用

Unique 参数在应用其他 Select-Object 参数后筛选值。 例如,如果使用 First 参数选择数组中的第一项,则 Unique 仅应用于所选的值,而不是整个数组。

"a","a","b","c" | Select-Object -First 2 -Unique a

在此示例中,First 选择 "a","a" 作为数组中的前 2 项。 Unique 应用于 "a","a",并将 a 作为唯一值返回。

示例 6:使用“-CaseInsensitive”参数选择唯一字符串

此示例使用不区分大小写的比较从字符串数组获取唯一字符串。

"aa", "Aa", "Bb", "bb" | Select-Object -Unique -CaseInsensitive aa Bb 示例 7:选择事件日志最新和最早的事件

此示例获取 Windows PowerShell 事件日志中的第一个(最新)和最后一个(最旧)事件。

Get-WinEvent 获取 Windows PowerShell 日志中的所有事件,并将其保存在 $a 变量中。 然后,通过管道将 $a 传递给 Select-Object cmdlet。 Select-Object 命令使用 Index 参数从 $a 变量中的事件数组中选择事件。 第一个事件的索引为 0。 最后一个事件的索引为 $a 中的项数减 1。

$a = Get-WinEvent -LogName "Windows PowerShell" $a | Select-Object -Index 0, ($a.count - 1) 示例 8:选择除了第一个对象以外的所有对象

此示例将在 Servers.txt 文件中列出的每台计算机上创建一个新的 PSSession,第一台计算机除外。

Select-Object 选择计算机名列表中除第一台计算机以外的所有计算机。 生成的计算机列表设置为 New-PSSession cmdlet 的 ComputerName 参数的值。

New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1) 示例 9:重命名文件并选择多个文件进行评审

此示例将“-ro”后缀添加到具有只读属性的文本文件的基名称中,然后显示前五个文件以便用户可以看到此效果的示例。

Get-ChildItem 使用 ReadOnly 动态参数来获取只读文件。 生成的文件通过管道传递给 Rename-Item cmdlet,该 cmdlet 重命名该文件。 它使用 Rename-Item 的 PassThru 参数将重命名的文件发送到 Select-Object cmdlet,该 cmdlet 选择前 5 个进行显示。

Select-Object 的 Wait 参数防止 PowerShell 在获取前五个只读文本文件后停止 Get-ChildItem cmdlet。 如果不使用此参数,则只有前五个只读文件会被重命名。

Get-ChildItem *.txt -ReadOnly | Rename-Item -NewName {$_.BaseName + "-ro.txt"} -PassThru | Select-Object -First 5 -Wait 示例 10:显示 -ExpandProperty 参数的复杂情况

此示例显示 ExpandProperty 参数的复杂情况。

请注意,生成的输出是 [System.Int32] 实例的数组。 这些实例符合输出视图的标准格式规则。 对于任何 Expanded 属性都是如此。 如果输出的对象具有特定的标准格式,则扩展属性可能不可见。

# Create a custom object to use for the Select-Object example. $object = [pscustomobject]@{Name="CustomObject";Expand=@(1,2,3,4,5)} # Use the ExpandProperty parameter to Expand the property. $object | Select-Object -ExpandProperty Expand -Property Name 1 2 3 4 5 # The output did not contain the Name property, but it was added successfully. # Use Get-Member to confirm the Name property was added and populated. $object | Select-Object -ExpandProperty Expand -Property Name | Get-Member TypeName: System.Int32 Name MemberType Definition ---- ---------- ---------- CompareTo Method int CompareTo(System.Object value), int CompareTo(int value), ... Equals Method bool Equals(System.Object obj), bool Equals(int obj), bool IEq... GetHashCode Method int GetHashCode() GetType Method type GetType() GetTypeCode Method System.TypeCode GetTypeCode(), System.TypeCode IConvertible.Ge... ToBoolean Method bool IConvertible.ToBoolean(System.IFormatProvider provider) ToByte Method byte IConvertible.ToByte(System.IFormatProvider provider) ToChar Method char IConvertible.ToChar(System.IFormatProvider provider) ToDateTime Method datetime IConvertible.ToDateTime(System.IFormatProvider provider) ToDecimal Method decimal IConvertible.ToDecimal(System.IFormatProvider provider) ToDouble Method double IConvertible.ToDouble(System.IFormatProvider provider) ToInt16 Method int16 IConvertible.ToInt16(System.IFormatProvider provider) ToInt32 Method int IConvertible.ToInt32(System.IFormatProvider provider) ToInt64 Method long IConvertible.ToInt64(System.IFormatProvider provider) ToSByte Method sbyte IConvertible.ToSByte(System.IFormatProvider provider) ToSingle Method float IConvertible.ToSingle(System.IFormatProvider provider) ToString Method string ToString(), string ToString(string format), string ToS... ToType Method System.Object IConvertible.ToType(type conversionType, System... ToUInt16 Method uint16 IConvertible.ToUInt16(System.IFormatProvider provider) ToUInt32 Method uint32 IConvertible.ToUInt32(System.IFormatProvider provider) ToUInt64 Method uint64 IConvertible.ToUInt64(System.IFormatProvider provider) Name NoteProperty string Name=CustomObject 示例 11:在对象上创建自定义属性

以下示例演示如何使用 Select-Object 向任何对象添加自定义属性。 指定不存在的属性名称时,Select-Object 在传递的每个对象上将该属性创建为 NoteProperty。

$customObject = 1 | Select-Object -Property MyCustomProperty $customObject.MyCustomProperty = "New Custom Property" $customObject MyCustomProperty ---------------- New Custom Property 示例 12:为每个 InputObject 创建计算属性

此示例演示如何使用 Select-Object 向输入添加计算属性。 将 ScriptBlock 传递给 Property 参数会导致 Select-Object 计算传递的每个对象的表达式,并将结果添加到输出中。 在 ScriptBlock 中,可以使用 $_ 变量引用管道中的当前对象。

默认情况下,Select-Object 使用 ScriptBlock 字符串作为属性的名称。 使用哈希表,可以将 ScriptBlock 的输出标记为添加到每个对象的自定义属性。 可以将多个计算属性添加到传递给 Select-Object 的每个对象。

# Create a calculated property called $_.StartTime.DayOfWeek Get-Process | Select-Object -Property ProcessName,{$_.StartTime.DayOfWeek} ProcessName $_.StartTime.DayOfWeek ---- ---------------------- alg Wednesday ati2evxx Wednesday ati2evxx Thursday ... # Add a custom property to calculate the size in KiloBytes of each FileInfo # object you pass in. Use the pipeline variable to divide each file's length by # 1 KiloBytes $size = @{label="Size(KB)";expression={$_.length/1KB}} # Create an additional calculated property with the number of Days since the # file was last accessed. You can also shorten the key names to be 'l', and 'e', # or use Name instead of Label. $days = @{l="Days";e={((Get-Date) - $_.LastAccessTime).Days}} # You can also shorten the name of your label key to 'l' and your expression key # to 'e'. Get-ChildItem $PSHOME -File | Select-Object Name, $size, $days Name Size(KB) Days ---- -------- ---- Certificate.format.ps1xml 12.5244140625 223 Diagnostics.Format.ps1xml 4.955078125 223 DotNetTypes.format.ps1xml 134.9833984375 223 示例 13:选择不使用计算属性的哈希表键

从 PowerShell 6 开始,Select-Object 支持选择“哈希表”输入的键作为属性。 以下示例选择输入哈希表上的 weight 和 name 键并显示输出。

@{ name = 'a' ; weight = 7 } | Select-Object -Property name, weight name weight ---- ------ a 7 参数 -CaseInsensitive

默认情况下,使用 Unique 参数时,cmdlet 使用区分大小写的比较。 使用此参数时,cmdlet 使用不区分大小写的比较。

此参数已在 PowerShell 7.4 中添加。

Type:SwitchParameter Position:Named Default value:False Required:False Accept pipeline input:False Accept wildcard characters:False -ExcludeProperty

指定此 cmdlet 从操作中排除的属性。 允许使用通配符。

从 PowerShell 6 开始,不再需要包含 Property 参数即可使 ExcludeProperty 正常工作。

Type:String[] Position:Named Default value:None Required:False Accept pipeline input:False Accept wildcard characters:True -ExpandProperty

指定要选择的属性,并指示应当尝试展开该属性。 如果输入对象管道没有命名的属性,Select-Object 将返回错误。

如果指定的属性是数组,则应当在输出中包括该数组的每个值。 如果指定的属性是对象,则每个 InputObject 的对象属性都会展开

在任一情况下,输出对象的 Type 与扩展属性的 Type 匹配。

如果指定了 Property 参数,Select-Object 会尝试将每个选定属性添加为每个输出对象的 NoteProperty。

警告

如果因为该名称的属性已存在而收到无法处理属性的错误,请考虑以下事项。 请注意,使用 ExpandProperty 时, Select-Object 不能替换现有属性。 这意味着:

如果展开的对象具有同名的属性,该命令将返回错误。 如果 Selected 对象具有与 Expanded 对象的属性同名的属性,该命令将返回错误。 Type:String Position:Named Default value:None Required:False Accept pipeline input:False Accept wildcard characters:False -First

指定要从输入对象的数组的开头选择的对象数。

Type:Int32 Position:Named Default value:None Required:False Accept pipeline input:False Accept wildcard characters:False -Index

基于对象的索引值从数组中选择对象。 以逗号分隔的列表形式输入索引。 数组中的索引从 0 开始,0 表示第一个值,(n-1) 表示最后一个值。

Type:Int32[] Position:Named Default value:None Required:False Accept pipeline input:False Accept wildcard characters:False -InputObject

指定要通过管道发送到 cmdlet 的对象。 此参数允许通过管道将对象传递给 Select-Object。

将对象传递给 InputObject 参数而不是使用管道时,Select-Object 将 InputObject 视为单个对象,即使值是集合也是如此。 建议在将集合传递给 Select-Object 时使用管道。

Type:PSObject Position:Named Default value:None Required:False Accept pipeline input:True Accept wildcard characters:False -Last

指定要从输入对象的数组的末尾选择的对象数。

Type:Int32 Position:Named Default value:None Required:False Accept pipeline input:False Accept wildcard characters:False -Property

指定要选择的属性。 这些属性作为 NoteProperty 成员添加到输出对象。 允许使用通配符。 如果输入对象没有命名的属性,则新 NoteProperty 的值设置为 $null。

Property 参数的值可以是新的计算属性。 若要创建计算属性,请使用哈希表。

有效键包括:

Name(或 Label)- Expression - 或

有关详细信息,请参阅 about_Calculated_Properties。

Type:Object[] Position:0 Default value:None Required:False Accept pipeline input:False Accept wildcard characters:True -Skip

跳过(不选择)指定数目的项。 默认情况下,Skip 参数从对象集合的开头计数。 如果命令使用 Last 参数,则从集合末尾计数。

与从 0 开始计数的 Index 参数不同,Skip 参数从 1 开始计数。

从 PowerShell 7.4 开始,可以将 Skip 参数与 SkipLast 参数一起使用,以跳过集合的开头和末尾的项。

Type:Int32 Position:Named Default value:None Required:False Accept pipeline input:False Accept wildcard characters:False -SkipIndex

根据数组的索引值跳过(不选择)对象。 以逗号分隔的列表形式输入索引。 数组中的索引从 0 开始,0 表示第一个值,(n-1) 表示最后一个值。

此参数是在 Windows PowerShell 6.0 中引入的。

Type:Int32[] Position:Named Default value:None Required:False Accept pipeline input:False Accept wildcard characters:False -SkipLast

跳过(不选择)列表或数组末尾的指定项数。 工作方式与将 Skip 和 Last 参数结合使用一样。

与从 0 开始计数的 Index 参数不同,SkipLast 参数从 1 开始计数。

从 PowerShell 7.4 开始,可以将 Skip 参数与 SkipLast 参数一起使用,以跳过集合的开头和末尾的项。

Type:Int32 Position:Named Default value:None Required:False Accept pipeline input:False Accept wildcard characters:False -Unique

指定如果输入对象的子集有相同的属性和值,应只选择该子集的一个成员。

Unique 在应用其他筛选参数之后选择值。

此参数区分大小写。 因此,会将仅大小写不同的字符串视为唯一项。 添加 CaseInsensitive 参数以执行不区分大小写的比较。

Type:SwitchParameter Position:Named Default value:None Required:False Accept pipeline input:False Accept wildcard characters:False -Wait

指示 cmdlet 关闭优化。 PowerShell 将按照命令在命令管道中出现的顺序运行命令,并允许它们生成所有对象。 默认情况下,如果在命令管道中包含带有 First 或 Index 参数的 Select-Object,则 PowerShell 将在生成选定数目的对象后立即停止运行生成对象的命令。

已在 Windows PowerShell 3.0 中引入了此参数。

Type:SwitchParameter Position:Named Default value:None Required:False Accept pipeline input:False Accept wildcard characters:False 输入

PSObject

可以通过管道将对象传递给此 cmdlet。

输出

PSObject

此 cmdlet 仅返回具有所选属性的输入对象。

备注

PowerShell 包含以下 Select-Object 别名:

所有平台: select

Select-Object 的优化功能仅对在处理对象时将对象写入管道的命令可用。 它对用于缓冲处理的对象并将其作为集合写入的命令不起作用。 立即写入对象是 cmdlet 设计的最佳做法。 有关详细信息,请参阅强烈推荐的开发指南中的“将单个记录写入管道”。

相关链接 about_Calculated_Properties Group-Object Sort-Object Where-Object


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3