PowerShell选择对象简化:初学者指南

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 [-InputObject] [Property] [Optional Parameters]

通过属性选择对象

由于需要更多的简短介绍来满足您学习Select-Object cmdlet的愿望,为什么不从它的一个常见用例开始呢?通过使用Select-Object cmdlet从对象中选择特定属性来开始本教程。

假设您有一个正在计算机上运行的进程列表,但您只想看到每个进程的名称。将Name属性指定给Select-Object cmdlet将会解决问题。

打开PowerShell并运行以下Get-Process命令以仅通过Name选择并打印所有进程的列表。

Get-Process | Select-Object Name
Selecting objects by property

除了运行进程外,Select-Object cmdlet还允许您处理CSV文件。假设您有一个包含许多列但只需要其中几列的CSV文件。在这种情况下,让Select-Object cmdlet仅选择相关列,以便您可以操作和分析数据。

现在运行以下命令以选择多个属性(Select-Object):NameCPU(用逗号分隔)。这个特性在处理大数据集时很有帮助,你只需要每个对象的一些属性。

此外,该命令还会按照 CPU 属性作为参考,以 -Descending 顺序对对象列表进行排序(Sort-Object)。

Get-Process | Select-Object Name, CPU | Sort-Object -Descending CPU

下面,你可以看到列出的进程,从消耗资源最多的开始,即谷歌浏览器(如果已安装)。

Selecting multiple properties

创建计算属性

在寻找更适合你需求的属性时,考虑创建计算属性。为什么?计算属性允许你操作和转换数据,组合现有属性,执行数学运算,或以特定方式格式化数据。

要创建计算属性,你必须指定一个新属性名称和一个定义如何计算属性值的表达式:

运行以下命令执行以下操作:

  • 检索正在运行的进程列表(Get-Process),仅选择(Select-ObjectNameCPU 属性。
  • 创建一个新的计算属性,其NameMemory (MB),用于计算每个进程的内存使用量(以兆字节为单位)。内存使用量是使用一个Expression计算的,该表达式将WorkingSet属性除以1MB。在创建计算属性时,任何有效的PowerShell表达式都可以使用。
  • 按照计算得到的Memory (MB)属性的值,以-Descending顺序打印所有检索到的正在运行的进程。
Get-Process | Select-Object Name, CPU, @{Name="Memory (MB)";Expression={$_.WorkingSet/1MB}} | Sort-Object -Descending "Memory (MB)"
Creating a calculated property

排除指定的属性

在实际应用中,Select-Object命令的结果可能包含敏感信息,例如用户名和密码。如何避免这种风险?

为了防止在输出中显示敏感数据,可以附加-ExcludeProperty参数以排除指定属性。

运行以下命令执行以下任务:

  • 递归地(-Recurse)检索C:\\目录中所有文件和文件夹的列表(Get-ChildItem)。
  • 系统: 通过管道将输出传递到 Select-Object 命令,以选择 NameLengthLastWriteTime 属性。
  • 从输出中排除 (-ExcludeProperty) FullName 属性。这样做可以防止在输出中显示完整路径,其中可能包含机密信息。
Get-ChildItem -Path C:\ -Recurse | Select-Object Name, Length, LastWriteTime -ExcludeProperty FullName
Excluding a specified property

跳过第一个或最后一个对象的数量

在处理大型数据集时,查找所需的数据就像在煤矿中搜寻钻石一样困难。但为什么要浪费时间筛选与主题无关的数据呢?

在 PowerShell 中,Select-Object 命令提供两个参数,允许分别排除输出中的前几个 (-Skip) 和最后几个 (-SkipLast) 对象。

要了解如何跳过输出中的多个对象,请执行以下操作:

运行以下命令以获取所有运行中的进程 (Get-Process),但跳过前 100 个返回的对象。

请注意,跳过的对象数量基于整数值(正整数和没有小数点的整数),在此情况下为 100

Get-Process | Select-Object -Skip 100
Skipping the first 100 objects

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

Get-ChildItem | Select-Object -SkipLast 100
Skipping the last 100 objects

选择第一个或最后一个对象的数量

除了跳过对象的第一个和最后一个数字外,您可能还希望选择对象的第一个和最后一个数字。Select-Object 命令支持使用 FirstLast 参数来实现此功能,让您跳过其他所有内容以节省时间和资源。

运行以下命令以获取所有进程,但仅选择 (Select-Object) 返回的前 -First 10 个对象。

Get-Process | Select-Object -First 10
Selecting the first 10 objects returned

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

Get-ChildItem | Select-Object -Last 10
Selecting the last 10 objects returned

仅选择唯一对象

在处理更大的数据集时,您可能会遇到您希望从输出中排除的重复值,这是很常见的。但是,Select-Object 命令的好处在于,您不必手动排除重复值。

添加 -Unique 参数允许您仅从输出中选择唯一对象,简化您的分析并提高结果的准确性。

运行以下命令以选择 (Select-Object) 并返回 -First 2 个对象。

"1","1","2","3" | Select-Object -First 2

下面,您可以看到返回的两个对象,而不管另一个是否为重复值。

Selecting and returning objects with duplicate values

最后,运行以下命令,仅返回所选 -First 2 对象中的一个 -Unique 值。

"1","1","2","3" | Select-Object -First 2 -Unique

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

Selecting unique objects exclusively

结论

PowerShell往往会产生大量信息。但在本教程中,你学会了如何使用PowerShell Select-Object命令来简化你的数据,只看到所需的信息。

你已经看到了不同参数如何允许你选择和排除数据,尤其是从输出中排除重复值。通过Select-Object命令,管理大量数据不必是一项艰巨的任务。

在这一点上,你可以快速调整你的结果,使其更适合分析和故障排除。但为什么不学习如何格式化你的计算属性,以提高可读性和可用性呢?

Source:
https://adamtheautomator.com/powershell-select-object/