У меня есть файл CSV, который содержит имя, размер и хэш (имя файла, размер в байтах и хэш-код MD5) для каждого файла на одном из моих устройств хранения.Как только эти данные будут перемещены, я сгенерирую хеш для каждого файла, включая также имя и размер, а затем сравню эти столбцы со столбцами в существующем CSV.Я знаю, что есть утилиты, которые делали бы всю эту работу за меня, но я делаю это больше как опыт обучения, чем что-либо еще.
Что я хотел бы сделать, это для имен файлов, размерови хэши, которые не совпадают идеально, я хотел бы экспортировать журнал, указывающий, не существует ли файл в новом месте, или если есть несоответствие хэша.
Например, используя мой текущий скрипт сравнения:
$csv1 = Import-CSV "X:\Documents\Customer Projects\Destination.csv"
$csv2 = Import-CSV "X:\Documents\Customer Projects\Source.csv"
Compare-Object -ReferenceObject $csv2 -DifferenceObject $csv1 -Property Name,Size,Hash
Я получаю:
Name Size Hash SideIndicator
---- ---- ---- -------------
123456789.avi 4122896 D258518EDDE5F00579CE2F9D01129C11 =>
123456789.avi 8635210 807666D37D0E1A75279E1AE837759674 <=
qwertyuiop.avi 468246867 3F779E039B646D49D84F3D2C403F2EBD <=
В случае первого файла, 123456789.avi
, этонаходится в обоих местоположениях, но размер и хеш не совпадают, что должно что-то записывать в соответствии с "Hash mis-match"
.
Для второго файла, qwertyuiop.avi
, он находится только в исходном расположении и нев месте назначения, которое будет что-то записывать по линии "File missing from destination"
.
Есть ли способ сделать это сравнение непосредственно с выводом Compare-Object
?Я не могу найти хороший способ сравнить строки одного и того же вывода.Нужно ли экспортировать данные в два разных файла CSV, один для одной стороны, а другой для другой, а затем сравнить?
РЕДАКТИРОВАТЬ :
С помощью Роберта я использую приведенный ниже код, чтобы сгруппировать выходные данные моего исходного оператора Compare-Object
и вывести одно сообщение для файлов с тем же именем на основе счетчика оператора Group-Object
.
$csv1 = Import-CSV "X:\Documents\Customer Projects\Destination.csv"
$csv2 = Import-CSV "X:\Documents\Customer Projects\Source.csv"
$test = Compare-Object -ReferenceObject $csv2 -DifferenceObject $csv1 -Property Name,Size,Hash
$group = $test | Group-Object -Property Name
foreach ($file in $group)
{
if (($file | Select-Object -ExpandProperty Count) -ge 2) {
Write-Host ""$file.name"- Hash mis-match"
}
if (($file | Select-Object -ExpandProperty Count) -eq 1) {
Write-Host ""$file.name"- File missing"
}
}