我有以下脚本,可以正常工作,列出要删除的候选文件。但我无法弄清楚在哪里或如何添加Remove-Item
指令以实际删除文件,而不会丢失导出文件。顺便说一句,Write-Host 日志无法满足,因为我需要记录文件大小、上次写入时间等。它必须是 CSV 导出(就像我在这个脚本中所拥有的那样)。
当然,我可以重新运行Get-ChildItem
and 而不是通过管道输出到Select-Object
,管道输出到Remove-Item
,但这意味着会浪费大量时间。
我的脚本:
$EXTERNALFILE = "C:\DataCleaning\Scripts\FilesToRemove.txt"
$DESTINATION_DIR = "C:\DataCleaning\Logs\"
$LOGFILECSV = "${DESTINATION_DIR}\Removed_$(Get-Date -f yyyy-MM-dd_hh-mm-ss).csv"
$List = Get-Content $EXTERNALFILE
$REPORT = foreach ($Data in $List) {
$Data = $Data -split(';')
$SOURCEDIR = $Data[0]
$FILTERMASK = $Data[1]
$RETENTION = (Get-Date).AddMonths(-$Data[2])
Get-ChildItem -LiteralPath $SOURCEDIR -File -Recurse |
Where-Object {($_.LastWriteTime –lt $RETENTION) -and ($_.Extension -notmatch $FILTERMASK)} |
Select-Object FullName, LastWriteTime, CreationTime,
@{Name="Size (MB)";Expression={[Math]::Round($_.Length /1MB, 2)}},
@{Name="Age (Days)";Expression={(((Get-Date) - $_.LastWriteTime).Days)}}
}
$REPORT | Export-Csv -Delimiter "|" -NoTypeInformation -Encoding UTF8 -Path $LOGFILECSV