[玩转系统] 如何在 PowerShell 中使用 Select-Object Cmdlet?
作者:精品下载站 日期:2024-12-14 21:31:43 浏览:13 分类:玩电脑
如何在 PowerShell 中使用 Select-Object Cmdlet?
作为 PowerShell 用户,我确信您已经遇到过 Select-Object
cmdlet,它允许您在 PowerShell 脚本中选择和操作特定对象和属性。使用 Select-Object,您可以轻松地从一组数据中过滤和选择特定信息。在本文中,我将带您了解 Select-Object 的基础知识,然后向您展示使用此 cmdlet 的不同方式,并帮助您掌握这个强大的 cmdlet。
了解 PowerShell 中的选择对象
在深入了解 Select-Object 的细节之前,有必要了解 PowerShell 中对象过滤的概念。在 PowerShell 中,对象表示为具有属性和值的结构化数据。在处理对象集合时,常常需要根据一定的条件过滤掉特定的对象。对象过滤允许您从较大的数据集中仅提取所需的信息,从而更轻松地使用和处理。
Select-Object 是一个多功能 cmdlet,可以通过多种方式使用。它通常用于在 PowerShell 中过滤数据,但也可用于创建自定义对象并根据特定条件(例如数字或字符串值)过滤对象。关于 Select-Object 需要了解的最重要的事情之一是它是一个管道 cmdlet。这意味着它从前一个 cmdlet 获取输入,并将输出传递到管道中的下一个 cmdlet。
选择对象语法和参数
Select-Object 的语法很简单,一旦了解基本参数就很容易使用。通过键入 Select-Object 并后跟要使用的参数来使用 cmdlet。
Select-Object的基本语法如下:
Select-Object [-Property <Object[]>] [-InputObject <PSObject[]>] [-ExcludeProperty <Object[]>] [-Unique] [-First <Int32>] [-Skip <Int32>] [-Last <Int32>] [-Index <Int32[]>] [-ExpandProperty <String[]>] [<CommonParameters>]
下表概述了 PowerShell 中 Select-Object cmdlet 的重要参数:
-Property
指定要选择的属性。这些可以是属性名称或使用哈希表计算的属性。
-ExcludeProperty
指定应从结果对象中排除的属性。
-ExpandProperty
展开指定的属性,显示其各个属性,就像它们位于主对象上一样。对于本身包含对象的属性很有用。
-Unique
仅返回数组中唯一的对象。对于删除重复项很有用。
-InputObject
-InputObject
参数允许 Select-Object
直接处理对象,而不是通过管道接收它们。
-Last
选择最后指定数量的对象。例如,Select-Object -Last 5
将从输入中获取最后 5 个对象。
-First
选择第一个指定数量的对象。例如,-First 5
将从输入中获取前 5 个对象。
-Skip
在选择剩余对象之前跳过指定数量的对象。
-SkipLast
跳过数组末尾指定数量的对象。
与 Select-Object 一起使用的最常见参数是 -Property、-InputObject 和 -ExpandProperty。这些参数允许您从对象中选择特定属性、根据特定条件过滤对象以及展开包含嵌套对象的属性。
PowerShell Select-Object cmdlet:基本用法
Select-Object 允许您过滤和选择对象的特定属性。这意味着您可以仅检索所需的数据,而忽略其余数据,这在处理大型数据集时非常有用。
Select-Object 的基本用法很简单。运行返回对象或对象数组的命令后,您可以将该对象通过管道传输到 Select-Object 并指定要查看的属性。例如,如果您只想查看目录中所有文件的完整路径,可以运行以下命令:
Get-ChildItem | Select-Object FullName
这将返回目录中所有文件和文件夹路径的列表,但仅显示每个项目的路径。
使用 Select-Object 选择多个属性
Select-Object
最常见的用例之一是从一个对象中选择多个属性。这是使用 -Property
参数并用逗号分隔属性名称来完成的。例如,让我们考虑“Get-Process”cmdlet,它使用一堆属性检索所有正在运行的进程。我们只对每个进程的名称、CPU 和 ID 感兴趣,而不是查看所有正在运行的进程的每个细节(由 Get-Process 提供)。因此,我们可以使用以下命令仅选择特定属性:
Get-Process | Select-Object Name, CPU, ID
在此示例中,Get-Process cmdlet 用于检索所有进程。然后,此 cmdlet 的输出通过管道传输到 Select-Object,后者仅从对象集中选择 Name、CPU 和 ID 属性。
使用 Select-Object 表达式添加计算属性
除了选择现有属性之外,您还可以使用 Select-Object 将计算属性添加到对象。这是使用表达式完成的。表达式用于对对象内的数据执行计算和转换。 Select-Object 表达式哈希表必须包含两个键:名称和表达式,其中为表达式键分配一个用于计算属性值的脚本块。您还可以使用简写“E”表示“表达式”,使用简写“N”表示“名称”。
PowerShell 中的表达式用大括号括起来,可以包括算术运算、逻辑比较和字符串操作。例如,您可以使用以下命令计算文件夹中每个文件的大小:
Get-ChildItem -Path "C:\Temp" -File | Select-Object Name, @{Name='SizeInKB'; Expression={$_.Length / 1KB -as [int]}}
在此示例中,@{Name='SizeInKB'; Expression={$_.Length/1KB -as [int]}} 表达式用于创建名为 SizeInKB 的新属性。该属性的计算方法是将长度除以 KB。除了计算之外,您还可以使用表达式来重命名对象的属性。
这是另一个示例:假设您想为每个服务的状态添加友好的注释:
Get-Service | Select-Object DisplayName, Status, @{Name='Comments'; Expression={if ($_.Status -eq 'Running') {'All good!'} else {'Needs attention.'}}}
该表达式检查服务的状态并提供相应的注释。
您还可以将选择对象表达式与格式运算符结合使用。例如,您需要查看每个存储设备的驱动器类型、可用空间和总大小。
#Get All Drives
$drives = Get-CimInstance -ClassName Win32_LogicalDisk
#Get Free space and Total size
$drives | Select-Object DeviceID, DriveType, @{Name='FreeSpaceGB'; Expression={"{0:N2}" -f ($_.FreeSpace/1GB)}}, @{Name='TotalSizeGB'; Expression={"{0:N2}" -f ($_.Size/1GB)}} | Format-List
通过利用带有 Select-Object
的表达式,您可以即时修改选定的属性、执行计算,甚至可以根据现有属性创建新的计算属性。
选择对象与位置对象
PowerShell 中另一个重要的 cmdlet 是 Where-Object
,它用于根据特定条件过滤对象。 Where-Object
通常与 Select-Object
结合使用,以创建更复杂的数据过滤和操作。
例如,如果您需要检查所有处于“已停止”状态的服务。 Select-Object
可以帮助简化这一过程,而不是浏览大量不相关的数据:
Get-Service | Where-Object { $_.Status -eq 'Stopped' } | Select-Object DisplayName, Status
在此示例中,Where-Object cmdlet 用于根据服务状态筛选对象。然后,此 cmdlet 的输出通过管道传送到 Select-Object,后者仅从对象中选择 DisplayName 和 Status 属性。
当一起使用时,Select-Object
和 Where-Object
可用于创建强大的数据操作脚本,从而节省时间并提高效率。
使用“First”和“Last”参数限制结果
您可以使用 -First 和 -Last 参数限制输出结果并控制输出对象的数量。例如,要获取目录中前 10 个最大的文件,请使用以下命令:
Get-ChildItem -Path "C:\Temp" | Sort-Object Length -Descending | Select-Object -First 10
或者,您可以使用多个 select-object cmdlet 来获取占用更多 CPU 的前 5 个进程:
Get-Process | Select-Object Name, CPU, WorkingSet | Sort-Object -Descending CPU | Select-Object -First 5
将“ExpandProperty”与 Select-Object 一起使用
有时,对象可能包含您想要选择或操作的嵌套属性。这可以使用 -ExpandProperty 参数来完成。例如,如果您有一个包含嵌套属性的对象,并且您只想选择该嵌套属性,则可以使用 ExpandProperty 参数。考虑以下示例:当您使用 Get-Acl 检索文件或目录的访问控制列表 (ACL) 时,您会注意到 Access 属性包含多个访问控制条目 (ACE)。如果您想单独查看这些 ACE:
$FileACL = Get-Acl -Path "C:\Temp\AppLog.txt"
$FileACL | Select-Object -ExpandProperty Access
在此示例中,输出将列出所有 ACE,显示有关每个条目的身份、权限和其他相关属性的详细信息。
选择具有“唯一”参数的对象来过滤重复项
除了基本的过滤功能之外,Select-Object 还提供了增强对象过滤的高级技术。您可以使用 -Unique
参数从结果集中删除重复的对象,确保只返回不同的对象。让我们考虑下面带有数组变量的示例:
$numbers = 1,2,2,3,3,3,4,5
$numbers | Select-Object -Unique
这将输出:1、2、3、4、5。
select-object中的skip参数
使用 -Skip
参数可以从数据集的开头跳过一定数量的对象。当您想在序列开头省略一定数量的对象时,它特别有用。例子:
Get-Process | Select-Object -Skip 5 -First 5
您还可以将 -Skip 参数与 -First 等其他参数结合起来,以创建更受控制的选择。例如,如果您想跳过前 5 个数字,然后选择接下来的 3 个数字:
$numbers = 1..10
$numbers | Select-Object -Skip 5 -First 3
输出 :
6
7
8
选择对象格式化选项:格式表和格式列表
Select-Object 还可以与其他格式化 cmdlet 一起使用来控制数据的输出格式。与 Select-Object 一起使用的最常见的格式化 cmdlet 是 Format-Table、Format-List 和 Format-Custom。
Format-Table 用于以表格格式显示数据。例如,如果您想获取每个驱动器的已用空间、可用空间和总空间,并以友好的表格格式显示结果:
#Get all Drives
$driveInfo = Get-Volume
#Select specific properties from the objects
$refinedDriveInfo = $driveInfo | Select-Object DriveLetter, FileSystemLabel, FileSystemType, @{Name='TotalSizeGB'; Expression={"{0:N2}" -f ($_.Size / 1GB)}}, @{Name='FreeSpaceGB'; Expression={"{0:N2}" -f ($_.SizeRemaining / 1GB)}}
#Format the data in Table format
$refinedDriveInfo | Format-Table -AutoSize
此输出为您提供了磁盘空间的清晰直观的视图,使您可以更轻松地关注存储状态。
DriveLetter FileSystemLabel FileSystemType TotalSizeGB FreeSpaceGB
----------- --------------- -------------- ----------- -----------
C System NTFS 237.91 175.56
D Data NTFS 931.41 452.03
E Backup NTFS 1862.89 987.64
... ... ... ... ...
Format-List用于以列表格式显示数据。假设您想要详细查看计算机上所有正在运行的服务,但您只关心它们的名称、显示名称、当前状态和启动模式。
Get-Service | Select-Object Name, DisplayName, Status, StartType | Format-List
您将获得详细的服务列表,以简洁的格式显示提到的属性。
将选择对象与排序对象和组对象组合
Select-Object 还可以与其他 PowerShell cmdlet 结合使用以执行更复杂的操作。与 Select-Object 一起使用的最常见 cmdlet 是 Sort-Object 和 Group-Object。
Sort-Object cmdlet 用于根据特定属性对数据进行排序。例如,您可能想从目录中获取所有最近更改的文件;使用以下命令:
Get-ChildItem -Path "C:\Temp" -File |
Sort-Object LastWriteTime -Descending |
Select-Object -First 10 Name, LastWriteTime
Group-Object 用于根据特定属性对数据进行分组。例如,假设您正在分析具有多种文件类型的目录,并且您想知道每种文件类型的计数(按计数排序)。
Get-ChildItem -Path "C:\Temp" -File |
Group-Object -Property Extension |
Sort-Object -Property Count -Descending |
Select-Object Name, Count
Select-Object cmdlet 常见场景
为了帮助您开始使用 Select-Object,以下是一些可以使用它的常见场景的示例:
- 从数据集中选择特定属性。过滤对象属性是 Select-Object 最常用的用法,因为它缩小了输出中显示的属性范围。
- 限制结果数:要获取输出的子集,请使用 -First 和 -Last 参数。
- 跳过结果:您可以使用 -Skip 参数跳过一组初始结果。
- 创建计算属性:您可以使用哈希表创建自定义属性,这允许您以新的或更易读的方式呈现数据。
- 要从列表中删除重复项,可以使用 -Unique 参数。
- 扩展嵌套属性:如果一个对象的属性本身包含其他对象或属性,则可以使用 -ExpandProperty 参数“展平”此属性。
在 PowerShell 中使用 Select-Object 的最佳实践
要在 PowerShell 脚本中有效使用 Select-Object
,遵循一些最佳实践非常重要:
- 始终在管道中尽早使用
Select-Object
- 建议仅选择必要的属性,以最大限度地减少处理的数据量。
- 处理复杂对象时,请使用
-ExpandProperty
。建议在处理嵌套属性时使用-ExpandProperty
参数以轻松访问所需的值。 - 除非必要,否则避免使用通配符。
- 谨慎使用表达式并优化计算可以显着提高脚本的性能。
- 尽可能使用
-First
处理较小的数据集
包起来
Select-Object 是 PowerShell 中功能强大的 cmdlet,允许您过滤和操作脚本中的数据。通过了解如何有效地使用 Select-Object,您可以显着增强 PowerShell 脚本编写能力。该 cmdlet 的强大之处在于其灵活性,使您能够准确控制要处理的数据。通过本文中概述的提示和技术,您将逐渐掌握 Select-Object 并成为更高效的 PowerShell 用户。
猜你还喜欢
- 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