Compare-Object gives false differences

Posted by Andy on Server Fault See other posts from Server Fault or by Andy
Published on 2010-01-29T19:11:40Z Indexed on 2012/11/05 11:08 UTC
Read the original article Hit count: 187

Filed under:

I have some problem with Compare-Object. My task is to get difference between two directory snapshots made at different times. First snapshot is taken like this:

ls -recurse d:\dir | export-clixml dir-20100129.xml 

Then, later, I get second snapshot and load both of them:

$b = (import-clixml dir-20100130.xml) 
$a = (import-clixml dir-20100129.xml) 

Next, I'm trying to compare with Compare-Object, like that:

diff $a $b 

What I get is in some places files that were added to $b since $a, but in some -- files that were in both snapshots, and some files, that were added to $b, are not given in Compare-Object output. Puzzling, but $b.count - $a.count is EXACTLY the same as (diff $a $b).count. Why is that?

Ok, Compare-Object has -property param. I try to use that:

diff -property fullname $a $b 

And I get the whole mess of differences: it shows me ALL the files. For example, say $a contains:

A\1.txt 
A\2.txt 
A\3.txt 

And $b contains:

X\2.mp3 
X\3.mp3 
X\4.mp3 
A\1.txt 
A\2.txt 
A\3.txt 

diff output is something like that:

X\2.mp3 => 
A\1.txt <= 
X\3.mp3 => 
A\2.txt <= 
X\4.mp3 => 
A\3.txt <= 
A\1.txt => 
A\2.txt => 
A\3.txt => 

Weird. I think I don't understand something crucial about Compare- Object usage, and manuals are scarce... Please, help me to get the DIFFERENCE between two directory snapshots. Thanks in advance

UPDATE: I've saved data as plain strings like that:

> import-clixml dir-20100129.xml | % { $_.fullname } | out-file -enc utf8 a.txt

And results are the same. Here're excerpts of both snapshots (top 100-something lines, a.txt and b.txt), output of compare-object, and output of UNIX diff (unified). All files are UTF-8: http://dl.dropbox.com/u/2873752/compare-object-problem.zip

© Server Fault or respective owner

Related posts about powershell