[玩转系统] 如何使用 PowerShell 选择对象
作者:精品下载站 日期:2024-12-14 18:44:11 浏览:17 分类:玩电脑
如何使用 PowerShell 选择对象
使用 PowerShell 检索数据时,您通常只需要对象的几个属性。为此,我们可以使用 cmdlet Select-Object,它允许我们选择所需的数据。
大多数人不知道的是,Select-Object 的功能远不止选择您需要的属性。例如,我们可以选择前 x 或最后 x 属性、展开属性,甚至创建计算属性。
在本文中,我们将了解如何使用 Select-Object、不同的选择选项,并且我将向您展示几个示例。
PowerShell 选择对象
Select-Object cmdlet 始终通过管道传输到 PowerShell 中的另一个 cmdlet 后面。它允许您选择或修改管道中的对象的属性。然后,所选属性仅显示在结果中,或者可以使用 Export-CSV cmdlet 将其导出到 CSV 文件。
为了选择属性,我们有几个可以使用的选项:
-Property要选择的属性。使用逗号分隔列表选择多个
-ExcludeProperty从结果中排除属性。
-First从结果中选择前 x 个对象
-Last从结果中选择最后 x 个对象
-Skip跳过 x 数量的物体
-SkipLast跳过最后 x 条记录
-Index从结果中选择前 x 个对象
-SkipIndex从结果中跳过选定的对象。
-Unique选择独特的结果
让我们从基础知识开始,然后我们将深入了解 PowerShell Select-Object 的功能。要简单地从对象中选择几个属性,我们可以使用带有属性名称的逗号分隔列表:
Get-Process | Select-Object -Property Name, CPU
# You can also leave out the parameter -Property
Get-Process | Select-Object Name, CPU
我们并不总是需要使用属性的全名,在选择属性时也可以使用通配符。例如,如果我们想返回所有以 Size 结尾的属性,那么我们可以这样做:
Get-Process | Select-Object Name, CPU, *Size
排除属性
除了选择我们想要的属性之外,我们还可以使用参数 -ExcludeProperty
排除不需要的属性。就像选择属性一样,我们可以使用通配符来排除以特定字符串开头或结尾的所有属性。
例如,我们从给定路径获取所有项目,并希望排除以 PS 开头的属性和所有属性:
Get-ChildItem -Path c:\temp | Select-Object -ExcludeProperty Attributes, PS*
限制结果数量
然而,一个常见的问题是,您如何知道哪些属性可用?要获取所有可能的属性,我们可以将 Select-Object
的 -first
参数与通配符结合使用。通配符将返回所有属性,-first 1
确保只返回一个对象:
Get-Process | Select-Object * -First 1
参数 -first
和 -last
允许您从结果中选择第一个或最后 x 个对象。值得一提的是,您可以同时使用这两个参数,因此您可以从结果中选择前 3 个和最后 3 个对象:
Get-Process | Select-Object -First 3 -Last 3
跳过项目
除了选择第一个或最后 x 个项目之外,我们还可以使用参数 -skip
跳过多个项目。值得高兴的是,您可以将“skip”与“first”或“last”结合起来。假设我们要返回对象 11 到 15:
$numberArray = 1..20
$numberArray | Select-Object -Skip 10 -First 5
跳过总是从结果的开头开始,这是有道理的。但是如果您想跳过结果的最后 10 项怎么办?在这种情况下,您可以使用参数 -SkipLast
,它将跳过列表中的最后 x 个结果:
$numberArray = 1..20
$numberArray | Select-Object -SkipLast 10
通过索引选择特定结果
如果您知道要返回哪个特定对象,那么您还可以使用参数 -index
来选择它们。我不经常使用 -index,但一个很好的例子是当您读取文件的内容时。如果您知道需要文件中的哪一行,则可以使用 -index 来选择行。请记住,索引从 0 开始。
# Select the 3 row from the CSV file
Get-Content -Path c:\temp\example.csv | Select-Object -index 2
您还可以使用 -SkipIndex
从结果中跳过特定对象(或上例中的行)。
选择唯一
当您获取计算机上所有正在运行的进程时,您可能会看到某些进程在结果中多次出现,例如 Chrome(当然,如果您将其用作浏览器)。要获取所有唯一的进程,我们可以使用参数 -unique。
但是 -unique 将根据所有属性(而不仅仅是名称)来确定对象是否唯一。因此,要获取计算机上运行的所有唯一进程,我们首先需要选择一个属性(在本例中为名称),然后使用参数 unique:
Get-Process | Select-Object -Property Name -Unique
另一个很好的例子是当您想要获取 Active Directory 中使用的所有可能的职位名称时。为此,我们将获取所有具有属性标题的用户,仅选择标题,并从中提取唯一值:
Get-Aduser -Filter * -Properties title | Select Title -Unique
选择对象高级功能
PowerShell Select-Object cmdlet 还具有一些您确实应该了解的高级功能。这些功能基于哈希表,它允许我们重命名属性并创建计算属性。
哈希表的结构乍一看可能有点让人不知所措,所以在看几个例子之前,让我们先对其进行分解和解释。执行以下命令:
Get-Service | Select-Object @{Name="ServiceName"; Expression={$_.DisplayName}}
正如您所看到的,我们获得了所有服务,并将从中选择一个对象。我们来看看哈希表的各个部分的作用:
@{名称=“服务名称”; Expression={$_.DisplayName}}
- 这是基于哈希表的参数。它定义了一个名为“Servicename”的自定义属性,该属性出现在原始服务对象中。Name=”ServiceName” - 指定要添加到输出的新自定义属性
Expression={$_.DisplayName}
- 计算新自定义属性值的表达式。在本例中,我们将获取每个对象的 DisplayName 属性并将其作为 ServiceName 返回
重命名属性
要重命名属性,我们可以使用上面的示例。我们将添加一个新的自定义属性,对于表达式,我们将采用属性 DisplayName 的值。您还可以添加其他属性。
Get-Service | Select-Object Status, @{Name="ServiceName"; Expression={$_.DisplayName}}
获取嵌套属性
我们还可以使用重命名方法来通过 Select-Object 获取嵌套属性。例如,我们想要从事件日志中获取最后 5 个事件,并将消息长度添加到结果中。我们可以创建一个新的自定义属性 MessageLength,并在表达式中从属性消息中选择属性长度:
Get-EventLog -LogName Application -Newest 5 | Select-Object TimeGenerated, EntryType, @{Name="MessageLength"; Expression={$_.Message.Length}}
计算属性
基于哈希表的参数中的表达式部分允许我们进行计算。原理还是一样的。首先,我们定义一个新的自定义属性,在表达式中,我们可以进行任何我们想要的计算。
例如,要获取磁盘的可用空间(以 GB 为单位),我们可以使用 Get-WmiObject
cmdlet 从磁盘获取信息。但它会以字节为单位返回可用空间,因此我们将以 GB 为单位进行计算:
Get-WmiObject Win32_LogicalDisk | Select-Object DeviceID, MediaType, @{Name="FreeSpace (GB)"; Expression={"{0:N2}" -f ($_.FreeSpace / 1GB)}}
表达式通过将 FreeSpace
属性除以 1GB
(千兆字节)来计算磁盘上的可用空闲空间。它还使用格式运算符 -f
使用 {0:N2}
格式说明符将结果格式化为两位小数。
展开属性
使用嵌套对象时,您有时希望包含结果,但与其他数据位于同一列中。在这些情况下,我们可以使用参数-ExpandProperty,以便结果显示在同一列中。取以下对象:
$myObject = [PSCustomObject]@{
Name = "John"
Age = 30
Address = @{
Street = "123 Main St"
City = "Anytown"
State = "CA"
}
}
我们可以使用嵌套属性方法获取街道:
$myObject | Select-Object Name,@{Name="Street"; Expression={$_.Address.Street}}
# Result
Name Street
---- ------
John 123 Main St
但要将结果作为单独的对象获取,我们需要使用 -ExpandProperty
参数,如下所示:
$myObject | Select-Object Name, @{Name="Street"; Expression={$_.Address.Street}} -ExpandProperty Street
# Result
John
123 Main St
总结
PowerShell cmdlet Select-Object 允许您选择所需的结果。 -First
和 -Last
参数是在输出所有结果之前检查结果的好方法。如果您想了解有关 PowerShell 的更多信息,请查看此入门指南。
我希望本文可以帮助您更好地了解 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 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[软件合集] 25年5月31日 精选软件66个
[电影] 黄沙漫天(2025) 4K.EDRMAX.杜比全景声 / 4K杜比视界/杜比全景声
[风口福利] 短视频红利新风口!炬焰创作者平台重磅激励来袭
[韩剧] 宝物岛/宝藏岛/金银岛(2025)【全16集】【朴炯植/悬疑】
[电影] 愤怒的牦牛 (2025) 国语中字 4k
[短剧合集] 2025年05月30日 精选+付费短剧推荐56部
[软件合集] 25年5月30日 精选软件26个
[软件合集] 25年5月29日 精选软件18个
[短剧合集] 2025年05月28日 精选+付费短剧推荐38部
[软件合集] 25年5月28日 精选软件37个
[剧集] [央视][笑傲江湖][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
[美图] 2W美女个美女小姐姐,饱眼福
[电视剧] [突围] [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