当一行有"--> "时,比较对象不工作(xml文件保存为txt)。

问题描述 投票:1回答:1

我正在建立另一个web服务器 "web2",它的配置必须与web服务器 "web1 "相同。

因此,在安装了一些软件后,我需要在 "web2 "服务器上编辑 "web.config",使之与 "web1 "服务器上的一致。

我是在我的笔记本电脑上做的,所以我把两个 "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行,每一个

all differences are in red boxes

然后我试着用 "Compare-Object "cmdlet来比较两个文件,但我没有得到准确的信息。

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

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

奇怪的是,如果我把"< !"替换为"< ! - "替换为" < ! - a",输出就会变成:

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

InputObject SideIndicator
----------- -------------
      <!--  =>
      <!--a <=
            <=
            <=

然后如果我把"- - > "改成"- - >b",这就是输出。

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

InputObject SideIndicator
----------- -------------
      <!--  =>
      -->   =>
      <!--a <=
      -->b  <=
            <=
            <=

我试着检查文件的编码,用UTF-8创建它们,我还删除了很多xml文件的块,删除了很多括号(在两个文件上),但它从来没有显示出区别。

我是不是遗漏了什么?

为什么Compare-Object不能判断一个普通文件是否有额外的"- - > "或"<! - - "

如下图所示,我做了一个select-string,在web1.txt中显示了第11行,但是web2.txt没有显示第11行,所以这些文件是不一样的。

Compare-Object AND Select-String

xml powershell diff xml-comments
1个回答
0
投票

我不是已经回答过了吗? Compare-object会先对两个输入进行排序,所以两个文件除了多了两行空行外,最后都是一样的。

下面是同样的问题。 Compare-Object cmdlet wont work with "<!--" in a txt file.

© www.soinside.com 2019 - 2024. All rights reserved.