在PowerShell脚本中从数组中删除重复项

3

在此输入图像描述我导入了一个CSV文件,其中显示了两个组和组成员。这两个组中都有重复的成员,如下所示: 组A:

John Harry Berke

  1. John
  2. Tom
  3. Hilton

组B:

  1. John
  2. Louise

(John被重复列出), 因此,我编写了以下代码将所有组成员添加到一个数组中,然后从中打印唯一的成员,但它不起作用。该数组包含重复的名称。

    $Global:grpmember = @()
    $CSV=Import-Csv -Path "C:\Temp\LicenseCount\Names.csv" -delimiter ","
    $csv | % {
    $grpmember+= $_.GroupMembers
    Write-Host "I am executed"
    }
    $grpmember | Get-Unique -AsString

输入图像说明


你的问题不成立,因为 .CSV文件不支持换行符(正如你从粘贴中看到的:所有名称都用单个空格连接),我相信如果你将这个 .CSV 文件导入到你的应用程序(或 Excel)中,你会发现所有的名称都用单个空格连接。如果你无法区分名字之间的空格和每个完整名字的姓和名,那么你想要如何分隔这些名字呢?我认为你需要忘记 .CVS 文件,转而使用例如 PSExcel 模块。 - iRon
有什么解决方法吗?我需要将两个组的成员(属于同一个应用程序)合并,然后从中提取唯一的成员以计算许可证数量...由于相同用户在不同组中重复出现,因此许可证数量也会重复计算。 - user7189226
这取决于源应用程序(截图来自哪里)是否可以导出到除CSV文件之外的其他格式,或者是否可以使用类似于“... rn...”或...\r\n...的方式转义换行符。 - iRon
1个回答

8
Get-Unique 应该能在这里奏效。但是它需要一个已排序的数组,而你的输入并没有排序。
还有其他选项。假设你有一个数组,比如:
$array = @('a', 'b', 'c', 'a')

你可以在这种情况下使用select -uniqsort -uniq 来从上述数组中移除重复项。
$array= $array | select -uniq
# or
$array= $array | sort -uniq

$Global:grpmember = @() $CSV=Import-Csv -Path "C:\Temp\LicenseCount\Names.csv" -delimiter "," | Sort -Unique$csv | % { $grpmember+= $_.GroupMembers Write-Host "I am executed" } $grpmember|Get-Unique -AsString - user7189226
你的 CSV 格式不正确吗?大小写敏感问题呢? - Lakshmikant Deshpande
#类型 System.Object GroupName,“GroupMembers”,“GroupId”,“AppName”,“GroupLicenses”,“TotalUserCount”,“LicensedUserCount”,“LicenseErrorCount” A02_users,“John DOE Bob Sponge app team Patrick Star Coordinator Data Owner1 Data Owner2 Data Owner3 Data Owner4 Data Owner5 Data Owner6 Data Owner7 Data Owner8 Data Owner9 Data Owner10 Data Owner11 Badr Nhairy”,“d1360ff1-6358-4ad7-aa7d-37bb2ea6c36c”,“AIFMD02”,,“17”,“5”,“0” AIFMD02_admin,“John DOE app team Neha Srivastava”,“6a29b8b2-dfcf-4c13-a7ca-5675c73d5823”,“AIFMD02”,,“3”,“2”,“0” - user7189226
如果您将此内容粘贴到CSV文件中并删除分隔符,则可以查看CSV数据。 - user7189226
我还在我的问题中添加了一张CSV的图片。 - user7189226
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接