Answers:
您必须运行预定的任务才能执行此操作。这是一个应该起作用的Powershell脚本。
set-location c:\windows\system32\Logfiles\W3SVC1\ -ErrorAction Stop
foreach ($File in get-childitem -include *.log) {
if ($File.LastWriteTime -lt (Get-Date).AddDays(-30)) {
del $File
}
}
这将清除30天内最后修改的所有内容。将第一行中的路径更改为存储日志文件的位置。还要将-30更改为想要保留文件的时间。-30表示您将删除30天之前的任何内容。
如果不想使用LastWriteTime,可以看看本文,它显示FileInfo对象的不同属性。
Get-ChildItem *.* -include *.log
您可以自己酿造啤酒,但是我相信已经有一个聪明的人为您写过这篇文章。查看IISLogs和IISLogs Lite!
如果您要做的只是删除日志,则可以关闭不需要的日志!您将为服务器节省大量I / O!
我目前正在使用非常简单的批处理文件脚本来执行此操作:
forfiles -p C:\inetpub\logs\LogFiles\ -s -m *.log -d -180 -c "cmd /C DEL @File"
我还创建了“ 计划任务”条目以每天启动它,甚至激活了该文件夹上的文件压缩功能:所有这些共同解决了IIS文件的问题。
批处理文件中的开关说明:
如果你正在寻找一个可行的Powershell的选择,看到这个其他的答案:有关如何正确降低IIS LogFiles文件夹,其他建议看看这篇文章。
微软建议在其网站上使用脚本。
以下是我正在使用的修改版本。
Wscript.Echo "Starting log removal"
sLogFolder = "d:\retentiontest"
iMaxAge = 30 'in days
Set objFSO = CreateObject("Scripting.FileSystemObject")
set colFolder = objFSO.GetFolder(sLogFolder)
Wscript.Echo "Removing log files from folder: " & colFolder
For Each colSubfolder in colFolder.SubFolders
Set objFolder = objFSO.GetFolder(colSubfolder.Path)
Set colFiles = objFolder.Files
For Each objFile in colFiles
iFileAge = now-objFile.DateLastModified
if iFileAge > (iMaxAge+1) then
Wscript.Echo "Removing File: " & objFile.Name
objFSO.deletefile objFile, True
end if
Next
Next
请注意,我已经从“ DateCreated”更改为“ DateLastModified”,因为与直觉相反的创建日期可以晚于上次修改的日期,就像复制文件一样。您可能不想删除最近更新的文件。
然后使用cscript.exe(例如cscript.exe d:\scripts\logRetentionScript.vbs
)运行它。