compare two lists with PowerShell

I am asked occasionally to compare a list of employee ID numbers to find the differences or the matches. Notepad++ does not do a great job of this, so I put together a quick PowerShell solution.

$dupes = @()
[System.Collections.ArrayList]$arrA = Get-Content U:\listA.txt
[System.Collections.ArrayList]$arrB = Get-Content U:\listB.txt
foreach ($itemA in $arrA) {
if ($arrB -match $itemA) {
$arrB.Remove($itemA)
$dupes += $itemA
}
}

Now $arrB contains only items from listB.txt that do not also appear on listA.txt. Also $dupes contains the items that exist in both files.

About Tommy Doan

BF-ITS(Systems)
This entry was posted in PowerShell. Bookmark the permalink.

One Response to compare two lists with PowerShell

  1. Tommy Doan says:

    I’ve found that sometimes the files I need to compare are quite large and may take a few minutes to process using this method. So I found a simple way to add a progress indicator bar to the script, which helps me know the script is actually still working rather than just stuck in an endless loop.

    $dupes = @()
    [System.Collections.ArrayList]$arrBefore = Get-Content U:\before.txt
    [System.Collections.ArrayList]$arrAfter = Get-Content U:\after.txt

    $i = 0
    foreach ($itemBefore in $arrBefore) {
    $i++
    Write-Progress -Activity "Comparing lines in the two files..." `
    -PercentComplete (($i / $arrBefore.count)*100) -CurrentOperation $itemBefore
    if ($arrAfter -match $itemBefore) {
    $arrAfter.Remove($itemBefore)
    $dupes += $itemBefore
    }
    }

Leave a Reply

Your email address will not be published. Required fields are marked *