Sokolvrn
09-02-2022, 13:53
Коллеги привет! Помогите с написанием скрипта:
Суть такова, есть папка, в ней файлы логов, задача запускать скрипт очистки раз в час (тут вопросов нет), и если свободного места на диске осталось <10% то скрипт удаляет файлы старше 7 дней. Далее через час скрипт через планировщик запустится снова, и допустим места все равно осталось <10%, тогда скрипт должен удалить файлы старше 6 дней и так до текущего (текущий день с логами не удаляем). Есть пока такой, но собрать все в едино из за небольшого опыта не получается:
(Проверяет на свободное место и удаляет файлы за 7 дней)
$percentWarning = 10
$ListDisk = Get-WmiObject -Class Win32_LogicalDisk
Foreach($Disk in $ListDisk){
if ($Disk.size -ne $NULL)
{
$DiskFreeSpace = ($Disk.freespace/1GB).ToString('F2')
$DiskFreeSpacePercent = [Math]::Round(($Disk.freespace/$Disk.size) * 100, 2)
if($DiskFreeSpacePercent -lt $percentWarning)
{
Get-ChildItem -Path "C:\Logs" -Filter *.log | where {$_.LastWriteTime -le (Get-Date).AddDays(-7)} | Remove-Item -Recurse -Force
}
}
}
Суть такова, есть папка, в ней файлы логов, задача запускать скрипт очистки раз в час (тут вопросов нет), и если свободного места на диске осталось <10% то скрипт удаляет файлы старше 7 дней. Далее через час скрипт через планировщик запустится снова, и допустим места все равно осталось <10%, тогда скрипт должен удалить файлы старше 6 дней и так до текущего (текущий день с логами не удаляем). Есть пока такой, но собрать все в едино из за небольшого опыта не получается:
(Проверяет на свободное место и удаляет файлы за 7 дней)
$percentWarning = 10
$ListDisk = Get-WmiObject -Class Win32_LogicalDisk
Foreach($Disk in $ListDisk){
if ($Disk.size -ne $NULL)
{
$DiskFreeSpace = ($Disk.freespace/1GB).ToString('F2')
$DiskFreeSpacePercent = [Math]::Round(($Disk.freespace/$Disk.size) * 100, 2)
if($DiskFreeSpacePercent -lt $percentWarning)
{
Get-ChildItem -Path "C:\Logs" -Filter *.log | where {$_.LastWriteTime -le (Get-Date).AddDays(-7)} | Remove-Item -Recurse -Force
}
}
}