Xml Compare-Object cmdlet无法与"<--&引用;在txt文件中

Xml Compare-Object cmdlet无法与"<--&引用;在txt文件中,xml,powershell,select-string,compareobject,Xml,Powershell,Select String,Compareobject,我正在构建另一个web服务器“web2”,它必须与web服务器“web1”具有相同的配置 因此,在安装一些软件后,我需要编辑“web2”服务器上的“web.config”以匹配“web1”服务器中的“web.config” 我在笔记本电脑上执行此操作,因此我将两个“web.config”文件复制到笔记本电脑上,并运行以下命令: $w1="web1.server.local" $w2="web2.server.local" $myCred=(Get-Credential -

我正在构建另一个web服务器“web2”,它必须与web服务器“web1”具有相同的配置

因此,在安装一些软件后,我需要编辑“web2”服务器上的“web.config”以匹配“web1”服务器中的“web.config”

我在笔记本电脑上执行此操作,因此我将两个“web.config”文件复制到笔记本电脑上,并运行以下命令:

    $w1="web1.server.local"
    $w2="web2.server.local"
    $myCred=(Get-Credential -credential "myAD\myUser")
    $file="C:\path\to\my\web.config"
    Invoke-Command -ComputerName $w1 -Credential $myCred (Get-Content $args[0]) -ArgumentList $file | Set-content web1.txt
    Invoke-Command -ComputerName $w2 -Credential $myCred (Get-Content $args[0]) -ArgumentList $file | Set-content web2.txt 

好的,现在我有两个服务器的“web.config”文件,分别名为:web1.txt和web2.txt

在这里,您可以看到文件中差异的图片(我使用notepad++),因为您可以看到只有4个差异。 请注意,我修剪了文件,每个文件只有42行

然后,我尝试使用“compare Object”cmdlet比较这两个文件,但没有得到准确的信息:

PS C:\> Compare-Object (Get-Content .\web1.txt) (Get-Content .\web2.txt)

InputObject SideIndicator
----------- -------------
            <=
            <=
PS C:\>比较对象(获取内容。\web1.txt)(获取内容。\web2.txt)
输入对象侧指示器
----------- -------------
=>

b比较对象似乎在比较行之前对行进行排序。看起来第一个文件中有两个额外的空行。否则,如果对行进行排序,则它们是相同的。最小可复制示例:

file1.xml:



<top>

  <inner1>
  </inner1>

  <!--
  <inner2>
  </inner2>
  -->
</top>
文件2

看起来它放弃了在同步窗口中查找相同的值:

compare-object (cat file1) (cat file2) -SyncWindow 1

InputObject SideIndicator
----------- -------------
line3       =>
line1       <=
line2       <=
line3       <=

compare-object (cat file1) (cat file2)

InputObject SideIndicator
----------- -------------
line1       <=
line2       <=
比较对象(cat文件1)(cat文件2)-同步窗口1 输入对象侧指示器 ----------- ------------- 第3行=>
line1@mklement0看起来像是比较对象在比较之前对文件进行排序。做得很好。是的,默认情况下,所有对象(在本例中为直线)都会进行比较,而与位置无关;有
-SyncWindow
参数可以修改此行为,但坦率地说,我从来没有完全理解它是如何工作的。@mklement0我添加了一个示例。谢谢,我已经深入挖掘了一点,我认为
-SyncWindow N
大致意味着:处理从两个集合开始的
N+1
元素的滑动窗口,使用的元素(其相等状态可以最终确定)可能输出并从集合中删除,减少的集合以递归方式处理。感谢您的回复,但这只会给我带来更多困惑当我执行-SyncWindow 1时,我几乎得到了所有行,我不明白


<top>

  <inner1>
  </inner1>

  <!--
  <inner2>
  </inner2>
  -->
</top>
<top>
  <!--
  <inner1>
  </inner1>
  -->

  <inner2>
  </inner2>

</top>
compare-object (cat file1.xml) (cat file2.xml) 


InputObject SideIndicator
----------- -------------
            <=
            <=

cat file1.xml | sort




  -->
  <!--
  </inner1>
  </inner2>
  <inner1>
  <inner2>
</top>
<top>


cat file2.xml | sort


  -->
  <!--
  </inner1>
  </inner2>
  <inner1>
  <inner2>
</top>
<top>
line1
line2
line3
line4
line3
line4
compare-object (cat file1) (cat file2) -SyncWindow 1

InputObject SideIndicator
----------- -------------
line3       =>
line1       <=
line2       <=
line3       <=

compare-object (cat file1) (cat file2)

InputObject SideIndicator
----------- -------------
line1       <=
line2       <=