首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示Compare-Object SideIndicator结果中的filename列?

显示Compare-Object SideIndicator结果中的filename列?
EN

Stack Overflow用户
提问于 2020-12-08 14:31:55
回答 1查看 41关注 0票数 0

我想将两个.CSV文件的内容与从不同DNS服务器生成的其他文件进行比较。

C:\OldDNS.CSV

代码语言:javascript
复制
Name          Type Value                              
----          ---- -----                              
corporate.net SOA  ns1.parkingcrew.org                
corporate.net A    185.53.177.52                      
corporate.net MX   mail.h-email.net:5                 
corporate.net TXT  v=spf1 ip6:fd1b:212c:a5f9::/48 -all
corporate.net NS   ns1.parkingcrew.com                
corporate.net NS   ns2.parkingcrew.net 

C:\NewDNS.CSV

代码语言:javascript
复制
Name          Type Value                              
----          ---- -----                              
corporate.net SOA  ns1.parkingcrew.net                
corporate.net A    185.53.177.52                      
corporate.net MX   mail.h-email.net:0                 
corporate.net TXT  v=spf1 13.55.73.22 -all
corporate.net NS   ns1.parkingcrew.net                
corporate.net NS   ns2.parkingcrew.net

脚本:

代码语言:javascript
复制
$outFile = 'C:\differences.csv'
$reference = Get-Content -Path C:\OldDNS.CSV | ForEach-Object { $_.Trim() }
$difference = Get-Content -Path C:\NewDNS.CSV | ForEach-Object { $_.Trim() }

Compare-Object -ReferenceObject $reference -DifferenceObject $difference |
    Where-Object { $_.SideIndicator -eq '=>' } |
        Select-Object -ExpandProperty InputObject |
            Set-Content -Path $outFile
Invoke-Item $outFile

我如何才能获得显示文件名的附加列,其中每一行都有差异?

因为下面的结果非常令人困惑,我想知道是否可以显示检测到这些更改的文件名:

代码语言:javascript
复制
InputObject                                        SideIndicator
-----------                                        -------------
corporate.net SOA  ns1.parkingcrew.net                 =>                    
corporate.net SOA  ns1.parkingcrew.com                 <=           
corporate.net MX   mail.h-email.net:5                  <= 
corporate.net TXT  v=spf1 13.55.73.22 -all             <=
corporate.net MX   mail.h-email.net:0                  => 
corporate.net TXT  v=spf1 ip6:fd1b:212c:a5f9::/48 -all <=
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-08 16:55:39

由于您在开始时知道文件名,因此最简单的方法可能就是存储它,然后在以后引用它。像这样的东西

代码语言:javascript
复制
$reference = @{
    Path    = 'C:\OldDNS.CSV'
    Content = Get-Content -Path 'C:\OldDNS.CSV' | ForEach-Object { $_.Trim() }
}

$difference = @{
    Path    = 'C:\NewDNS.CSV'
    Content = Get-Content -Path C:\NewDNS.CSV | ForEach-Object { $_.Trim() }
}

$alldifferences = Compare-Object -ReferenceObject $reference.Content -DifferenceObject $difference.Content

$alldifferences |
    Where-Object { $_.SideIndicator -eq '=>' } |
        Select-Object *,@{n='File';e={$difference.Path}}

$alldifferences |
    Where-Object { $_.SideIndicator -eq '<=' } |
        Select-Object *,@{n='File';e={$reference.Path}}

或者简单地存储路径并进行内联的内容收集。

代码语言:javascript
复制
$reference = 'C:\OldDNS.CSV'

$difference = 'C:\NewDNS.CSV'

$alldifferences = Compare-Object -ReferenceObject (Get-Content $reference | ForEach-Object { $_.Trim() }) -DifferenceObject (Get-Content $difference | ForEach-Object { $_.Trim() })

$alldifferences |
    Where-Object { $_.SideIndicator -eq '=>' } |
        Select-Object *,@{n='File';e={$difference}}

$alldifferences |
    Where-Object { $_.SideIndicator -eq '<=’ } |
        Select-Object *,@{n='File';e={$reference}}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65194154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档