当磁盘使用率低于阈值时删除某些类型的文件
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
,因此代码不会查找目录
我有一个 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
,因此代码不会查找目录