[玩转系统] Select-Object (Microsoft.PowerShell.Utility)
作者:精品下载站 日期:2024-12-14 02:04:08 浏览:14 分类:玩电脑
Select-Object (Microsoft.PowerShell.Utility)
Select-Object
模块 :Microsoft.PowerShell.Utility选择对象或对象属性。
句法
Select-Object
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-ExcludeProperty <String[]>]
[-ExpandProperty <String>]
[-Unique]
[-CaseInsensitive]
[-Last <Int32>]
[-First <Int32>]
[-Skip <Int32>]
[-Wait]
[<CommonParameters>]
Select-Object
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-ExcludeProperty <String[]>]
[-ExpandProperty <String>]
[-Unique]
[-CaseInsensitive]
[-Skip <Int32>]
[-SkipLast <Int32>]
[<CommonParameters>]
Select-Object
[-InputObject <PSObject>]
[-Unique]
[-CaseInsensitive]
[-Wait]
[-Index <Int32[]>]
[<CommonParameters>]
Select-Object
[-InputObject <PSObject>]
[-Unique]
[-CaseInsensitive]
[-SkipIndex <Int32[]>]
[<CommonParameters>]
描述
Select-Object
cmdlet 选择一个对象或一组对象的指定属性。它还可以选择唯一的对象、指定数量的对象或数组中指定位置的对象。
要从集合中选择对象,请使用第一个、最后、唯一、跳过和索引参数。要选择对象属性,请使用属性参数。当您选择属性时,Select-Object
返回仅具有指定属性的新对象。
从 Windows PowerShell 3.0 开始,Select-Object
包含一项优化功能,可防止命令创建和处理未使用的对象。
当您在命令管道中将 Select-Object
与 First 或 Index 参数一起使用时,PowerShell 会在以下情况下立即停止生成对象的命令:已达到选定的对象数量。要关闭此优化行为,请使用等待参数。
示例
示例 1:按属性选择对象
此示例创建的对象具有流程对象的名称、ID 和工作集(WS) 属性。
Get-Process | Select-Object -Property ProcessName, Id, WS
示例 2:按属性选择对象并格式化结果
此示例获取有关计算机上进程使用的模块的信息。它使用 Get-Process
cmdlet 来获取计算机上的进程。
它使用 Select-Object
cmdlet 输出每个 [System.Diagnostics.ProcessModule]
实例的数组,这些实例包含在每个 Modules 属性中。 Get-Process
输出的System.Diagnostics.Process 实例。
Select-Object
cmdlet 的 Property 参数选择进程名称。这会将 ProcessName
NoteProperty 添加到每个 [System.Diagnostics.ProcessModule]
实例,并用当前进程的 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,后者选择前 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]
实例的数组。这些实例符合输出视图的标准格式规则。对于任何扩展属性都是如此。如果输出的对象具有特定的标准格式,则扩展的属性可能不可见。
# 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
支持选择 hashtable 输入的键作为属性。以下示例选择输入哈希表上的 weight
和 name
键并显示输出。
@{ name = 'a' ; weight = 7 } | Select-Object -Property name, weight
name weight
---- ------
a 7
示例 14:ExpandProperty 更改原始对象
此示例演示了使用 ExpandProperty 参数的副作用。当您使用 ExpandProperty 时,Select-Object
将选定的属性作为 NoteProperty 成员添加到原始对象中。
PS> $object = [PSCustomObject]@{
name = 'USA'
children = [PSCustomObject]@{
name = 'Southwest'
}
}
PS> $object
name children
---- --------
USA @{name=Southwest}
# Use the ExpandProperty parameter to expand the children property
PS> $object | Select-Object @{n="country"; e={$_.name}} -ExpandProperty children
name country
---- -------
Southwest USA
# The original object has been altered
PS> $object
name children
---- --------
USA @{name=Southwest; country=USA}
正如您所看到的,使用 ExpandProperty 参数后,country 属性已添加到 children 对象中。
示例 15:创建具有扩展属性的新对象而不更改输入对象
您可以通过创建新对象并从输入对象复制属性来避免使用 ExpandProperty 参数的副作用。
PS> $object = [PSCustomObject]@{
name = 'USA'
children = [PSCustomObject]@{
name = 'Southwest'
}
}
PS> $object
name children
---- --------
USA @{name=Southwest}
# Create a new object with selected properties
PS> $newobject = [PSCustomObject]@{
country = $object.name
children = $object.children
}
PS> $newobject
country children
------- --------
USA @{name=Southwest}
# $object remains unchanged
PS> $object
name children
---- --------
USA @{name=Southwest}
参数
-CaseInsensitive
默认情况下,当您使用 Unique 参数时,cmdlet 使用区分大小写的比较。使用此参数时,cmdlet 将使用不区分大小写的比较。
此参数是在 PowerShell 7.4 中添加的。
类型 :SwitchParameter
位置:命名
默认值:False
必需的:False
接受管道输入:False
接受通配符:False
-ExcludeProperty
指定此 cmdlet 从操作中排除的属性。允许使用通配符。
从 PowerShell 6 开始,不再需要包含 Property 参数才能使 ExcludeProperty 发挥作用。
类型 :String[]
位置:命名
默认值:None
必需的:False
接受管道输入:False
接受通配符:True
-ExpandProperty
指定要选择的属性,并指示应尝试扩展该属性。如果输入对象管道没有指定的属性,Select-Object
将返回错误。
- 如果指定的属性是数组,则该数组的每个值都包含在输出中。
- 如果指定的属性是一个对象,则为每个 InputObject 扩展对象属性
无论哪种情况,输出对象的类型都与扩展属性的类型匹配。
笔记
使用ExpandProperty时会产生副作用。 Select-Object
将选定的属性作为 NoteProperty 成员添加到原始对象。
如果指定了 Property 参数,Select-Object
会尝试将每个选定的属性作为 NoteProperty 添加到每个输出对象。
警告
如果您收到一条错误消息,指出由于具有该名称的属性已存在而无法处理属性,请考虑以下事项。请注意,使用 ExpandProperty 时,Select-Object
无法替换现有属性。这意味着:
- 如果展开的对象具有同名的属性,该命令将返回错误。
- 如果 Selected 对象具有与 Expanded 对象的属性同名的属性,则该命令将返回错误。
String
位置:命名
默认值:None
必需的:False
接受管道输入:False
接受通配符:False
-First
指定从输入对象数组的开头选择的对象数。
类型 :整数32
位置:命名
默认值:None
必需的:False
接受管道输入:False
接受通配符:False
-Index
根据索引值从数组中选择对象。在以逗号分隔的列表中输入索引。数组中的索引从 0 开始,其中 0 表示第一个值,(n-1) 表示最后一个值。
类型 :Int32[]
位置:命名
默认值:None
必需的:False
接受管道输入:False
接受通配符:False
-InputObject
指定要通过管道发送到 cmdlet 的对象。此参数使您能够将对象通过管道传输到Select-Object
。
当您将对象传递给 InputObject 参数时,Select-Object
会将 InputObject 视为单个对象,而不是使用管道,即使价值是一个集合。建议您在将集合传递给 Select-Object
时使用管道。
PS对象
位置:命名
默认值:None
必需的:False
接受管道输入:True
接受通配符:False
-Last
指定要从输入对象数组末尾选择的对象数。
类型 :整数32
位置:命名
默认值:None
必需的:False
接受管道输入:False
接受通配符:False
-Property
指定要选择的属性。这些属性作为 NoteProperty 成员添加到输出对象中。允许使用通配符。如果输入对象没有指定的属性,则新的 NoteProperty 值将设置为 $null
。
Property 参数的值可以是新的计算属性。要创建计算属性,请使用哈希表。
有效键是:
- 名称(或标签)-
<string>
- 表达式 -
<string>
或<script; block>
有关详细信息,请参阅 about_Calculated_Properties。
类型 :Object[]
位置:0
默认值:None
必需的:False
接受管道输入:False
接受通配符:True
-Skip
跳过(不选择)指定数量的项目。默认情况下,Skip 参数从对象集合的开头开始计数。如果该命令使用Last参数,则从集合末尾开始计数。
与从 0 开始计数的 Index 参数不同,Skip 参数从 1 开始计数。
从 PowerShell 7.4 开始,您可以将 Skip 参数与 SkipLast 参数结合使用来跳过集合开头和结尾的项目。
类型 :整数32
位置:命名
默认值:None
必需的:False
接受管道输入:False
接受通配符:False
-SkipIndex
根据索引值从数组中跳过(不选择)对象。在以逗号分隔的列表中输入索引。数组中的索引从 0 开始,其中 0 表示第一个值,(n-1) 表示最后一个值。
此参数是在 Windows PowerShell 6.0 中引入的。
类型 :Int32[]
位置:命名
默认值:None
必需的:False
接受管道输入:False
接受通配符:False
-SkipLast
从列表或数组末尾跳过(不选择)指定数量的项目。其工作方式与将 Skip 与 Last 参数一起使用的方式相同。
与从 0 开始计数的 Index 参数不同,SkipLast 参数从 1 开始计数。
从 PowerShell 7.4 开始,您可以将 Skip 参数与 SkipLast 参数结合使用来跳过集合开头和结尾的项目。
类型 :整数32
位置:命名
默认值:None
必需的:False
接受管道输入:False
接受通配符:False
-Unique
指定如果输入对象的子集具有相同的属性和值,则应仅选择子集中的一个成员。
唯一选择应用其他过滤参数之后的值。
该参数区分大小写。因此,仅字符大小写不同的字符串被认为是唯一的。添加 CaseInsensitive 参数以执行不区分大小写的比较。
类型 :SwitchParameter
位置:命名
默认值:None
必需的:False
接受管道输入:False
接受通配符:False
-Wait
指示 cmdlet 关闭优化。 PowerShell 按照命令在命令管道中出现的顺序运行命令,并让它们生成所有对象。默认情况下,如果在命令管道中包含带有 First 或 Index 参数的 Select-Object
命令,PowerShell 会停止生成一旦生成了选定数量的对象。
此参数是在 Windows PowerShell 3.0 中引入的。
类型 :SwitchParameter
位置:命名
默认值:None
必需的:False
接受管道输入:False
接受通配符:False
输入
PSObject
您可以通过管道将对象传递到此 cmdlet。
输出
PSObject
此 cmdlet 返回仅具有选定属性的输入对象。
笔记
PowerShell 包含以下 Select-Object
别名:
所有平台:
select
Select-Object
的优化功能仅适用于在处理对象时将对象写入管道的命令。它对缓冲已处理对象并将其写入集合的命令没有影响。立即写入对象是 cmdlet 设计的最佳实践。有关详细信息,请参阅强烈鼓励开发指南中的将单个记录写入管道。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag