powershell - 通过哈希比较文件,但我需要的不仅仅是哈希的名称
问题描述
我正在尝试通过哈希比较文件和目录,并且它正在工作,但我现在需要一种更简单的方法来确定哪个文件不同。
我最初没有比较哈希值,它适用于文件和文件夹,但除了它们存在的事实之外,它不会告诉我任何其他信息。
$Source = Get-ChildItem -recurse –Path E:\path | foreach {Get-FileHash –Path $_.FullName}
$Destination = Get-ChildItem -recurse –Path "\\server\e$\path" | foreach {Get-FileHash –Path $_.FullName}
Compare-Object -ReferenceObject $Source.hash -DifferenceObject $Destination.hash
现在这很好用,但我还想列出与哈希关联的文件。获得哈希后,我需要返回文件并将哈希与原始目录进行比较,以确定它来自哪个目录。
InputObject SideIndicator
----------- -------------
CFD1DF3C08A9F7C4D81E22DA7D1CBB35FA12220C3CB85777EBA9BD89362AEDA3 =>
2B098B7FC189A87B41A7706EA7ABFFDB343B8B5AF3712BA6614E04BD3032A977 =>
D8CBDD03564C3547D8189D11A9BAE078FBD70986DBFB485EAEE5170C13113798 =>
F5D7AE29DB432EC3421EE956B70927AE394C0F27CE00FF855666DBC3E14084DB <=
85795253C6CCDC3CC2A4CAE055CC7478946CDB33D35EAE2BB5796C55954205B2 <=
9CE2A42C8FFA2D8001BA2874324987DCEF601173CB2ED8B654A76598F90B126E <=
解决方案
如果您要进行散列,为什么不使用 Group-Object 而不是 Compare-Object。像这样的东西:
$Source = Get-ChildItem -recurse –Path E:\path
$Destination = Get-ChildItem -recurse –Path "\\server\e$\path"
$Source + $Destination | Group-Object @{Expression={(Get-FileHash $_.FullName).hash}} | ? {$_.Count -gt 1}
输出将是这样的:
Count Name Group
----- ---- -----
2 DF7E70E5021544F4834BBE... {b.txt, c.txt}
推荐阅读
- java - 如果正则表达式不适合匹配 XML,那么正确的方法是什么?
- git - Gitlab CI:提交包含[ci]时触发管道:
- android - 为什么在 react native 中使用蓝牙时会出错?
- java - 在 Spring 上下文初始化之后但在接受请求之前执行方法
- microsoft-teams - 如何通过 Microsoft Teams 中的机器人了解对话 ID
- c++ - RegSetKeyValue 和 RegSetValueEx 有什么区别?
- node.js - node-oracledb 可以调用具有自定义表类型作为参数的 pl/sql 存储过程吗?
- angular - 创建 API 项目后,Visual Studio 看不到添加的 Angular 项目
- sql - 如何使用变量创建动态更新查询?
- android - 应用程序显示错误清单合并失败并出现多个错误