我遇到的问题是将-Exclude
命令插入此脚本以帮助避免像".pst"或任何其他指定的文件类型。 我现在确定如何将$exclude
包含在Where-Object
字段中。
$limit = (Get-Date).AddDays(2555)
$path = "\File Path"
$log = "C:Log output"
$exclude = ".pst"
# Delete files older than the $limit. <Use -WhatIf when you want to see what files/folders will be deleted before>
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.LastWriteTime -lt $limit} >$log
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } >> $log
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.LastWriteTime -lt $limit}| Remove-Item -Force -WhatIf
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force -WhatIf
# Delete any empty directories left behind after deleting the old files. <Use -WhatIf when you want to see what files/folders will be deleted before>
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } >> $log
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse -WhatIf
任何想法都非常感谢。
要回答您的特定问题,您可以在Where-Object
中添加另一个查看文件扩展名的子句。请注意,这有效,因为您只有一个扩展名。如果要添加更多,则需要更改运算符。
Get-ChildItem -Path $path -Recurse -Force |
Where-Object { !$_.PSIsContainer -and $_.LastWriteTime -lt $limit -and $_.Extension -ne $exclude } > $log
但是,您应该在代码中查看更好的选项。让 Windows 文件系统完成大部分工作而不是使用Where-Object
进行后处理可以节省您的时间和复杂性。您甚至可以根据情况组合前几行。由于你有 v4,因此可以使用 -File
和 -Directory
开关来仅拉取这些相应的项目。
Get-ChildItem -Path $path -Recurse -Force -File |
Where-Object {$_.LastWriteTime -lt $limit -and $_.CreationTime -lt $limit} |
Add-Content $log
虽然不完全是你的前几行在做什么,但我认为它做了你想做的事情。 请注意-File
开关和组合日期子句。
如果您想记录要删除的内容,您还可以使用Tee-Object
删除一些重复(不是解决此问题的唯一方法)
Get-ChildItem -Path $path -Recurse -Force -File |
Where-Object {$_.LastWriteTime -lt $limit -and $_.CreationTime -lt $limit} |
Tee-Object -FilePath $log |
Remove-Item -Force -WhatIf
我不知道你在哪里需要它,但你也可以使用Get-ChildItem
-Exclude
来省略 pst 文件。
Get-ChildItem -Path $_.FullName -Exclude $exclude -Recurse -Force