【问题标题】:How to add checksum to Get-ChildItem -Recurse?如何将校验和添加到 Get-ChildItem -Recurse?
【发布时间】:2020-10-13 15:34:27
【问题描述】:

我一直在使用一个非常简单的 Get-ChildItem -Recurse 命令来生成文件目录的 CSV 清单,以评估所述文件的保留/删除。我对 PowerShell 很陌生,我正在努力使代码尽可能简单,这是我成功使用的代码:

Get-ChildItem -Recurse | Select-Object FullName, Name, Extension, Length, CreationTime, LastAccessTime, LastWriteTime | Export-Csv "C:\file\path\file_list.csv"

但我想向 Select-Object 添加校验和,我尝试了以下代码,但它创建了一个只有校验和而没有其他文件数据的 CSV。校验和应该是 CSV 中其他 Select-Object 参数旁边的一列。

Get-ChildItem -Recurse | Get-FileHash -Algorithm MD5 | Select-Object FullName, Name, Extension, Length, CreationTime, LastAccessTime, LastWriteTime, Hash | Export-Csv "C:\file\path\file_list.csv"

非常感谢任何帮助,我是 PowerShell 的新手,谢谢!

【问题讨论】:

  • 道格的回答很好;如果您对底层功能感到好奇:他使用了calculated property,这是一种基于哈希表的方式 (@{ ... }) 来动态定义属性。

标签: powershell


【解决方案1】:

由于您想将其添加为附加属性,您可以像这样使用calculated property

Get-ChildItem -Recurse |
    Select-Object FullName, Name, Extension, Length, CreationTime, LastAccessTime, LastWriteTime, @{n="Hash";e={(Get-FileHash $_.FullName -Algorithm MD5).hash}} |
        Export-Csv "C:\file\path\file_list.csv"

为了使其更易于阅读和维护,您可以使用一个变量来保存所需的属性,如下所示。

$props = "FullName",
         "Name",
         "Extension",
         "Length",
         "CreationTime",
         "LastAccessTime",
         "LastWriteTime",
         @{n="Hash";e={(Get-FileHash $_.FullName -Algorithm MD5).hash}}

Get-ChildItem -Recurse | Select-Object $props | Export-Csv "C:\file\path\file_list.csv"

【讨论】:

  • 谢谢道格!我稍微修改了您的代码,因为某些文件没有生成哈希,这会强制为每个文件生成哈希:Get-ChildItem -Recurse -Force | Select-Object FullName, Name, Extension, Length, LastWriteTime, CreationTime, LastAccessTime, @{n='Hash SHA256';e={(Get-FileHash $_.FullName -Algorithm SHA256).hash}} | Export-Csv “C:\file\path\filelist.csv”
  • 你改成$_.fullname了吗?如果您想告诉我要更改的内容,我可以为未来的读者编辑帖子。
  • 是的,还有-Force 参数,我认为它揭示了隐藏文件
猜你喜欢
  • 2017-02-21
  • 1970-01-01
  • 2014-01-08
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多