Powershell 比较对象输出格式

Powershell 比较对象输出格式,powershell,compare,compareobject,Powershell,Compare,Compareobject,我有两个CSV文件需要比较。两者可能(也可能不)包含一个额外的分隔字段(通过“|”字符分隔),如下所示: (new.csv) Title,Key,Value Jason,Son,Hair=Red|Eyes=Blue James,Son,Hair=Brown|Eyes=Green Ron,Father,Hair=Black Susan,Mother,Hair=Black|Eyes=Brown|Dress=Green (old.csv) Title,Key,Value Jason,Son,Hair

我有两个CSV文件需要比较。两者可能(也可能不)包含一个额外的分隔字段(通过“|”字符分隔),如下所示:

(new.csv)
Title,Key,Value
Jason,Son,Hair=Red|Eyes=Blue
James,Son,Hair=Brown|Eyes=Green
Ron,Father,Hair=Black
Susan,Mother,Hair=Black|Eyes=Brown|Dress=Green

(old.csv)
Title,Key,Value
Jason,Son,Hair=Purple|Eyes=Blue
James,Son,Hair=Brown|Eyes=Green
Ron,Father,Hair=Purple
Susan,Mother,Hair=Black|Eyes=Brown|Dress=Blue
当我试图比较这两个文件时,我的问题出现了

$fileNew = "new.csv"
$fileOld = "old.csv"
$fileDiffOutputFile = "diff.txt"

$csvNewLog = (Import-CSV ($fileNew))
$csvOldLog = (Import-CSV ($fileOld))

$varDifferences = Compare-Object $csvOldLog $csvNewLog -property Title,Value

$varDifferences | Group-Object -Property Title | % {New-Object -TypeName PSObject -Property @{ NewValue=($_.group[0].Value); Title=$_.name; OldValue=($_.group[1].Value) } } | Out-File $fileDiffOutputFile -Append
产生这种输出:

(diff.txt)
OldValue                   Title                      NewValue                 
--------                   -----                      --------                 
Hair=Purple|Eyes=Blue      Jason                      Hair=Red|Eyes=Blue       
Hair=Purple                Ron                        Hair=Black               
Hair=Black|Eyes=Brown|D... Susan                      Hair=Black|Eyes=Brown|...
一些值不可避免地会超出列的最大长度,正如上面Susan所做的那样

因此,我的问题可能有几个解决方案,我可以想到:

  • 是否有一种更简单的方法来隔离这些值,以便我只提取更改的值,而不是整个分隔值字符串
  • 如果没有,是否可以使用格式来显示整个字符串(包括分隔字符串中未更改的值部分)

  • 如果您在最后一行中包含一个
    格式表-wrap
    ,像这样吗

    $fileNew = "new.csv"
    $fileOld = "old.csv"
    $fileDiffOutputFile = "diff.txt"
    
    $csvNewLog = (Import-CSV ($fileNew))
    $csvOldLog = (Import-CSV ($fileOld))
    
    $varDifferences = Compare-Object $csvOldLog $csvNewLog -property Title,Value
    
    $varDifferences | Group-Object -Property Title | % {New-Object -TypeName PSObject -Property @{ NewValue=($_.group[0].Value); Title=$_.name; OldValue=($_.group[1].Value) } } | Format-Table -wrap | Out-File $fileDiffOutputFile -Append
    

    太棒了,我甚至没有意识到有特定的格式转换选项!感谢您提供的快速简便的解决方案。