Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 是否显示比较对象SideIndicator结果中的文件名列?_Powershell - Fatal编程技术网

Powershell 是否显示比较对象SideIndicator结果中的文件名列?

Powershell 是否显示比较对象SideIndicator结果中的文件名列?,powershell,Powershell,我想将两个.CSV文件的内容与从不同DNS服务器生成的其他文件进行比较 C:\oldns.CSV Name Type Value ---- ---- ----- corporate.net SOA ns1.parkingcrew.org corporate.net A 185.53.177.52

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

C:\oldns.CSV

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

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
脚本:

$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
我如何获得显示文件名的附加列,其中每行有差异

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

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 <=
InputObject侧指示器
-----------                                        -------------
corporate.net SOA ns1.parkingcrew.net=>

corporate.net SOA ns1.parkingcrew.com因为您在开始时就知道文件名,所以可能最简单的方法是存储它,然后在以后引用它。像这样的

$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}}
$reference=@{
路径='C:\oldns.CSV'
Content=Get Content-Path“C:\oldns.CSV”| ForEach对象{$\u.Trim()}
}
美元差额=@{
路径='C:\NewDNS.CSV'
Content=获取内容-路径C:\NewDNS.CSV | ForEach对象{$\u0.Trim()}
}
$alldifferences=比较对象-ReferenceObject$reference.Content-DifferenceObject$difference.Content
$alldifferences|
其中对象{$\ SideIndicator-eq'=>'}|
选择Object*,@{n='File';e={$difference.Path}
$alldifferences|
其中对象{$\ SideIndicator-eq'}|
选择对象*,@{n='File';e={$difference}
$alldifferences|

Where对象{$\.SideIndicator-eq'感谢您的更新和建议,我可以知道为什么在第二个示例中,{$\.SideIndicator-eq'=>')对于$difference和$reference都是相同的吗?不应该是。这是一个复制/粘贴意外没有问题。看起来我也颠倒了它们。非常感谢@Doug。
$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}}