目前的代码
get-childitem c:\pstbak\*.* -include *.pst | Where-Object { $_.LastWriteTime -lt (get-date).AddDays(-3)} |
本质上,我要做的是获取上面文件夹中所有 PST 文件的列表,这些文件的更新时间超过 3 天。然后我想计算结果。上面的代码没有错误,但带回零结果(文件夹中肯定有比三天更新的 PST 文件。有人知道吗?
目前的代码
get-childitem c:\pstbak\*.* -include *.pst | Where-Object { $_.LastWriteTime -lt (get-date).AddDays(-3)} |
本质上,我要做的是获取上面文件夹中所有 PST 文件的列表,这些文件的更新时间超过 3 天。然后我想计算结果。上面的代码没有错误,但带回零结果(文件夹中肯定有比三天更新的 PST 文件。有人知道吗?
尝试这个:
(Get-ChildItem -Path c:\pstbak\*.* -Filter *.pst | ? {
$_.LastWriteTime -gt (Get-Date).AddDays(-3)
}).Count
与之前的回复非常相似,但来自当前目录,查看任何文件并且仅查看 4 天前的文件。这是我研究所需要的,上面的答案都非常有帮助。谢谢。
Get-ChildItem -Path . -Recurse| ? {$_.LastWriteTime -gt (Get-Date).AddDays(-4)}
这是 Dave Sexton 提供的解决方案的一个小更新。很多时候你需要多个过滤器。Filter 参数只能采用单个字符串,而 -Include 参数可以采用字符串数组。如果你有一个大文件树,那么只获取日期来比较一次,而不是每个文件也是有意义的。这是我的更新版本:
$compareDate = (Get-Date).AddDays(-3)
@(Get-ChildItem -Path c:\pstbak\*.* -Filter '*.pst','*.mdb' -Recurse | Where-Object { $_.LastWriteTime -gt $compareDate}).Count
我只想将此作为评论添加到上一个答案中,但我不能。我尝试了Dave Sexton的答案,但如果计数为 1,则会出现问题。即使返回一个对象,这也会强制数组。
([System.Object[]](gci c:\pstback\ -Filter *.pst |
? { $_.LastWriteTime -gt (Get-Date).AddDays(-3)})).Count
如果为空,它仍然不会返回零,但测试 '-lt 1' 有效。