当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何使用 PowerShell 展开属性选择对象

作者:精品下载站 日期:2024-12-14 13:10:35 浏览:16 分类:玩电脑

如何使用 PowerShell 展开属性选择对象


PowerShell Select-Object cmdlet 使您能够从输入对象组中无缝挑选对象和属性。但有时你只需要了解更多。 ExpandProperty 是 Select-Object 的开关,可扩展有关特定属性的详细信息。

在此示例教程中探索 PowerShell 扩展属性 (-ExpandProperty) 开关的强大功能。

先决条件

本教程将是一个实践演示。如果您想继续操作,您只需要一台装有 PowerShell 5.1 及更高版本的 Windows 计算机。本文使用带有 PowerShell 5.1 的 Windows 10 计算机。

使用 PowerShell 扩展属性提取属性对象值

登录到您的 Windows 计算机并启动 PowerShell 终端。在本部分中,您将熟悉 Select-Object cmdlet 及其 ExpandProperty 开关。

1. 运行 Get-Service cmdlet 以获取系统上所有服务的列表。将输出通过管道传输到 Select-Object cmdlet 以仅选择并显示每个服务对象的名称属性,如下所示。

Get-Service | Select-Object -Property Name

您现在应该看到一列对象,代表系统上的服务名称列表,如下面的截断截图所示。

[玩转系统] 如何使用 PowerShell 展开属性选择对象

2. 在上一个管道的末尾运行 Get-Member cmdlet,以确认 select-object 返回的对象类型,如下所示。了解对象的类型有助于编写函数或 cmdlet 来扩展管道。

Get-Service | Select-Object -Property Name | Get-Member

请参阅下面的屏幕截图,您会注意到,虽然 -Property 开关输出的内容看起来是字符串列表,但这些是 System.ServiceProcess.ServiceController 对象的选定列表。

[玩转系统] 如何使用 PowerShell 展开属性选择对象

3. 将 Get-Members cmdlet 替换为 mkdir,以自动为每个服务创建文件夹。 -first 5 开关限制要返回的对象数量。反过来, mkdir 函数只会根据管道中的对象创建五个文件夹。

Get-Service | Select-Object -Property Name -First 5 | mkdir

您应该看到类似于下面的屏幕截图的输出,表明尝试成功。

[玩转系统] 如何使用 PowerShell 展开属性选择对象

4. 通过将 mkdir 替换为 rmdir 来删除文件夹,如下面的代码片段所示。打开 -Verbose 开关以在终端中显示详细输出。

Get-Service | Select-Object -Property Name -First 5 | rmdir -Verbose

rmdir cmdlet 需要字符串,无法处理 ServiceController 对象的哈希表表示形式。您的尝试应该会失败并出现几个错误,如下面的屏幕截图所示。

[玩转系统] 如何使用 PowerShell 展开属性选择对象

5. 将 -Property 开关更改为 -ExpandProperty 开关,如以下代码片段所示。当您只需要一个字符串时,这样做可以让您以字符串形式获取属性值。

Get-Service | Select-Object -ExpandProperty Name -First 5 | rmdir -Verbose

与 rmdir 结合使用,您应该会看到自动删除文件夹的尝试成功且没有错误,如下面的屏幕截图所示。

[玩转系统] 如何使用 PowerShell 展开属性选择对象

创建一组具有特定属性的选定对象

要缩短各部分中的代码片段,请为计算机上的前 20 个服务创建一个变量,如下所示。

运行 Get-Service 命令,通过 Select-Object cmdlet 选择前 20 个对象,并将这些对象存储在名为 的变量中>$testServices。仅选择 NameStatusDependentServices 属性,如下所示。

$testServices = Get-Service | Select-Object -Property Name,Status,DependentServices -First 20

PowerShell 展开属性开关一次只能展开一个属性,而属性开关可以同时选择多个属性。

执行变量名$testServices,查看其内容的结构。

$testServices

您应该看到一个表格,其中显示了您入围的服务的属性,类似于下面的屏幕截图。

[玩转系统] 如何使用 PowerShell 展开属性选择对象

使用 PowerShell 扩展属性扩展集合属性

PowerShell 对象可以具有作为对象集合的属性,也称为集合属性。在本节中,您将学习如何使用 PowerShell 展开属性来展开集合属性以查看其成员的属性。

$testServices 变量执行 Select-Object cmdlet,并展开每个服务的 DependentServices 属性。

$testServices | Select-Object -ExpandProperty DependentServices

由于 DependentServices 是一个集合属性,因此输出是所有已填充集合中的服务列表,如下所示。请注意列表中的重复项,这是由于扩展的 DependentServices 的结果串联所致。

[玩转系统] 如何使用 PowerShell 展开属性选择对象

将属性与 PowerShell 扩展属性相结合以实现分类输出

现在您有了依赖服务的列表,但是您如何知道它们依赖于哪个服务呢?在本部分中,您将学习如何使用 -Property 开关对扩展属性进行分类。

运行以下命令按 NameDependentServices 属性进行分类。

$testServices | Select-Object -ExpandProperty DependentServices -Property Name

由于依赖服务已经具有 Name 属性,因此分类步骤失败,如下所示。

下面的错误告诉您初始服务列表(在 $testServices 中)的 Name 属性已与展开的 DependentServices 属性中的 Name 属性发生冲突。

[玩转系统] 如何使用 PowerShell 展开属性选择对象

一种解决方法是创建计算属性以重命名标识符属性,如下所示。

保存修改后的上一个命令输出,以将名为 Depends On 的计算属性指定为名为 $depServ 的变量中的标识符属性。取决于将包含 $testService 中每个服务的名称值。

属性名称 Depends on 是在本教程中任意选择的,可以是您选择的任何表达式。

$depServ = $testServices | Select-Object -ExpandProperty DependentServices -Property @{name="Depends On"; expr={$_.Name}}

通过Select-Object传递$depServ中的对象来选择依赖服务NameStatus取决于 属性。

$depServ | Select-Object -Property Name,Status,"Depends On"

您现在可以判断哪些服务依赖于 $testServices 中的服务,如下所示。

[玩转系统] 如何使用 PowerShell 展开属性选择对象

将格式列表与 PowerShell 扩展属性相结合以实现详细程度

PowerShell 可能会限制要显示的对象属性,尤其是在表格输出中,并且 -ExpandProperty 开关输出可能会遇到相同的情况。作为解决方法,您可以在列表中显示展开的属性。

运行下面的 Get-Process cmdlet 以检索 explorer 进程使用的所有模块。打开-ExpandProperty开关以显示模块的属性。

Get-Process explorer | select-object -ExpandProperty Modules

屏幕上的输出应类似于以下屏幕截图,自动截断为仅显示三个属性。

[玩转系统] 如何使用 PowerShell 展开属性选择对象

将对象通过管道传输到 Format-List cmdlet,以在更易于管理的列表中查看模块对象的所有值。

Get-Process explorer | select-object -ExpandProperty Modules | Format-List

如下所示,输出列出了所有属性及其值。您可以进一步将数据保存到文件或将其传递到另一个 cmdlet 进行进一步处理。

[玩转系统] 如何使用 PowerShell 展开属性选择对象

结论

通过成功完成到目前为止,您已经了解了如何从 Select-Object cmdlet 的 PowerShell 扩展属性开关 (-ExpandProperty) 中受益。 PowerShell 包含许多有用的 cmdlet,可用于许多常见任务。您可以通过学习如何使用 PowerShell Cat 快速显示文件来扩充您的新知识。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯