Get-FileHash 在整个 C: 驱动器

Get-FileHash in the entire C: drive

我正在编写一个脚本来收集 C: 驱动器中的所有文件哈希值,但没有抓取所有内容。谁有想法?我尝试了多种方法。

gci -Path C:\ -Recurse | Get-FileHash -Algorithm MD5 | Out-File C:\test.txt
  • 由于您正在计算 file 哈希值,因此使用 -File 开关仅生成 Get-ChildItem return 文件.

  • 为了也处理隐藏的文件,另外使用-Force开关。

  • 您必须 运行 带有 elevation 的命令(作为管理员)以确保您可以访问所有文件,尽管它仍然是可能的拒绝访问某些目录和文件。

    • 默认情况下,这种情况发生在隐藏的、系统定义的路口,例如在仅为向后兼容而存在的用户配置文件的根目录中(例如,C:\Users\jdoe\Cookies);但是,您可以忽略那些,因为它们只是指向其他可以访问的目录。
    • 请注意,在这种情况下,Get-ChildItem 也会忽略任何指向其他驱动器或目录(连接、符号链接、挂载点)的 NTFS 重分析点,即使它们 可访问 - 这可能是您想要的。
    • 通过使用 -ea SilentlyContinue -ev errs-ErrorAction SilentlyContinue -ErrorVariable errs 的缩写),您可以在之后检查数组 $errs 以查看哪些文件,具体而言,无法访问。
# Examine $errs afterwards to see which paths couldn't be accessed.
Get-ChildItem C:\ -Recurse -File -Force -ea SilentlyContinue -ev errs | 
  Get-FileHash -Algorithm MD5 | 
    Out-File C:\test.txt

注意:Out-File cmdlet 将命令输出的 for-display 表示保存到文件中,该文件不是为进一步的编程处理而设计的。
要保存 适合后续编程处理的表示,请使用 cmdlet,例如 Export-Csv.