Используйте параметр -Property
командлета Compare-Object
для сравнения и вывода интересующих свойств.
Group-Object
позволяет группировать полученные объекты, и Select-Object
может использоваться для создания одного выходного объекта на имя файла из групповых объектов:
$files1 = (Get-Item $path1\*.dll).VersionInfo
$files2 = (Get-Item $path2\*.dll).VersionInfo
Compare-Object $files1 $files2 -Property { Split-Path -Leaf $_.FileName },
ProductVersion,
FileVersion |
Group-Object -Property ' Split-Path -Leaf $_.FileName ' |
Select-Object Name,
@{ n = 'SideIndicator'; e = { $_.Group.SideIndicator } },
@{ n = 'ProductVersion'; e = { $_.Group.ProductVersion -join ' <-> ' } },
@{ n = 'FileVersion'; e = { $_.Group.FileVersion -join ' <-> ' } }
Обратите внимание на использование вычисляемых свойств для сравнения входных объектов только по файлу name и для последующего извлечения информации из вывода Group-Object
через Select-Object
.
К сожалению, Compare-Object
с PowerShell [Core] 7.0 не позволяет name вычисляемые свойства [1] , а подразумеваемое имя свойства подразумевает буквальное содержимое блока скрипта ({ ... }
),
Split-Path -Leaf $_.FileName
, то есть то, что должно быть передано Group-Object -Property
.
Выше приведено что-то вроде следующего:
Name SideIndicator ProductVersion FileVersion
---- ------------- -------------- -----------
file1234.exe {=>, <=} 7.0.18362.1 <-> 7.0.18365.0 7.0.18362.1 <-> 7.0.18365.0
file1235.exe <= 10.0.18362.1 10.0.18362.1
То есть для файлов, находящихся в в обоих местоположениях, но с разными номерами версий, SideIndicator
показывает
{=>, <=}
, с возможностью y различающиеся номера версий в свойствах *Version
, разделенные <->
[1] Добавление возможности именовать вычисляемые свойства в контексте Compare-Object
является предметом этот запрос функции GitHub .