使用Powershell合并/输出两个CSV的唯一值

时间:2018-06-14 14:36:23

标签: powershell powershell-v3.0

我正在尝试查找唯一值/合并两个CSV。但它似乎没有奏效。

由于某种原因,代码不返回唯一值(不合并)。输出始终是第一个CSV的值。在这种情况下,它返回$Users1的值。如果我将其更改为$UserUnique = $Users2 + $user1,则会返回$User2

的值

这是我的代码:

$Users1 = Import-Csv -Path \\share\user\Desktop\disabledusers.csv
$Users2 = Import-Csv -Path \\share\user\Desktop\disabledusers2.csv

$UserUnique = $Users1 + $user2
$UserUnique | Select-Object -Property * -Unique

有什么想法吗?

提前致谢。

我的参考链接 - How to merge two csv files in powershell with same headers and discard duplicate rows

根据要求提供更多信息:请在下面找到CSV和预期结果。

$用户1

name    lastlogondate   passwordlastset SAMAccountName  
Name1   20/03/2017 12:54    05/09/2013 13:43    Sam1    
Name2   18/08/2016 10:31    04/03/2015 09:42    Sam2    
Name3   11/09/2016 17:48    17/03/2015 12:02    Sam3    
Name4   06/09/2016 08:46    06/10/2015 09:44    Sam4    
Name5   07/09/2016 08:46    07/10/2015 09:44    Sam5    
Name6   08/09/2016 08:46    08/10/2015 09:44    Sam6    

$ Uers2

name    lastlogondate   passwordlastset SAMAccountName
Name1   20/03/2017 12:54    05/09/2013 13:43    Sam1
Name2   18/08/2016 10:31    04/03/2015 09:42    Sam2
Name3   11/09/2016 17:48    17/03/2015 12:02    Sam3
Name4   06/09/2016 08:46    06/10/2015 09:44    Sam4
Name7   09/09/2016 08:46    09/10/2015 09:44    Sam7
Name8   10/09/2016 08:46    10/10/2015 09:44    Sam8
Name9   11/09/2016 08:46    11/10/2015 09:44    Sam9
Name10  12/09/2016 08:46    12/10/2015 09:44    Sam10

预期结果

name    lastlogondate   passwordlastset SAMAccountName
Name1   20/03/2017 12:54    05/09/2013 13:43    Sam1
Name2   18/08/2016 10:31    04/03/2015 09:42    Sam2
Name3   11/09/2016 17:48    17/03/2015 12:02    Sam3
Name4   06/09/2016 08:46    06/10/2015 09:44    Sam4
Name5   07/09/2016 08:46    07/10/2015 09:44    Sam5
Name6   08/09/2016 08:46    08/10/2015 09:44    Sam6
Name7   09/09/2016 08:46    09/10/2015 09:44    Sam7
Name8   10/09/2016 08:46    10/10/2015 09:44    Sam8
Name9   11/09/2016 08:46    11/10/2015 09:44    Sam9
Name10  12/09/2016 08:46    12/10/2015 09:44    Sam10

1 个答案:

答案 0 :(得分:0)

您的问题是简单错误$user2应为$users2

未定义的变量 - $user2,在这种情况下 - 默认为$null ,使目标数组连接操作$Users1 + $user2成为无操作:有效,你得到的只是$Users1,这解释了你的症状(你试图交换操作数,$Users2 + $user1,保留了错字)。

要防止此类拼写错误,使用Set-StrictMode -Version 1或更高版本,以便在访问未定义的变量时使PowerShell报告错误 "..."内部除外)。

除此之外,我建议绕过Import-Csv和昂贵的Select-Object -Property *方法(请参阅my answer链接问题以获得解释),这既简化了代码又使其更多有效:

Get-Content \\share\user\Desktop\disabledusers.csv, \\share\user\Desktop\disabledusers2.csv |
  Select-Object -Unique