当磁盘使用率低于阈值时删除某些类型的文件

Delete certain type of files when disk usage is below a treshold

我有一个 powershell 脚本,它每天作为预定作业运行并删除超过 30 天的所有日志。但是,如果可用磁盘少于 5 GB space,我希望脚本也删除这些相同的文件。有什么想法是最好的方法吗?

脚本当前的样子如下:

Unregister-ScheduledJob -Name LogRotation -ErrorAction SilentlyContinue
wevtutil set-log Microsoft-Windows-TaskScheduler/Operational /enabled:true
$T = New-JobTrigger -Daily -At "12:37 PM" -DaysInterval 1  
$O = @{
WakeToRun=$true
StartIfNotIdle=$false
MultipleInstancePolicy="Queue"
}
$SB = Get-ChildItem "C:\Folder\*" -Recurse -Include *.log | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-30))} | Remove-Item
Register-ScheduledJob -Trigger $T -ScheduledJobOption $O -Name CTLogRotation -ScriptBlock {$SB}

您可以先查看剩余磁盘space。然后在空闲 space 小于 5Gb

时创建一个不同的脚本块
if (((Get-Volume -DriveLetter C).SizeRemaining / 1Gb) -lt 5) {
    # delete all log files if the remaining size in GB is less than 5
    $SB = Get-ChildItem "C:\Folder" -Recurse -Filter '*.log' -File | Remove-Item -Force
}
else {
    # delete all log files older than 30 days
    $SB = Get-ChildItem "C:\Folder" -Recurse -Filter '*.log' -File | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-30).Date)} | Remove-Item -Force
}

P.S。我正在使用 -Filter '*.log',因为这比 -Include.
快得多 -Filter 但是可以只有一个文件模式。
我还添加了开关 -File,因此代码不会查找目录