【问题标题】:find unique file ID through powershell通过powershell查找唯一的文件ID
【发布时间】:2020-02-10 07:51:08
【问题描述】:

修改现有文件后,我想了解用于修改文件的软件是否创建并保存了新文件(丢弃旧文件)或更改了原始文件。

目前我正在使用带有Get-ChildItem的powershell:

Get-ChildItem D: -Force | Select-Object Name, CreationTime, LastWriteTime, Length

这仅适用于相关软件未在新文件中重新应用原始 CreationTime 的情况。如果是这样 (like e.g. Excel does when editing existing files),无论原始文件被修改还是创建新文件,结果看起来都是一样的。我想我可以使用 object identifier 来做到这一点,但我没有设法用 power shell 实现它显示文件的对象 ID,我是否忽略了 properties 中的某些内容或者我必须使用完全不同的命令?

使用-Property * 显示所有属性,有点告诉我我完全走错了方向(它没有给我任何可用的属性,至少不适合我的用例):

Get-ChildItem D: -Force | Select-Object -Property *

我尝试了ID property,当然,它不适用于文件对象。从理论上讲,我可以从 NTFS 的 USN 日志中获取文件 ID,但不幸的是,在我的用例中,包含该文件的驱动器上的日志已停用。

【问题讨论】:

  • 我在 stackoverflow.com/questions/5052477/… 中发现了一些其他方法,但无法让它们中的任何一个起作用 - 至少到目前为止
  • 您实际上想用这个“ID”做什么?正如您发现的那样,程序可能只会混淆文件属性,例如创建日期,因此如果没有一些文件系统级别的日志,我不确定“更新”文件和编写新文件之间是否存在任何功能差异。如果你想通过文件内容,你可以使用 Get-FileHash 来获取文件数据的唯一哈希。
  • @Josh 正如我在第一句话中所说,我想检查哪些程序修改了现有文件以及哪些程序创建了新文件(丢弃原始文件)。由于文件将被更改,因此不确定校验和在这种情况下有何帮助?!
  • @Josh PS。一种可能的用例(或功能差异)是查看是否可以在兴奋地保存新版本后从驱动器上的已删除临时文件中恢复原始文件。

标签: powershell uniqueidentifier


【解决方案1】:

您要查找的是 NTFS 文件 ID。没有 PowerShell 原生 cmdlet,但是有这个命令:

fsutil file queryfileid <filename>

Microsoft Office 是一个如您所描述的那样运行的软件示例 - 每当您点击“保存”来修改现有文件时,它首先将数据写入一个全新的文件,然后删除旧文件并重命名新文件一个与旧的同名。因此,文件 ID 会发生变化。

如果您尝试使用文本文件进行此操作,然后打开、更改并保存它,文件 ID 不会更改,这表明记事本写入了同一个文件。

您可以通过运行 Sysinternals Process Monitor(可从 Microsoft 的下载站点获得)来观察这种行为;它应该显示单个文件的创建、写入等。

【讨论】:

  • 哦,谢谢你的回答......我希望我还记得原来的问题。我会尝试解决方案并让你知道。如果我忘记了,请随时发送提醒!
猜你喜欢
  • 1970-01-01
  • 2016-07-04
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多