Powershell 需要帮助获取日志清理脚本以确认多个条件吗
我正在编写一个日志清理脚本来清理IIS日志。但是,我有一个需要脚本满足的标准。我需要该脚本跳过只有1个日志文件的文件夹,而不考虑其年龄,并删除所有超过31天的日志。我不是使用Powershell最有经验的人,但每次我运行脚本时。我可以让它跳过存在1个日志文件的文件夹,但它将忽略我的31天标准。当我让它确认31天标准时,它会忽略存在1个日志文件的跳过文件夹并将其清除 任何帮助都将不胜感激Powershell 需要帮助获取日志清理脚本以确认多个条件吗,powershell,Powershell,我正在编写一个日志清理脚本来清理IIS日志。但是,我有一个需要脚本满足的标准。我需要该脚本跳过只有1个日志文件的文件夹,而不考虑其年龄,并删除所有超过31天的日志。我不是使用Powershell最有经验的人,但每次我运行脚本时。我可以让它跳过存在1个日志文件的文件夹,但它将忽略我的31天标准。当我让它确认31天标准时,它会忽略存在1个日志文件的跳过文件夹并将其清除 任何帮助都将不胜感激 $folders=Get ChildItem c:\inetpub\logs\TestingEnvironme
$folders=Get ChildItem c:\inetpub\logs\TestingEnvironment-Recurse-Directory
if($folder-eq$folders.FullName){
写入主机“在$folder中清除”
获取ChildItem-路径$folder-筛选器'*.log'|
选择对象-跳过1|
删除项目
Get ChildItem–路径C:\inetpub\logs\TestingEnvironment-Recurse|
其中对象{($\ LastWriteTime-lt(Get Date).AddDays(-31))}
}
我希望脚本能够提供仅存在1个日志的保留文件夹,而不考虑它们的年龄,并清除包含多个超过31天日志的文件夹。这应该可以做到
$refDate = (Get-Date).AddDays(-31)
Get-ChildItem 'c:\inetpub\logs\TestingEnvironment' -Recurse -Filter '*.log' -File |
Group-Object DirectoryName |
Where-Object { $_.Count -gt 1 } |
ForEach-Object {
$_.Group | Where-Object { $_.LastWriteTime -lt $refDate } | Remove-Item -WhatIf
}
检查控制台输出是否符合预期。如果没有问题,则删除-WhatIf
开关以实际删除文件
更新
如果只想保留一个(最新的)文件,代码如下所示
$refDate = (Get-Date).AddDays(-31)
Get-ChildItem 'c:\inetpub\logs\TestingEnvironment' -Recurse -Filter '*.log' -File |
Group-Object DirectoryName |
Where-Object { $_.Count -gt 1 } |
ForEach-Object {
$_.Group | Where-Object { $_.LastWriteTime -lt $refDate } |
Sort-Object LastWriteTime -Descending | Select-Object -Skip 1 |
Remove-Item -WhatIf
}
更新2
如您所述,如果希望脚本写出一个包含脚本删除的所有文件名的文本文件,请将其更改为:
$dateNow = Get-Date
$refDate = $dateNow.AddDays(-31)
$outputFile = 'D:\Results.txt'
Get-ChildItem 'c:\inetpub\logs\TestingEnvironment' -Recurse -Filter '*.log' -File |
Group-Object DirectoryName |
Where-Object { $_.Count -gt 1 } |
ForEach-Object {
$_.Group | Where-Object { $_.LastWriteTime -lt $refDate } |
Sort-Object LastWriteTime -Descending | Select-Object -Skip 1 |
ForEach-Object {
'{0:yyyy-MM-dd HH:mm:ss} {1}' -f $dateNow, $_.FullName | Add-Content -Path $outputFile
$_ | Remove-Item -WhatIf
}
}
这确实大有帮助。但是,某些文件夹只有多个超过31天的日志,正在被清除。我还需要保留一个。@bmaz1093虽然在您的问题中,您说过要删除所有超过31天的日志,但我已更新了答案,以保留最新的日志,并删除所有其他日志。我的错误是不太清楚。这似乎已经做到了!明天,我将抽出时间进一步测试它,并向您汇报。我真是太感谢你了!好的,脚本按我需要的方式执行。我如何让它创建一个.txt文件,列出所有被删除的内容?我可以让它创建一个“Results.txt”文件,但文档是空的。@bmaz1093请参阅我答案的更新2。现在,它会写出一个包含被删除文件全名的文本文件。作为新用户,您可能不知道这一点,但习惯于单击✓ 在左边。这将帮助其他有类似问题的人更容易地找到它。