Формат вывода в Powershell Compare-Object
Вот сценарий, который я написал:
function Compare {
$file1 = Read-Host "Please enter the path of the first file you would like to compare"
$file2 = Read-Host "Please enter the path of the second file you would like to compare"
$outFile = Read-Host "Please enter the path to where you would like your output file."
Try{
$compareOne = Get-Content $file1
$comparetwo = Get-Content $file2
}
Catch{
Write-Host "The path you entered is either invalid or the file does not exist. "
}
Write-Host "Beginning comparison"
Compare-Object $compareOne $compareTwo | Out-File $outFile
Write-Host "Complete!"
}
Compare
И это мой вывод:
InputObject | SideIndicator
------------|--------------
Value1 | <=
Value2 | <=
Value3 | =>
Value4 | =>
Могу ли я отформатировать вывод таким образом, чтобы я мог изменить заголовки каждого столбца?
И вместо =>
а также <=
Я мог бы дать, в каком файле различия на самом деле находятся?
Вот вид вывода, который я ищу:
Value | File
------------|--------------
Value1 | $file1
Value2 | $file2
Value3 | $file2
Value4 | $file1
Я все еще новичок в PowerShell, поэтому, если бы вы могли объяснить свой ответ, это было бы здорово, просто чтобы я мог понять, что на самом деле происходит.
Я также пытаюсь сделать это "фиктивное доказательство", чтобы любой мог просто сравнить два текстовых файла без какого-либо дополнительного ввода.
Любая помощь будет принята с благодарностью!
2 ответа
Решение
Может быть как то так?
function compareCSV {
$file1 = Read-Host "Please enter the path of the first file you would like to compare"
$file2 = Read-Host "Please enter the path of the second file you would like to compare"
$outFile1 = Read-Host "Please enter the path to where you would like your output file."
Try{
$compareOne = Get-Content $file1
$comparetwo = Get-Content $file2
}
Catch{
Write-Host "The path you entered is either invalid or the file does not exist. "
}
Write-Host "Beginning comparison"
$Compare =
Compare-Object $compareOne $compareTwo
$compare | foreach {
if ($_.sideindicator -eq '<=')
{$_.sideindicator = $file1}
if ($_.sideindicator -eq '=>')
{$_.sideindicator = $file2}
}
$Compare |
select @{l='Value';e={$_.InputObject}},@{l='File';e={$_.SideIndicator}} |
Out-File $outFile1
Write-Host "Complete!"
}
compareCSV
Изменить это:
Compare-Object $compareOne $compareTwo | Out-File $outFile
с этим:
Compare-Object $compareOne $compareTwo |
ft inputobject, @{n="file";e={ if ($_.SideIndicator -eq '=>') { "$file2" } else { "$file1" } }} | Out-File $outFile