[玩转系统] 在 PowerShell 中过滤唯一对象
作者:精品下载站 日期:2024-12-14 08:03:30 浏览:12 分类:玩电脑
在 PowerShell 中过滤唯一对象
几周前,我的朋友格拉迪斯·克拉维茨 (Gladys Kravitz) 对与过滤独特对象相关的挑战感到遗憾。 PowerShell 有一个 Get-Unique cmdlet,Select-Object 有一个 -Unique 参数,但这些选项是有限的。一方面,我想说我们使用 PowerShell 管理的大多数事情都保证是唯一的。对象可能具有 GUID、ID 或 SID,以保证唯一性。但是,这就是格拉迪斯的情况,有时我们正在管理的事情来自外部来源。例如从 CSV 文件导入数据。在这种情况下,绝对有可能存在重复的对象。
测试数据
这是一个示例 CSV 源,我将其导入到 PowerShell 中。
$Obj = "Animal,Snack,Color
Horse,Quiche,Chartreuse
Cat,Doritos,Red
Cat,Pringles,Yellow
Dog,Doritos,Yellow
Dog,Doritos,Yellow
Rabbit,Pretzels,Green
Rabbit,Popcorn,Green
Marmoset,Cheeseburgers,Black
Dog,Doritos,White
Dog,Doritos,White
Dog,Doritos,White
" | ConvertFrom-Csv
您可以清楚地看到重复的对象。
现有命令
使用 Select-Object 对于这种情况没有任何帮助,即使您觉得您告诉 PowerShell“选择唯一的对象”。
这对于单个属性来说效果很好。
但这不是目标。然后我将注意力转向 Get-Unique。但这并没有好多少。
所以我做了我一直告诉你的事情,我重新阅读了帮助。如果您告诉命令将所有内容都视为字符串,则可以使其发挥作用。
如果您正在处理像我的演示对象这样的平面和简单对象,这应该可以完成工作。即使比较是通过字符串进行的,输出也是原始对象。但有一个潜在的问题:比较区分大小写。我还发现,如果对象具有丰富的属性,例如数组或哈希表,则 Get-Unique 并不总是提供预期的结果。
使用比较对象
我决定进入另一个兔子洞并使用 Compare-Object。此 cmdlet 允许您指定要比较的多个属性。
对象 3 和 4 是相同的。我的计划是构建一个唯一对象的列表,然后比较每个输入对象。如果该对象尚未在列表中,则将其添加。我首先创建一个列表对象。
$UniqueList = [System.Collections.Generic.list[object]]::new()
然后对于每个对象,我需要测试它是否存在。 List 对象有一个 Exists() 方法,该方法需要一个谓词,该谓词本质上是一个脚本块。
if ($UniqueList.Exists( { -not (Compare-Object $args[0].psobject.properties.value $item.psobject.Properties.value) })) {
Write-Debug "[$((Get-Date).TimeofDay) PROCESS] Skipping: $($item |Out-String)"
}
else {
Write-Debug "[$((Get-Date).TimeofDay) PROCESS] Adding as unique: $($item | Out-String)"
$UniqueList.add($item)
}
该代码表示:“将列表中的每个对象 $args[0] 与输入对象 $item 进行比较。如果存在匹配,则该对象已在列表中,因此无需执行任何操作。否则,将其添加到列表中。”处理完所有对象后,$UniqueList 应该是唯一的对象。顺便说一句,Compare-Object 不区分大小写。
获取 PSUnique
我将所有这些组合到一个名为 Get-PSUnique 的函数中。
在我的测试中,此命令将处理简单的数组和哈希表以进行比较。我想这个限制就是 Compare-Object 在比较属性时所具有的限制。尽管如此,我还是推荐这个函数来处理简单的对象。
想亲自尝试一下吗?我已将此命令添加到最新版本 (2.28.0) 的 PSScriptTools 模块中,您可以从 PowerShell 库安装该模块。或者欢迎您查看 Get-PSUnique 的代码。我希望你会发现这和我认为格拉迪斯一样有用。
猜你还喜欢
- 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