PowerShell Compare-Object,导致上下文

时间:2014-06-25 13:04:05

标签: powershell

我在PowerShell中使用Compare-Object来比较两个XML文件。它使用< =和=>充分显示两者之间的差异。我的问题是我希望看到上下文中的差异。由于它的XML,一行,一个节点是不同的,但我不知道它在整个文档中的位置。如果我能抓住之前的5行和之后的3行,它会给我足够的信息来理解它在上下文中的含义。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

You can start from something like this:

$a = gc a.xml
$b = gc b.xml

if ($a.Length -ne $b.Length)
    { "File lenght is different" }
    else
    {
    for ( $i= 0; $i -le $a.Length; $i++)    
        {
            If ( $a[$i] -notmatch $b[$i] ) 
            {
             #for more context change the range i.e.: -2..2       
             -1..1 | % { "Line number {0}: value in file a is {1} - value in file b {2}" -f ($i+$_),$a[$i+$_], $b[$i+$_] }
                " "
            }  
        }
    }

答案 1 :(得分:0)

Compare-Object 带有一个 IncludeEqual 参数,可能会提供您要查找的内容:

[xml]$aa = "<this>
 <they>1</they>
 <they>2></they>
 </this>"
[xml]$bb = "<this>
 <they>1</they>
 <they>2</they>
 </this>"
Compare-Object $aa.this.they $bb.this.they -IncludeEqual

结果

InputObject SideIndicator
----------- -------------
1           ==
2           =>
2>          <=