19

目前的代码

get-childitem c:\pstbak\*.* -include *.pst | Where-Object { $_.LastWriteTime -lt (get-date).AddDays(-3)} |

本质上,我要做的是获取上面文件夹中所有 PST 文件的列表,这些文件的更新时间超过 3 天。然后我想计算结果。上面的代码没有错误,但带回零结果(文件夹中肯定有比三天更新的 PST 文件。有人知道吗?

4

4 回答 4

49

尝试这个:

(Get-ChildItem -Path c:\pstbak\*.* -Filter *.pst | ? {
  $_.LastWriteTime -gt (Get-Date).AddDays(-3) 
}).Count
于 2013-06-28T15:56:36.130 回答
24

与之前的回复非常相似,但来自当前目录,查看任何文件并且仅查看 4 天前的文件。这是我研究所需要的,上面的答案都非常有帮助。谢谢。

Get-ChildItem -Path . -Recurse| ? {$_.LastWriteTime -gt (Get-Date).AddDays(-4)}
于 2016-03-25T16:31:08.947 回答
2

这是 Dave Sexton 提供的解决方案的一个小更新。很多时候你需要多个过滤器。Filter 参数只能采用单个字符串,而 -Include 参数可以采用字符串数组。如果你有一个大文件树,那么只获取日期来比较一次,而不是每个文件也是有意义的。这是我的更新版本:

$compareDate = (Get-Date).AddDays(-3)    
@(Get-ChildItem -Path c:\pstbak\*.* -Filter '*.pst','*.mdb' -Recurse | Where-Object { $_.LastWriteTime -gt $compareDate}).Count
于 2015-10-10T11:42:39.830 回答
1

我只想将此作为评论添加到上一个答案中,但我不能。我尝试了Dave Sexton的答案,但如果计数为 1,则会出现问题。即使返回一个对象,这也会强制数组。

([System.Object[]](gci c:\pstback\ -Filter *.pst | 
    ? { $_.LastWriteTime -gt (Get-Date).AddDays(-3)})).Count

如果为空,它仍然不会返回零,但测试 '-lt 1' 有效。

于 2014-04-10T17:52:19.120 回答