📜  md5 checksum dir powershell (1)

📅  最后修改于: 2023-12-03 14:44:14.258000             🧑  作者: Mango

计算目录下文件的 MD5 校验和 - PowerShell

在程序员的日常工作中,文件校验和是一项非常重要的任务。MD5 校验和是一种常用的校验和算法,它可以通过对文件的二进制内容进行加密的方式,生成一个唯一的 32 位字符串,用来验证文件的完整性。

本文将介绍如何使用 PowerShell 来计算目录下所有文件的 MD5 校验和。

计算单个文件的 MD5 校验和

首先,我们需要编写一个函数来计算单个文件的 MD5 校验和。

function Get-FileMD5Checksum($Path) {
    $Hasher = [System.Security.Cryptography.MD5]::Create()
    $FileStream = [System.IO.File]::OpenRead($Path)
    $Hash = [System.BitConverter]::ToString($Hasher.ComputeHash($FileStream))
    $FileStream.Close()
    return $Hash.Replace("-", "").ToLower()
}

该函数接受一个文件路径 $Path 作为参数,并返回对应文件的 MD5 校验和。该函数内部使用 .NET Framework 的 System.Security.Cryptography.MD5 类,通过读取文件的二进制内容进行计算。

计算目录下所有文件的 MD5 校验和

接下来,我们需要编写一个函数来递归计算目录下所有文件的 MD5 校验和。

function Get-DirectoryMD5Checksum($Path) {
    $Files = Get-ChildItem -Path $Path
    $Checksums = @{}
    foreach ($File in $Files) {
        if ($File.PSIsContainer) {
            $Checksums += Get-DirectoryMD5Checksum $File.FullName
        } else {
            $Checksums.Add($File.FullName, Get-FileMD5Checksum $File.FullName)
        }
    }
    return $Checksums
}

该函数接受一个目录路径 $Path 作为参数,并返回一个哈希表(Dictionary),其中键为每个文件的完整路径,值为对应文件的 MD5 校验和。

该函数内部使用 Get-ChildItem 命令递归获取目录下所有文件和子目录,然后根据文件和目录的类型分别处理。对于目录,函数递归调用自身。对于文件,函数调用上面定义的 Get-FileMD5Checksum 函数,并将返回值存储在哈希表中。

使用示例

最后,我们可以使用以下示例代码来测试上述函数:

$Path = "C:\Users\Test"

$Checksums = Get-DirectoryMD5Checksum $Path
$Checksums.GetEnumerator() | Sort-Object Name | ForEach-Object {
    Write-Host $_.Name ": " $_.Value
}

该示例首先指定了一个目录路径 $Path,然后调用 Get-DirectoryMD5Checksum 函数递归计算该目录下所有文件的 MD5 校验和,并存储在哈希表 $Checksums 中。最后,示例使用 GetEnumerator() 方法获取哈希表中的键值对,并按照键名排序和格式化输出。

结论

通过本文介绍的方法,程序员可以轻松地使用 PowerShell 计算目录下所有文件的 MD5 校验和。这有助于确保文件完整性、减少错误和提高安全性。