Довольно часто возникает необходимость удаления старых файлов в определенной папке. Чаще всего это нужно для очистки логов или устаревших бэкапов. В данной статье мы рассмотрим PowerShell  скрипт для удаления файлов старше n дней.

Для начала нам необходимо запустить специальную утилиту Windows PowerShell ISE. В ней очень удобно писать и отлаживать скрипты. Далее, если ранее вы не использовали powershell, то необходимо предоставить разрешения на выполнения скриптов. Обратите внимание, что для того чтобы изменять политики системы Windows PowerShell ISE необходимо запускать от имени администратора.

Set-ExecutionPolicy RemoteSigned

Вводим команду и нажимаем ввод. Нам будет показано окно запроса подтверждения. Нажимаем «Да».

Если все успешно, то курсор будет переведен на следующую строку. Обратите внимание, что данные действия достаточно выполнить всего один раз и не повторять перед каждым запуском скрипта.

Теперь напишем сам скрипт. Выглядеть он будет следующим образом:

# Выполняем настройку скрипта.
$TargetFolder = "C:\Program Files\Temp\Trace" # Путь к папке логов.
$Period = "-7" # Количество хранимых дней.

# Вычисляем дату после которой будем удалять файлы.
$CurrentDay = Get-Date
$ChDaysDel = $CurrentDay.AddDays($Period)
 
# Удаление файлов, дата создания которых больше заданного количества дней
GCI -Path $TargetFolder -Recurse | Where-Object {$_.CreationTime -LT $ChDaysDel} | RI -Recurse -Force 
 
# Удаление пустых папок
GCI -Path $TargetFolder -Recurse | Where-Object {$_.PSIsContainer -and @(Get-ChildItem -Path $_.Fullname -Recurse | Where { -not $_.PSIsContainer }).Count -eq 0 } | RI -Recurse

Данный скрипт выполнит удаление всех файлов и вложенных папок в указанной директории.

Теперь нам остается только сохранить данный скрипт в файл и выполнять его вызов при необходимости или настроив автоматический запуск скрипта в планировщике задач Windows.

 

shwan

Программист .NET

×
%d такие блоггеры, как: