使用 powershell 旋转日志

RotateLog with powershell

我是脚本和 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 it returns 失败,因为 [System.String] 不包含名为 'AddDays'.[=25= 的方法]

所以我尝试用

替换变量
$dtt=(get-date).AddDays($DayMax)

它是这样工作的,但我需要获取格式。 我该怎么做?

另一个问题,当我运行命令remove-item时,它returns cmdlet remove-item at command pipeline position 1 为以下 parameters:path[0] 提供值 这是什么意思?

-Format-UFormat 参数使 Get-Date 输出相应 [datetime] 对象的 字符串表示形式 ,并且 "adding -3 days to a string" 没有多大意义。

使用 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] 进行比较,而不是将其与格式化字符串进行比较