使用PowerShell比较两个CSV文件中的单元格

时间:2017-12-07 14:40:06

标签: powershell

对此很新。我需要将一个CSV文件中的列与用户名进行比较,将另一个CSV文件中的用户名列与一个列进行比较,如果存在重复项则输出或删除它们。

目前看起来如何:

$File1

Firstname,Lastname,Username
Peter,Larsen,Larsen.123
Pia,Jensen,Jensen.123
Poul,Hansen,Hansen.123

$File2

Username
Larsen.123
Andersen.123
Jensen.123

我在寻找:

Firstname,Lastname,Username,Duplicate
Peter,Larsen,Larsen.123,True
Pia,Jensen,Jensen.123,True
Poul,Hansen,Hansen.123,False

它不一定是真/假输出,从File1或类似物中删除所有重复的条目,也是完全没问题。它本质上只是将我们AD中的用户与我们用户数据库中的用户进行比较,以查看是否有人仍然可以访问不应该拥有的用户。

修改

到目前为止试过这个问题,在这里找到了类似的问题:

foreach ($user in $File1) {
    $MatchAccount = (Compare-Object $File2 $user -Property 'Username' -PassThru).Value
    $user = Add-Member -InputObject $user -Type NoteProperty -Name 'Value' -Value $MatchAccount

只需按顺序导入和导出CSV文件。

2 个答案:

答案 0 :(得分:1)

将第二个文件读入哈希表:

$users = @{}
Import-Csv 'file2.csv' | ForEach-Object {
    $users[$_.Username] = $true
}

然后检查第一个CSV的每一行是否包含该哈希表中的用户名,并add a field是否包含该检查的结果:

(Import-Csv 'file1.csv') |
    Select-Object *,@{n='Duplicate';e={$users.ContainsKey($_.Username)}} |
    Export-Csv 'file1.csv' -NoType

答案 1 :(得分:0)

这是我的方法:

# import csv file1
$file1 = Import-Csv -Path C:\tmp\file1.csv

# import csv file2 and select column "Username"
$file2 = Import-Csv -Path C:\tmp\file2.csv | % {$_.Username}

# create output/result hash table
$file3 = @()

# go through entries in file1
foreach($entry in $file1) {
    # check if entry is in not in file2
    if($file2 -notcontains $entry.Username) {
        # add entry to output hash table
        $file3 += $entry
    }
}

# export result to csv
$file3 | Export-Csv -Path C:\tmp\file3.csv -NoTypeInformation

file3.csv将具有以下内容

Firstname,Lastname,Username
Poul,Hansen,Hansen.123

祝你好运 京特