You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Powershell中获取文件哈希及创建、修改时间等属性

PowerShell获取文件属性及哈希值解决方案

命令编写问题修复

你遇到的报错是因为Get-FileHash直接插入管道时,输出的哈希对象会覆盖原本的文件属性对象,导致后续Select无法读取到文件的时间、名称属性。你可以通过计算属性将哈希值整合到Select-Object的返回结果中,无需拆分管道流程,正确命令如下:

# 递归获取所有文件的名称、路径、创建时间、修改时间、SHA256哈希值
gci -Recurse -File | select Name, FullName, CreationTime, LastWriteTime, `
@{
    Name = 'SHA256Hash'
    Expression = { (Get-FileHash -Path $_.FullName -Algorithm SHA256).Hash }
}

参数说明:

  • -File参数过滤掉文件夹对象,避免对文件夹调用哈希计算报错
  • 自定义计算属性中$_指代当前管道传递的单个文件对象,调用Get-FileHash后提取哈希值赋值给自定义的SHA256Hash字段
  • 需要其他哈希算法时,将SHA256替换为MD5、SHA1等参数即可

时间属性比对说明

直接比对原生的CreationTime、LastWriteTime不是通用最优方案,存在两个常见兼容问题:

  1. 精度兼容问题:部分文件系统(如FAT32)仅支持2秒级的时间精度,跨文件系统拷贝文件后,直接全等比对毫秒级精度的DateTime对象会出现误判。这种场景下建议将时间转换为统一精度后再比对,示例如下:
# 转换为秒级精度的UTC时间字符串比对,同时规避时区差异问题
$sourceTime = $file.CreationTimeUtc.ToString("yyyy-MM-dd HH:mm:ss")
$targetTime = $targetFile.CreationTimeUtc.ToString("yyyy-MM-dd HH:mm:ss")
  1. 时区差异问题:跨时区的设备生成的文件时间会带时区偏移,直接比对本地时间会出现偏差,建议统一使用CreationTimeUtc、LastWriteTimeUtc的UTC时间属性做比对。

如果是做文件一致性校验,建议结合文件大小、哈希值和时间属性三者共同判断,避免时间被篡改或系统自动更新时间导致的误判。


内容的提问来源于stack exchange,提问作者user10191234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:27:02