PowerShell递归筛选30天前文件异常:仅返回单个文件问题排查
PowerShell筛选过期文件问题解决
你的脚本里已经用了-File参数,这个参数会让Get-ChildItem只返回文件,所以Where-Object里的-not $_.PSIsContainer完全是多余的,不过这不会导致筛选错误。子目录文件没被正确筛选,大概率是以下几个原因:
修正后的脚本
$folderTree = 'P:\Root\SubFolderRoot' $refDate = (Get-Date).AddDays(-30) # 遍历所有文件,自动跳过无权限访问的目录 Get-ChildItem -Path $folderTree -File -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt $refDate } | ForEach-Object { Write-Host $_.FullName }
排查步骤
- 先确认所有文件是否被正确枚举:运行
Get-ChildItem -Path $folderTree -File -Recurse | Measure-Object,看计数是否接近你说的2000个。如果差很多,说明有目录没被访问到,去掉-ErrorAction SilentlyContinue再跑一次,看有没有权限报错。 - 手动验证文件的实际修改时间:随便找一个你认为应该被筛选出来的子目录文件,运行
Get-ChildItem "P:\Root\SubFolderRoot\SubFolder1\某个文件" | Select-Object LastWriteTime,对比这个时间和$refDate的值(直接在控制台输$refDate就能看到),确认文件时间确实早于参考日期。 - 检查是否有文件系统的特殊设置:比如某些文件的属性是只读或者系统文件?不过
-File参数默认会包含这些,除非你加了-Attributes过滤。
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

