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
您必须运行计划任务才能执行此操作。这是一个应该可以工作的 Powershell 脚本。
这应该清除 30 多天前最后修改的所有内容。将第一行中的路径更改为存储日志文件的位置。还将 -30 更改为您想要保留文件的时间。-30 表示您将删除超过 30 天的任何内容。
如果您不想使用 LastWriteTime,可以查看这篇文章,它显示了 FileInfo 对象的不同属性。
你可以自己酿造,但我相信某个聪明的人已经为你写了这个。查看IISLogs和IISLogs Lite!
如果您所做的只是删除日志,那么您可以在不需要时关闭注销!您将为服务器节省大量 I/O!
我目前正在使用一个非常简单的批处理文件脚本来执行此操作:
我还创建了一个计划任务条目以每天启动它,甚至激活了该文件夹上的文件压缩功能:所有这些东西一起解决了我的 IIS 文件问题。
批处理文件中的开关说明:
如果您正在寻找可行的Powershell替代方案,请参阅其他答案:有关如何正确减少 IIS LogFiles 文件夹的其他建议,请查看此帖子。
好吧,如果您想定期清理它们,那么为什么不禁用 IIS 中的请求日志记录呢?您可能会使用谷歌分析或其他一些服务,我看到很多人这样做是为了避免 IIS 日志影响性能和占用所有磁盘空间的头痛,但这当然取决于您的要求。
在服务器上创建计划任务。在操作部分,您需要:
给它一个每天或每周的时间表。完毕。
微软在其网站上建议了一个脚本。
以下是我根据需要使用的修改版本。
请注意,我已从“DateCreated”更改为“DateLastModified”,因为违反直觉的创建日期可能晚于上次修改,复制文件的情况也是如此。您可能不想删除最近更新过的文件。
然后使用 cscript.exe 运行它(例如,
cscript.exe d:\scripts\logRetentionScript.vbs
)。