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