使文件夹中的文件过期:x 天后删除文件

Bre*_*t G 12 windows powershell windows-server-2003 file-sharing batch

我希望在每个人都可以访问的 Windows 共享驱动器中创建一个“放置文件夹”。如果文件在文件夹中存放超过 X 天,我希望自动删除文件。

但是,似乎我发现的所有方法都可以使用文件的上次修改日期、上次访问时间或创建日期。

我正在尝试将此文件夹设为用户可以将文件放入其中以与某人共享的文件夹。如果有人将文件复制或移动到此处,我希望时钟在此时开始滴答作响。但是,除非有人实际修改了文件,否则文件的最后修改日期和创建日期不会更新。上次访问时间更新太频繁了……看来只要在windows资源管理器中打开一个目录就会更新上次访问时间。

有谁知道解决这个问题的方法?我认为每天对文件的散列进行编目,然后根据早于某个日期的散列使文件过期可能是一个解决方案......但获取文件的散列可能很耗时。

任何想法将不胜感激!

注意:
我已经在这里查看了很多答案……查看了文件服务器资源监视器、powershell 脚本、批处理脚本等。它们仍然使用上次访问时间、上次修改时间或创建时间……如上所述,它不符合上述需求。

mur*_*onc 5

我们结合使用了 powershell 脚本和策略。该策略指定用户必须在 Drop_Zone 共享中创建一个文件夹,然后将他们想要的任何文件复制到该文件夹​​中。当文件夹使用 7 天(使用 CreationTime)时,powershell 脚本将删除它。

我还在 powershell 脚本中添加了一些日志记录,以便我们可以验证它的操作并打开卷影副本,以防止他们自己完全无能。

这是没有所有日志记录的脚本。

$location = Get-ChildItem \\foo.bar\Drop_Zone
$date = Get-Date
foreach ($item in $location) {
  # Check to see if this is the readme folder
  if($item.PsIsContainer -and $item.Name -ne '_ReadMe') {
    $itemAge = ((Get-Date) - $item.CreationTime).Days
    if($itemAge -gt 7) {
      Remove-Item $item.FullName -recurse -force
    }
  }
  else {
  # must be a file
  # you can check age and delete based on that or just delete regardless
  # because they didn't follow the policy
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 伟大的简单想法,就像@BeowulfNode42 指出的那样。为确保用户必须创建文件夹,将“创建文件/写入数据”ACL 的简单“拒绝”设置为“仅限此文件夹”将确保用户也必须创建子文件夹。 (2认同)