使用PowerShell获取共享文件夹1年未访问文件失败的问题求助
解决PowerShell过滤超过1年未访问文件的问题
我一眼就看出你脚本里的关键问题啦——你计算了12个月前的日期,但没把这个结果存回变量里!PowerShell里的AddMonths()和AddYears()方法都是返回一个新的日期对象,不会直接修改原来的$time变量。所以你的过滤条件实际上是拿文件的访问时间和当前时间比,那所有文件自然都会被包含进去,这就是为什么CSV里还有当前年份的文件。
修正后的脚本
方法1:用AddMonths(-12)计算1年前的日期
$time = Get-Date | AddMonths(-12) # 直接把计算后的日期赋值给变量 Get-ChildItem "\\Ajay-1\" -Recurse -File -ErrorAction SilentlyContinue | Where-Object {$_.LastAccessTime -lt $time} | Select-Object FullName, LastAccessTime | Export-Csv "D:\\Time\\Last.csv" -NoTypeInformation
方法2:用AddYears(-1)更直观
$time = Get-Date | AddYears(-1) # 直接计算1年前的日期 Get-ChildItem "\\Ajay-1\" -Recurse -File -ErrorAction SilentlyContinue | Where-Object {$_.LastAccessTime -lt $time} | Select-Object FullName, LastAccessTime | Export-Csv "D:\\Time\\Last.csv" -NoTypeInformation
额外提醒
还有个小细节要注意:Windows系统默认可能会禁用自动更新文件的LastAccessTime属性,这是为了提升文件系统性能。如果发现过滤结果还是不符合预期,可以先检查系统是否开启了这个功能:
fsutil behavior query disablelastaccess
如果返回disablelastaccess=1,说明是禁用状态,你可以用管理员权限运行下面的命令开启,重启电脑后生效:
fsutil behavior set disablelastaccess 0
内容的提问来源于stack exchange,提问作者Ajay
相关产品推荐
相关产品推荐

