1

我正在编写一个脚本来收集 C: 驱动器中的所有文件哈希,但不会抓取所有内容。有人有想法么?我尝试了各种各样的东西。

gci -Path C:\ -Recurse | Get-FileHash -Algorithm MD5 | Out-File C:\test.txt
4

1 回答 1

3
  • 由于您正在计算文件哈希,因此请使用开关Get-ChildItem仅返回文件。-File

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

  • 您必须使用提升(以管理员身份)运行该命令,以确保您可以访问所有文件,但仍可能拒绝访问某些目录和文件。

    • 默认情况下,这发生在隐藏的、系统定义的联结中,例如在用户配置文件的根目录中(例如,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-Filecmdlet 将命令输出的用于显示的表示形式保存到一个文件中,该文件不是为进一步的编程处理而设计的。
要保存适合后续编程处理的表示形式,请使用 cmdlet,例如Export-Csv.

于 2020-06-28T18:23:56.720 回答