比较Powershell中两个不同目录的MD5哈希



我是Powershell的新手,所以请原谅我缺乏经验或缺乏最佳实践。我正在编写一个脚本,该脚本将首先以CSV格式存储两个不同目录的MD5哈希。然后,我想比较这两个文件,如果这两个CSV文件中有任何更改(即,文件的MD5哈希不匹配,或者目标文件夹的CSV文件中没有源文件夹CSV文件中的一个文件(,我想生成一个新的列表,其中包含不匹配或不存在的文件的详细信息。

除此之外,我想知道是否有一种更快的方法来比较这两个文件,因为我处理的文件夹很大,里面有大约12k个文件。我想也许我应该尝试保持源CSV的完整性,并在检查和验证时从目标CSV中逐个删除条目。有人能帮我吗?

#Getting the MD5 hash of the Installer and storing it a csv format
$SourcePath = Get-ChildItem -Path C:source -Recurse
$SourcerHash = foreach ($File in $SourcePath) 
{
Get-FileHash $File.FullName -Algorithm MD5
}
$SourceHash | Export-Csv -Path C:UsersabcdDesktopCSVExportsSourceHash.csv
#Getting the MD5 hash of the destination directory and storing it in a csv format
$DestinationPath = Get-ChildItem -Path C:destination -Recurse
$DestinationHash = foreach ($File in $DestinationPath) 
{
Get-FileHash $File.FullName -Algorithm MD5    
}
$DestinationHash | Export-Csv -Path C:UsersabcdDesktopCSVExportsDestinationHash.csv
#Comparing the hashes of Installer and Destination directories
Compare-Object -ReferenceObject (Import-Csv C:UsersabcdDesktopCSVExportsInstallerHash.csv) -DifferenceObject (Import-Csv C:UsersabcdDesktopCSVExportsDestinationHash.csv) -Property Hash | Export-Csv C:UsersabcdDesktopCSVExportsResultTable
param(
$firstDirectoryName = "D:tmp01",
$SecondDirectoryName = "D:tmp02"
)
$firstList = Get-ChildItem $firstDirectoryName -File -Recurse | ForEach-Object {
[PSCustomObject]@{
relativePath =  $_.FullName.TrimStart($firstDirectoryName)
hash = (Get-FileHash $_.FullName -Algorithm MD5).Hash
}
}
$secondList = Get-ChildItem $SecondDirectoryName -File -Recurse | ForEach-Object {
[PSCustomObject]@{
relativePath =  $_.FullName.TrimStart($SecondDirectoryName)
hash = (Get-FileHash $_.FullName -Algorithm MD5).Hash
}
}
Compare-Object -ReferenceObject  $firstList -DifferenceObject $secondList -Property relativePath, hash

你能再解释一下这个练习的用例吗?我觉得其他一些工具在这方面会比在PowerShell中尝试更有效,比如一个合适的文件同步工具。

不管怎样,既然你问:

  • 您需要多久检查一次哈希
  • 也许只检查最近更新的文件,而不是检查所有12k文件
  • Posh v7支持foreach并行,可以加快进程

相关内容

  • 没有找到相关文章

最新更新