Для того, что бы через powershell удалить файлы старше даты сначала нужно установить дату, которая нам нужна:
Можно дату задать несколькими днями назад. Это удобно для скриптов, которые будут все время висеть в планировщике:
Навигация по статье
На моем примере дата получится в таком формате:
Т.к. я не установил минуты и секунды – они взялись по умолчанию из текущего дня. Если мы не установим год, например, то он будет текущим 2019.
Получение списка файлов для последующего удаления в Powershell
Далее нам нужно использовать Get-Childitem для того что бы получить все файлы:
- Path – путь до директории
- Include – включает, в моем случае, все файлы которые кончаются на txt
- Recurse – поиск файлов не только в текущей папке, но и в подпапках.
У файла есть несколько свойств c датами (datetime). Все их увидеть можно так:
- CreationTime
- CreationTimeUtc
- LastAccessTime
- LastAccessTimeUtc
- LastWriteTime
- LastWriteTimeUtc
UTC значит, что дата будет в формате всемирного времени.
Удаление через powershell файлов старше даты
Меня интересует удаление файлов по дате создания. Для этого сделаем так:
Т.е. для каждого файла где свойство CreationDate (дата создания файла) LessThen (больше чем) дата в переменной произвести удаление. Таким образом мы удалили в powershell файлы старше определенной даты. Мы можем использовать и другие операторы сравнения:
- lt – меньше
- le – меньше или равно
- gt – больше
- ge – больше или равно
- ne – не равно
С рекурсивным обходом папок
Powershell удаление файлов старше n дней : 1 комментарий
gci ‘E:IIS Logs’ -Directory | gci -Include ‘*.log’,’*.blg’ -Recurse | ? LastWriteTime -lt (Get-Date).AddDays(-30) | Remove-Item
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.
Если внутри корпоративной сети используются всевозможные сетевые ресурсы доступные множеству пользователей и выполняющие функции файлообменников, например сетевые папки или каталоги FTP серверов, то иногда может возникнуть необходимость в обслуживании таких ресурсов, например периодического удаления файлов и подкаталогов имеющих определённый срок давности. Хочу поделиться маленьким примером когда-то найденного (уже не вспомню где) PowerShell скрипта, который решает у меня такую задачу
Другим примером применения такого скрипта может стать необходимость периодической очистки каких либо текстовых лог-файлов.
Если например присутствует дополнительное условие, при котором нельзя удалять вложенные каталоги можно заменить строчку…
Если на файловом сервере несколько каталогов которые нужно обслуживать на предмет удаления старых данных и при этом условия удаления различаются, то можно создать единый командный файл который будет запускаться в последствии из Планировщика задач. Пример содержимого такого командного файла
В описании к скрипту я так же нашёл информацию о том что можно производить вызов скрипта с передачей параметров, например так:
но если честно, такой тип вызова я не использую и даже не проверял.
Созданный командный файл располагаем в каталоге с скриптами и выполняем уже непосредственное его вызов из Планировщика задач по нужному нам расписанию