PowerShell比较输出

PowerShell比较输出,powershell,compare,Powershell,Compare,我有一个文本文件,其中存储了一些备份文件名及其哈希表。我有另一个文本文件,我只存储哈希表。我在第一个文档下添加第二个文本文件。我想比较这些哈希表,如果它们相同,我想在哈希表-2附近添加,否则我想在哈希表-1附近添加 “SHA256”、“89EC548C14582B2BDC7739BC0FA007”、“C:\WINDOWS”\system32@Ap.png" “SHA256”、“0B99B2576F1FA0689FF6E03462076C”、“C:\WINDOWS”\system32@Audio

我有一个文本文件,其中存储了一些备份文件名及其哈希表。我有另一个文本文件,我只存储哈希表。我在第一个文档下添加第二个文本文件。我想比较这些哈希表,如果它们相同,我想在哈希表-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

检查以下代码是否有助于解决您的问题。
该代码被包装在脚本块中,以创建新的作用域以及
$ErrorActionPreference
$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
  }
}
输出:

"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

检查以下代码是否有助于解决您的问题。
该代码被包装在脚本块中,以创建新的作用域以及
$ErrorActionPreference
$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
  }
}
输出:

"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

请原谅,但我不认为这是一个聪明的方法来创建一个不同格式的文本文件内

为什么不使用更类似于
PowerShell
的方式,通过
Import Csv
Compare Object
创建一个新对象,该对象也可以保存为Csv文件

假设上述数据存储在文件
hashes.csv
和纯hashes中
hashes.txt

这个小脚本(行)

产生以下输出:

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                               =>

可以对其进行调整,以将
侧指示器
替换为您的值
-2
-1

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

为什么不使用更类似于
PowerShell
的方式,通过
Import Csv
Compare Object
创建一个新对象,该对象也可以保存为Csv文件

假设上述数据存储在文件
hashes.csv
和纯hashes中
hashes.txt

这个小脚本(行)

产生以下输出:

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                               =>

可以调整哪一个来将
侧指示器
替换为您的值
-2
-1

,顺序是否相关?带-1的哈希值属于不在from目录中的文件?不,这不相关。我有超过65k这样的线路。我只是想举个例子。在其他txt文件中也一样,有一个目录格式相同。我想指定相同的哈希表,但使用“SHA256”概念我无法指定(我猜是给出了类似-2然后删除-1的内容)。我不清楚您的问题。您有多少个文件及其内容?请创建示例输入文件,并将其内容复制/粘贴到您的问题中。明确哪些内容属于哪个文件。同时提供所需输出的样本。订单是否相关?带-1的哈希值属于不在from目录中的文件?不,这不相关。我有超过65k这样的线路。我只是想举个例子。在其他txt文件中也一样,有一个目录格式相同。我想指定相同的哈希表,但使用“SHA256”概念我无法指定(我猜是给出了类似-2然后删除-1的内容)。我不清楚您的问题。您有多少个文件及其内容?请创建示例输入文件,并将其内容复制/粘贴到您的问题中。明确哪些内容属于哪个文件。还提供所需输出的示例。是的,我以前尝试过这种方法,但对于我的场景来说还不够,谢谢你的帮助。是的,我以前尝试过这种方法,但对于我的场景来说还不够,谢谢你的帮助。