Windows Folder And Files Hashes Comparison 資料夾與檔案雜湊值清單與比較
2023-06-26
說明如何使用 PowerShell 來取得所有檔案的 FileHash 用於監督檔案是否有竄改或者不一致的情形,以及說明如何針對兩個資料夾來源比較 Symmetric Difference 的檔案差異。
說明
Get Folder All Files And Its Hashes
$folderPath = "C:\folder1"
$outputFile = "C:\temp\file.csv"
$files = Get-ChildItem -Path $folderPath -File -Recurse
$fileInfoArray = @()
foreach ($file in $files) {
$fileInfoObject = [PSCustomObject]@{
FileName = $file.Name
FilePath = $file.FullName
FileExtension = $file.Extension
FileHash = (Get-FileHash -Path $filePath).Hash
Size = $file.Length
CreatedDate = $file.CreationTime.ToString("yyyy/MM/dd HH:mm:ss")
ModifiedDate = $file.LastWriteTime.ToString("yyyy/MM/dd HH:mm:ss")
}
$fileInfoArray += $fileInfoObject
}
$fileInfoArray | Export-Csv -Path $outputFile -NoTypeInformation
Two Folder Comparison
$folder1 = "C:\folder1"
$folder2 = "C:\folder2"
$outputFile = "C:\filehash.csv"
$hashTable1 = @{}
$hashTable2 = @{}
$result = @{}
$files1 = Get-ChildItem -Path $folder1 -File -Recurse
$files2 = Get-ChildItem -Path $folder2 -File -Recurse
foreach ($file in $files1) {
$hash = (Get-FileHash -Path $file.FullName).Hash
$hashTable1[$hash] = $file
}
foreach ($file in $files2) {
$hash = (Get-FileHash -Path $file.FullName).Hash
$hashTable2[$hash] = $file
}
# Add hashTable1 distinct item to result
foreach ($key in $hashTable1.keys) {
if (-not $hashTable2.Contains($key)) {
$result[$key] = $hashTable1[$key]
}
}
# Add hashTable2 distinct item to result
foreach ($key in $hashTable2.keys) {
if (-not $hashTable1.Contains($key)) {
$result[$key] = $hashTable2[$key]
}
}
$fileInfoArray = @()
foreach ($file in $result.values) {
$fileInfoObject = [PSCustomObject]@{
FileName = $file.Name
FilePath = $file.fullName
FileExtension = $file.Extension
FileHash = (Get-FileHash $file.FullName).Hash
Size = $file.Length
CreatedDate = $file.CreationTime.ToString("yyyy/MM/dd HH:mm:ss")
ModifiedDate = $file.LastWriteTime.ToString("yyyy/MM/dd HH:mm:ss")
}
$fileInfoArray += $fileInfoObject
}
$fileInfoArray | Export-Csv -Path $outputFile -NoTypeInformation
相關技巧
如果是想要從眾多的檔案當中,比對 Hash 找到檔案則可以參考 PowerShell Find File With FileHash (比對 FileHash 搜尋檔案)。