首页 > 解决方案 > 通过powershell查找唯一的文件ID

问题描述

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

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

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

这仅在相关软件未CreationTime在新文件中重新应用原始文件时才有效。如果确实如此(例如 Excel 在编辑现有文件时所做的那样),则无论原始文件被修改还是创建新文件,结果看起来都是一样的。我想我可以使用对象标识符来做到这一点,但我没有设法用 power shell 实现它显示它显示文件的对象 ID,我是否忽略了属性中的某些内容,或者我是否必须完全使用不同的命令?

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

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

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

标签: powershelluniqueidentifier

解决方案


您正在寻找的是 NTFS 文件 ID。没有 PowerShell 本机 cmdlet,但有以下命令:

fsutil file queryfileid <filename>

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

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

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


推荐阅读