RotateLog с powershell - PullRequest
       25

RotateLog с powershell

0 голосов
/ 17 апреля 2020

Я новичок в сценариях и Powershell, и я пытаюсь создать сценарий, чтобы каждый день сохранять файлы журнала только за 3 последних дня

function RotateLog {
$dir="C:\Users\user1\Documents\Project\LOG"
$DayMax= -3
$CurrentDate= Get-Date -uformat "%d-%m-%Y-%H%M"
$DatetoDelete= (get-date -UFormat "%d-%m-%Y-%H%M").AddDays($DayMax)

get-childitem -path $dir -filter "YYYY-mm-dd-*.LOG"
foreach-object {
if ($_.LastWriteTime -lt $DatetoDelete)
{remove-item}
}
}

Когда я запускаю $ DatetoDelete, он возвращает не удалось, потому что [System.String] не содержит метод с именем 'AddDays'.

Поэтому я попытался заменить переменную на

$dtt=(get-date).AddDays($DayMax)

Это работает так, но мне нужно получить формат. Как я могу это сделать?

Другая проблема, когда я запускаю команду remove-item, она возвращает команду удаления элемента в позиции конвейера команд 1 Задайте значения для следующих параметров: путь [0] Что это значит?

1 Ответ

1 голос
/ 17 апреля 2020

Параметры -Format и -UFormat заставляют Get-Date выводить строковое представление соответствующего [datetime] объекта, и "добавление -3 дней к строке" не имеет большого смысла .

Используйте Get-Date без параметра формата, чтобы получить объект [datetime], который можно значительно изменить и сравнить вместо этого:

# Get current date and time as a [datetime] object
$CurrentDate = Get-Date

# Here I reference the `Date` property on our DateTime object
# this gives us the same date, but at 00:00 local time
$DateToDelete = $CurrentDate.Date.AddDays($DayMax)

Теперь, $_.LastWriteTime -lt $DatetoDelete имеет больше смысла, поскольку мы сравниваем [datetime] с [datetime], а не с отформатированной строкой

...