我可以防止 PowerShell 脚本删除移动和剪切的文件吗?

Can I keep a PowerShell script from deleting moved and cut files?

我需要删除 public 文件夹中超过 14 天的所有文件。我拼凑了一个 PowerShell 脚本,它几乎可以满足我的需要。 . .唯一的问题是,如果用户将文件移动到文件夹中——而不是复制它——如果该文件最后一次访问是在 14 天前,我的脚本将删除该文件,即使它已移动到 public同一天的文件夹。剪切和粘贴也会发生同样的事情。所以这是一个相当严重的问题。

这是我的脚本:

# Delete all files older than "file_age" days, at "path".
$path = "C:\Users\emcguire\Desktop\Test"
$file_age = "-14"

$current_date = Get-Date
$date_to_delete = $current_date.AddDays($file_age)

Get-ChildItem $path -Recurse | Where-Object { $_.LastAccessTime -lt $date_to_delete } | Remove-Item

我是 PowerShell 的新手,所以我可能遗漏了一些非常明显的东西。有没有一种简单的方法来检查已移入文件夹但未更改其访问时间戳的文件?有没有更好的方法来解决这个问题?

感谢任何帮助!

属性 LastAccessTime 是出了名的回避 属性。尽可能先尝试使用 LastWriteTime。此外,所有这些属性都是陈旧的,这意味着它们在您调用它们时不会刷新。使用此代码调用刷新方法以确保在查询 属性:

之前获得最新的文件系统信息
$file = c:\somefile.txt
$fileObj = New-Object System.IO.FileInfo $file
$fileObj.Refresh()

由于您希望根据文件在存档目录中的时间长度执行操作,因此您可能需要为 CreationTime 属性赋值。我在下面添加了一个 link 到您的选择列表中,以防有更好的选择满足您的需求。

For reference on the refresh method

For reference on properties to value