powershell - 通过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,但不幸的是,在我的用例中,该日志在包含该文件的驱动器上被停用。
解决方案
您正在寻找的是 NTFS 文件 ID。没有 PowerShell 本机 cmdlet,但有以下命令:
fsutil file queryfileid <filename>
Microsoft Office 是一个行为如您所描述的软件示例 - 每当您点击“保存”来修改现有文件时,它首先将数据写入一个全新的文件,然后删除旧文件并将新文件重命名为与旧的同名。因此,文件 ID 会更改。
如果您尝试对文本文件进行此操作,然后打开、更改并保存它,则文件 ID 不会更改,这表明记事本写入了同一文件。
通过运行 Sysinternals Process Monitor(可从 Microsoft 的下载站点获得),您可能会观察到这种行为;它应该显示单个文件的创建、写入等。
推荐阅读
- javascript - 以自定义方式对数组进行排序?
- javascript - Reactstrap 工具提示被放置在整个 div 的底部,而不是它的子元素
- mysql - 如何通过 Node Js 模块文件运行 MySQL 查询
- c# - 为什么不能区域测试点的范围?
- javascript - 如何在 React with Typescript 中传递具有所需道具的组件数组?
- python - 如何使用 for 循环打印乘法表?
- node.js - 节点 RabbitMQ 消费消息并为每条消息做一些事情
- mysql - mysql group_concat 和 group by 不工作
- javascript - 数学函数总是显示 0 或根本不工作
- c++ - 有没有办法使用 libxml2 自动检测根标签中写入的命名空间?