【问题标题】:Get-FileHash in the entire C: driveGet-FileHash 在整个 C: 盘
【发布时间】:2020-10-18 21:35:06
【问题描述】:

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

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

【问题讨论】:

  • 它会静默忽略文件和/或文件夹,还是会产生错误消息?您运行脚本的用户是否可以访问您想要哈希的所有文件?
  • 脚本确实有 SilentlyIgnore 变量,因为我收到了被拒绝的消息。用户确实有权访问所有文件。
  • 如果您收到被拒绝的消息,那么确实该用户无权访问所有文件。有一些系统文件除了系统之外没有人可以访问,很可能是它们。

标签: powershell get-filehash


【解决方案1】:
  • 由于您正在计算 file 哈希,因此请使用 -File 开关使 Get-ChildItem 仅返回文件。

  • 为了也处理隐藏文件,另外使用-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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 2019-10-24
    • 2020-09-05
    相关资源
    最近更新 更多