如何在PowerShell中对CSV转换后的数组去重获取唯一值?
解决PowerShell CSV转换后对象数组的重复条目问题
你之前用Get-Unique没成功,是因为这个 cmdlet 针对ConvertFrom-CSV生成的PSCustomObject自定义对象时,默认按对象的字符串表示(也就是类型名)判断重复——不管Server和Env属性值是否一致,它都会把每个对象当成不同条目。
给你两种靠谱的去重方法:
方法1:保留指定属性并去重
如果只需要保留Server和Env属性,直接用Select-Object的-Unique参数,指定判断重复的属性组合:
$serverenv | Where-Object { $_.Env -ne '' } | Select-Object Server, Env -Unique
方法2:保留完整对象并去重
如果要保留对象的所有属性,先通过Group-Object把属性值相同的对象分组,再取每组的第一个对象:
$serverenv | Where-Object { $_.Env -ne '' } | Group-Object Server, Env | ForEach-Object { $_.Group[0] }
另外你之前写的select Get-Unique是语法错误,正确用法是Select-Object -Unique,直接用Get-Unique对自定义对象无效的原因前面已经说明。
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

