AVT007 Ответов: 1

Сценарии Powershell для удаления файлов журналов через 90 дней?


Сценарий, над которым я работаю, должен удалить файлы журнала в формате .jrn через 90 дней. Имя файла-это сама дата. например.20200720.jrn, но скрипт удаляет все файлы после выполнения. Пожалуйста, помогите обязательно.
Кроме того, для инициалов, таких как ABCD20200720.jrn, он работает отлично, но только для 20200720.jrn он также удаляет последний файл.

Что я уже пробовал:

$now = Get-Date
Get-ChildItem "C:\Logs" -Filter '*.jrn' | 
foreach {
    if ($_.basename -match " $now (?<year>\d{04})(?<month>\d{2})(?<day>\d{2})$")
    {
        $fileData = Get-Date -Year $Matches.year -Month $Matches.month -Day $Matches.day `
        $_ | Add-Member -MemberType NoteProperty -Name 'DateFromName' -Value $fileData -PassThru
    }
} | Where-Object {($_.DateFromName).addDays(-90) -lt $now} | Remove-Item -Force

Garth J Lancaster

Не уверен, что ты спрашиваешь ... ты говоришь
он должен удалить файлы, такие как ABCD20200720.jrn, но
он не должен удалять файлы, такие как 20200720.jrn ??

Замечу нигде вы не проверяете файл на наличие префикса из 4 символов перед датой

AVT007

Спасибо за Ваш быстрый ответ.
Я новичок в скриптах powershell, поэтому, возможно, не очень хорошо объясняю.
Я говорю, что скрипт, который я разместил, работает для файлов с инициалами типа ABCD20200720.jrn
но некоторые журналы генерируются исключительно с датой, например 20200720.jrn, без инициалов, и мне нужно удалить их, если они пересекают 90 дней.
Итак, мне нужна помощь в моем скрипте для удаления файла 20200920.jrn.
Прямо сейчас скрипты удаляют все файлы в папке.

Richard MacCutchan

Измените сценарий так, чтобы он отображал выбранные элементы, а не удалял их, и вы сможете увидеть, какие из них он выбирает.

1 Ответов

Рейтинг:
5

Dave Kreskowiak

Ваш скрипт просматривает имена файлов, чтобы определить, сколько им лет. Вы удаляете файлы журналов, созданные 90 дней назад или более, но это не то, сколько лет записям в файле. Возможно, вы удаляете данные, которым меньше 90 дней.

Вместо того, чтобы смотреть на имена файлов, почему бы вам не посмотреть на последнюю измененную дату файла? Это будет дата и время последней записи в файл.


AVT007

Сначала я попробовал в соответствии с последней измененной датой. Это сработало отлично. Но проблема в том, что журналы извлекаются удаленно из удаленной системы, и каждый день они извлекаются, а дата изменяется на текущее время, и журналы складываются в кучу. Это не эффективно для того, что я пытаюсь сделать.
Поэтому я пытаюсь удалить файл в соответствии с датой имени файла, которая не была изменена в последний раз.

Dave Kreskowiak

LastModified не изменяется, если нет записи в файл или в свойства и атрибуты файла.

Если другой процесс, который "извлекает" файлы, изменяет атрибут архива в файле, это изменит дату последнего изменения.

AVT007

Да, в этом-то и проблема.
Поскольку журналы удаленно загружаются на сервер, он изменяет дату модификации, и я не могу ее удалить. Вот почему я пытаюсь удалить старые файлы, так как само имя файла-это даты, сгенерированные журналом.