Как удалить файлы старше 10 (например) дней в Windows 2003

После некоторого гугления я понял, что это проще всего сделать на PowerShell.

Если он еще не установлен в системе, то берем тут -> Windows PowerShell 1.0 English-Language Installation Package for Windows Server 2003 . Возможно, выругается что нету .NET Framework Version 2.0 Redistributable Package. Тогда берем его там же, у Мракобесов: Microsoft .NET Framework Version 2.0 Redistributable Package (x64) или Microsoft .NET Framework Version 2.0 Redistributable Package (x86) . Также нужен как минимум Service Pack 1.

Инсталляция идет типа Далее, Далее, Финиш 🙂
Затем запускаем наш павер шелл и видим синенький экранчик с очень хорошим юзабилити (растягиваемый, работа с буфером мышкой – н ето что убогая стандартная CMD).

Сразу проверяем, разрешено ли у нас запускать скрипты:

Get-ExecutionPolicy

Скорее всего нет – т. е. вернет что-то типа Restricted. Посему юзаем команду, меняющую “политику партии”:

Set-ExecutionPolicy RemoteSigned

Теперь создаем где-нибудь текстовый файл с расширением .ps1 и пишем в него:

#----- получаем текущую дату и пихаем в переменную ----#
$Now = Get-Date
#----- задаем количество дней старше которых файлы будут удаляться ----#
$Days = "10"
#----- задаем папку которая будет чиститься ----#
$TargetFolder = "C:ApplicationsLogs"
#----- вот тут самое прикольное - задаем маску, то ли это просто расширение ----#
#----- то ли это будут файлы какогото спец формата, например такие PROG_Date.log где Date - дата ----#
$Extension = "PROG*.log"
#----- здесь делаем дату за которой будут удаляться файлы ---#
$LastWrite = $Now.AddDays(-$Days)
#----- получаем список файлов. Если не надо рекурсии то убираем соотв. параметр ---#
#----- если надо удалить тупо все файлы старше 10 дней то убираем -Include $Extension ---#
$Files = Get-Childitem $TargetFolder -Include $Extension -Recurse | Where{$_.LastWriteTime -le "$LastWrite"}
#----- в цикле вербозно удаляем все полученные файлы ---#
foreach ($File in $Files)
{
if ($File -ne $NULL)
{
write-host "Deleting File $File" -ForegroundColor "DarkRed"
Remo ve-Item $File.FullName | out-null
}
else
{
Write-Host "No more files to delete!" -foregroundcolor "Green"
}
}

Напоследок, если хотим сделать shedule, то пишем батник с содержимым типа такого:
%SystemRoot%system32windowspowershellv1.0powershell.exe -command “c:scriptsdelete.ps1”
Где вначале идет путь к павер шеллу (у вас он может отличаться), а в конце – путь к файлу со скриптом.
Затем пихаем батник в планировщик.
Усё, товарищи. 
http://geckich.blogspot.com/

Leave a Reply

Your email address will not be published. Required fields are marked *