Это можно сделать с помощью Compare-Object
и определения пользовательского свойства.
Compare-Object $CSV1 $CSV2 -Property {$_.name -replace '^(.{5}).*', '$1'} -PassThru
$_.name -replace '^(.{5}).*', '$1'
будет принимать первые 5 символов из свойства name
(или меньше, если строка короче, чем5 символов) и удалите остальное.Это свойство затем используется для сравнения записей из $CSV1
и $CSV2
.Параметр -PassThru
заставляет командлет выдавать исходные данные, а не объекты только с пользовательским свойством.Теоретически вы можете использовать $_.name.Substring(0, 5)
вместо замены регулярного выражения для извлечения первых 5 символов.Однако это приведет к ошибке, если имя будет короче 5 символов, как в первой записи из $CSV1
.
По умолчанию Compare-Object
выводит различия между входными объектами, поэтому вам также необходимо добавитьпараметры -IncludeEqual
и -ExcludeDifferent
для получения только соответствующих записей.
Передайте результат через Select-Object * -Exclude SideIndicator
, чтобы удалить свойство SideIndicator
из вывода.