$timeLimit1 = Get-Date.AddDays(-90)
Get-ChildItem <path> | ? {$_.LastWriteTime -le $timeLimit1 } | Remove-Item
所以我有更容易的部分,但我想弄清楚如何做一些更复杂的事情。
我正在设置备份删除例程。要求是保留最后90天的备份,然后是当前年度之前的每个月的最后一天,最后是12月31日前两年的备份。
除了一张支票外,我找不到任何其他例子;是否可以进行多项检查以实现自动化。
答案 0 :(得分:2)
我建议编写一个自定义过滤器来应用逻辑,例如
filter MyCustomFilter{
$File = $_
$FileDate = $File.LastWriteTime
$Now = (Get-Date)
$FileAgeDays = ($Now - $FileDate).TotalDays
if (
# Keep files for at least 90 days
( $FileAgeDays -lt 91
) -or
# Keep files from last day of the month this year
( $FileDate.Year -eq $Now.Year -and
$FileDate.Month -ne $FileDate.AddDays(1).Month
) -or
# Keep files from 31 Dec for up to 2 years
( $FileAgeDays -lt ( 2 * 365 ) -and
$FileDate.Month -eq 12 -and
$FileDate.Day -eq 31
)
) {
# File should be kept, so nothing is returned by the filter
} else {
# File should be deleted, so pass the file down the pipeline
write-output $File
}
}
现在您的整体代码看起来像这样:
get-childItem -path <path> |
where-object { -not $_.PSIsContainer } |
MyCustomFilter |
Remove-Item
毋庸置疑,在生产系统上放松之前,需要进行适当的测试。
编辑:一个月最后一天的简单测试
我想到了整个月的最后一天&#39; test,它只是将被测日期的month
属性与第二天的month
属性进行比较,例如。
$FileDate.Month -ne $FileDate.AddDays(1).Month
如果$true
是该月的最后一天,将返回$FileDate
。
答案 1 :(得分:-1)
只需创建一个&#34;特殊&#34;的数组。将日期添加到过滤器中。
<!-->displaying images filenames in tabular view<--><thead>
<tr>
<th >#</th>
<th >Image Name</th>
<th >File Format</th>
<th>Action</th>
</tr>
</thead><tbody>
@foreach( $variable_declared_in_download_function as $some_random_variable) <tr>
<td class="text-left">{{ asset('img/') }}></td> <td class="text-left">{{ $jan2017->format}}</td>
<td>buttons here (delete/download)</td>
</tr> @endforeach
</tbody>
</table>
@endsection
我还会创建一个功能来找到&#34;特殊&#34;日期。