如何使用PowerShell过滤器根据时间区分文件?

IT管理员们最常见的一个问题就是如何使用Windows PowerShell过滤器依据时间找到目标对象。经常以这种形式出现“我需要找到某个日期之前的所有文件。”

第一步就是确定日期:

$date = (Get-Date).AddDays(-90)

括号里面的命令会得到当前日期。AddDays()方法产生日期对象,括号里的-90会得到90天之前的日期。这个方法可以计算闰年、长度不同的与以及所有其他变量,其总是返回一个准确的日期。

在PowerShell v3中,你可以使用Get-ChildItem检索文件列表,使用–recurse包含子文件,使用–file(PowerShell 3中的新参数)返回文件。

Get-ChildItem –Path C:Logs -Recurse –File

Where-Object –Filter { $PSItem.LastAccessTime –lt $date }

这些文件对象具有各种各样的与日期有关的属性,比如LastAccessTime。简单的过滤掉:

Get-ChildItem –Path C:Logs -Recurse –File |

Where-Object –Filter { $PSItem.LastAccessTime –lt $date }

注意,在PowerShell 2中,必须将$PSItem替换为$_。还需要填补2中缺少的–File参数。

Get-ChildItem –Path C:Logs -Recurse |

Where-Object –Filter { -Not ($_.PsIsContainer) } |

Where-Object –Filter { $_.LastAccessTime –lt $date }

不管怎样,这些命令的输出结果都是LastAccessTime是90天之前的那些文件。