Вопрос:

PowerShell Сравнить результаты

powershell compare

45 просмотра

2 ответа

20 Репутация автора

У меня есть текстовый файл, где я храню некоторые имена файлов резервных копий с их хэш-таблицами. У меня есть другой текстовый файл, где я храню только хеш-таблицы. Я добавляю второй текстовый файл под первыми документами. Я хочу сравнить эти хеш-таблицы, если они одинаковы, я хочу добавить около хеш-таблицы -2, иначе я хочу добавить около хеш-таблицы -1.

  • "SHA256", "89EC548C14582B2BDC7739BC0FA007", "C: \ WINDOWS \ system32@Ap.png"

  • "SHA256", "0B99B2576F1FA0689FF6E03462076C", "C: \ WINDOWS \ system32 @ AudioTot"

  • "SHA256", "F3B178AD338023AA3CBCB071CC0063", "C: \ WINDOWS \ system32@biage.png"

  • "SHA256", "383D8CBFCD078B3D661655A816676F", "C: \ WINDOWS \ system32@edage.mui"

  • "89EC548C14582B2BDC7739BC0FA007" -2

  • «0B99B2576F1FA0689FF6E03462076C» -2

  • «0A57D7F60CDD9DB6F6F461BBC464FD» -1

  • "F3B178AD338023AA3CBCB071CC0063" -2

  • "7BCA060610F1A753A881593F967G47" -1

  • "383D8CBFCD078B3D661655A816676F" -2

Я использую добавить хэши в текстовом файле из другого файла, но не могу сравнить:

$From = Get-Content -Path .\CopyFromFile.txt

Add-Content -Path .\CopyToFile.txt -Value $From

Get-Content -Path .\CopyToFile.txt
Автор: William Kendly Источник Размещён: 12.06.2019 06:24

Ответы (2)


1 плюс

1898 Репутация автора

Проверьте, поможет ли следующий код решить вашу проблему.
Код был обернут в блок скрипта, чтобы создать новую область видимости и сохранить значения переменных$ErrorActionPreference и $OFS предпочтений . Метод был использован для чтения содержимого файла.
ReadAllTextCopyToFile.txt

& {
  $ErrorActionPreference = 'Stop'
  $OFS = ','
  try {
    $To = [System.IO.File]::ReadAllText('.\CopyToFile.txt')
    $From = & {
      # Add a line if the file .\CopyToFile.txt did not end with a newline.
      if ( -not $To.EndsWith([System.Environment]::NewLine) ) { '' }
      Get-Content -Path .\CopyFromFile.txt |
        ForEach-Object { "$($_, @(-1, -2)[[int]$To.Contains($_)])" }
    }
    Add-Content -Path .\CopyToFile.txt -Value $From
    Get-Content -Path .\CopyToFile.txt
  } catch {
    $_ | Out-String | Write-Warning
  }
}

Выход:

"SHA256","89EC548C14582B2BDC7739BC0FA007","C:\WINDOWS\system32@Ap.png"
"SHA256","0B99B2576F1FA0689FF6E03462076C","C:\WINDOWS\system32@AudioTot"
"SHA256","F3B178AD338023AA3CBCB071CC0063","C:\WINDOWS\system32@biage.png"
"SHA256","383D8CBFCD078B3D661655A816676F","C:\WINDOWS\system32@edage.mui"
"89EC548C14582B2BDC7739BC0FA007",-2
"0B99B2576F1FA0689FF6E03462076C",-2
"0A57D7F60CDD9DB6F6F461BBC464FD",-1
"F3B178AD338023AA3CBCB071CC0063",-2
"7BCA060610F1A753A881593F967G47",-1
"383D8CBFCD078B3D661655A816676F",-2
Автор: Andrei Odegov Размещён: 12.06.2019 09:28

1 плюс

22573 Репутация автора

Решение

Извините, но я не думаю, что это разумный подход к созданию текстового файла с различными форматами внутри.

Почему бы не использовать более PowerShellпохожий способ Import-Csvи Compare-Objectсоздать новый объект, который также можно сохранить как файл CSV.

Предполагая, что вышеуказанные данные хранятся в файлах hashes.csvи чистые хеши вhashes.txt

Этот маленький скрипт (строка)

Compare-Object -ref (Import-Csv .\hashes.csv -Header Algorythm,Hash,File) `
               -dif (Import-csv .\hashes.txt -Header Hash) -Property Hash -PassThru -IncludeEqual

дает такой вывод:

Algorythm Hash                           File                          SideIndicator
--------- ----                           ----                          -------------
SHA256    89EC548C14582B2BDC7739BC0FA007 C:\WINDOWS\system32@Ap.png    ==
SHA256    0B99B2576F1FA0689FF6E03462076C C:\WINDOWS\system32@AudioTot  ==
SHA256    F3B178AD338023AA3CBCB071CC0063 C:\WINDOWS\system32@biage.png ==
SHA256    383D8CBFCD078B3D661655A816676F C:\WINDOWS\system32@edage.mui ==
          0A57D7F60CDD9DB6F6F461BBC464FD                               =>
          7BCA060610F1A753A881593F967G47                               =>

который может быть изменен, чтобы заменить SideIndicatorваши значения -2,-1

Автор: LotPings Размещён: 12.06.2019 10:36
Вопросы из категории :
32x32