PowerShell是一款强大的数据管理工具,通常一次性提供过多信息。正如您所知,过多的信息可能令人不知所措,难以解析。不过,不用担心。PowerShell Select-Object
命令将派上用场。
在本教程中,您将学习使用 Select-Object
命令的基础知识,以多种方式缩小或筛选结果。
继续阅读,开始轻松进行数据管理!
先决条件
本教程包含实际演示。要跟着做,请确保您的系统已安装了 PowerShell。本教程使用安装了PowerShell 7的Windows 10,但任何现代版本也应该适用。
什么是 PowerShell Select-Object 命令?
Select-Object
命令通过允许您从对象或数据集中选择特定属性来简化数据管理。同时,您可以重命名属性或基于现有属性创建计算属性。
Select-Object
的基本语法如下:
Parameter | Function |
---|---|
-InputObject |
Specifies the object or data set you want to work with, which can be an object, an array of objects, or an output of another cmdlet. |
Property |
Specifies the property or properties to select from the InputObject parameter. You can specify multiple properties separated by commas. |
Optional Parameters |
Allows you to refine your selection, such as selecting a certain number of objects or skipping objects. |
通过属性选择对象
由于需要更多的简短介绍来满足您学习Select-Object
cmdlet的愿望,为什么不从它的一个常见用例开始呢?通过使用Select-Object
cmdlet从对象中选择特定属性来开始本教程。
假设您有一个正在计算机上运行的进程列表,但您只想看到每个进程的名称。将Name
属性指定给Select-Object
cmdlet将会解决问题。
打开PowerShell并运行以下Get-Process
命令以仅通过Name
选择并打印所有进程的列表。

除了运行进程外,
Select-Object
cmdlet还允许您处理CSV文件。假设您有一个包含许多列但只需要其中几列的CSV文件。在这种情况下,让Select-Object
cmdlet仅选择相关列,以便您可以操作和分析数据。
现在运行以下命令以选择多个属性(Select-Object
):Name
和 CPU
(用逗号分隔)。这个特性在处理大数据集时很有帮助,你只需要每个对象的一些属性。
此外,该命令还会按照 CPU
属性作为参考,以 -Descending
顺序对对象列表进行排序(Sort-Object
)。
下面,你可以看到列出的进程,从消耗资源最多的开始,即谷歌浏览器(如果已安装)。

创建计算属性
在寻找更适合你需求的属性时,考虑创建计算属性。为什么?计算属性允许你操作和转换数据,组合现有属性,执行数学运算,或以特定方式格式化数据。
要创建计算属性,你必须指定一个新属性名称和一个定义如何计算属性值的表达式:
运行以下命令执行以下操作:
- 检索正在运行的进程列表(
Get-Process
),仅选择(Select-Object
)Name
和CPU
属性。 - 创建一个新的计算属性,其
Name
为Memory (MB)
,用于计算每个进程的内存使用量(以兆字节为单位)。内存使用量是使用一个Expression
计算的,该表达式将WorkingSet
属性除以1MB
。在创建计算属性时,任何有效的PowerShell表达式都可以使用。 - 按照计算得到的
Memory (MB)
属性的值,以-Descending
顺序打印所有检索到的正在运行的进程。

排除指定的属性
在实际应用中,Select-Object
命令的结果可能包含敏感信息,例如用户名和密码。如何避免这种风险?
为了防止在输出中显示敏感数据,可以附加-ExcludeProperty
参数以排除指定属性。
运行以下命令执行以下任务:
- 递归地(
-Recurse
)检索C:\\
目录中所有文件和文件夹的列表(Get-ChildItem
)。
- 系统: 通过管道将输出传递到
Select-Object
命令,以选择Name
、Length
和LastWriteTime
属性。 - 从输出中排除 (
-ExcludeProperty
)FullName
属性。这样做可以防止在输出中显示完整路径,其中可能包含机密信息。

跳过第一个或最后一个对象的数量
在处理大型数据集时,查找所需的数据就像在煤矿中搜寻钻石一样困难。但为什么要浪费时间筛选与主题无关的数据呢?
在 PowerShell 中,Select-Object
命令提供两个参数,允许分别排除输出中的前几个 (-Skip
) 和最后几个 (-SkipLast
) 对象。
要了解如何跳过输出中的多个对象,请执行以下操作:
运行以下命令以获取所有运行中的进程 (Get-Process
),但跳过前 100
个返回的对象。
请注意,跳过的对象数量基于整数值(正整数和没有小数点的整数),在此情况下为
100
。

现在,运行以下命令以获取工作目录内容的列表 (Get-ChildItem
),但跳过最后 100
个返回的对象。

选择第一个或最后一个对象的数量
除了跳过对象的第一个和最后一个数字外,您可能还希望选择对象的第一个和最后一个数字。Select-Object
命令支持使用 First
和 Last
参数来实现此功能,让您跳过其他所有内容以节省时间和资源。
运行以下命令以获取所有进程,但仅选择 (Select-Object
) 返回的前 -First 10
个对象。

现在,运行下面的命令以获取工作目录 (Get-ChildItem
) 的所有内容,但仅选择 (Select-Object
) 返回的最后 -Last 10
个对象。

仅选择唯一对象
在处理更大的数据集时,您可能会遇到您希望从输出中排除的重复值,这是很常见的。但是,Select-Object
命令的好处在于,您不必手动排除重复值。
添加 -Unique
参数允许您仅从输出中选择唯一对象,简化您的分析并提高结果的准确性。
运行以下命令以选择 (Select-Object
) 并返回 -First 2
个对象。
下面,您可以看到返回的两个对象,而不管另一个是否为重复值。

最后,运行以下命令,仅返回所选 -First 2
对象中的一个 -Unique
值。
这次,你可以看到从前两个对象中仅返回一个,因为另一个只是重复的值。正如你所意识到的,这个输出证明了-Unique
参数对于快速丢弃数据中的任何重复对象非常方便。

结论
PowerShell往往会产生大量信息。但在本教程中,你学会了如何使用PowerShell Select-Object
命令来简化你的数据,只看到所需的信息。
你已经看到了不同参数如何允许你选择和排除数据,尤其是从输出中排除重复值。通过Select-Object
命令,管理大量数据不必是一项艰巨的任务。
在这一点上,你可以快速调整你的结果,使其更适合分析和故障排除。但为什么不学习如何格式化你的计算属性,以提高可读性和可用性呢?
Source:
https://adamtheautomator.com/powershell-select-object/