PowerShell比较输出

时间:2019-06-12 06:24:53

标签: powershell compare

我有一个文本文件,我在其中存储一些备份文件名及其哈希表。我还有另一个文本文件,仅存储哈希表。我将第二个文本文件添加到第一个文档下。我想比较这些哈希表是否相同,我想在哈希表-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

  •   

我正在使用从另一个文件在txt文件下添加哈希,但是无法进行比较:

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

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

Get-Content -Path .\CopyToFile.txt

2 个答案:

答案 0 :(得分:1)

检查以下代码是否有助于解决您的问题。
代码被包装在脚本块中,以创建新的作用域,并preserve$ErrorActionPreference和{{1} } preference variables
使用ReadAllText方法读取$OFS文件的内容。

CopyToFile.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
  }
}

答案 1 :(得分:1)

对不起,但我认为创建内部不同格式的文本文件不是一种聪明的方法。

为什么不像PowerShellImport-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