IIS日志压缩脚本

来源:本站原创 点击数: 发布时间:2025年11月07日

客户服务器有很多网站,有些网站还有200M的首页静态数据(有点夸张),导致他一天的iis日志特别多,偶尔遇到有爬虫的请求多的,一天十来个G也不在话下。所以用脚本将日志定期压缩是个很明智的选择。这里用到7Z,压缩后的日志只有原来十分一大小。

将其保存为ps1文件,并且添加到计划日常任务里面。

# ===== 配置 =====
$LogRoot = "E:\web_logs\LogFiles"
$SevenZipPath = "C:\Program Files\7-Zip\7z.exe"
# 获取今天日期
$Today = (Get-Date).ToString("yyyy-MM-dd")
Write-Host "今天日期: $Today"
# 遍历所有 IIS 站点目录
Get-ChildItem $LogRoot -Directory | ForEach-Object {
    $SiteDir = $_.FullName
    Write-Host "处理站点目录: $SiteDir"
    Get-ChildItem $SiteDir -Filter "*.log" | ForEach-Object {
        $LogFile = $_.FullName
        $FileDate = $_.LastWriteTime.ToString("yyyy-MM-dd")
        # 只处理非今天日志
        if ($FileDate -ne $Today) {
            $ZipFile = Join-Path $SiteDir ($_.BaseName + ".zip")
            # 压缩成单独 zip
            $7zCommand = "`"$SevenZipPath`" a -tzip `"$ZipFile`" `"$LogFile`" -mx=3"
            $process = Start-Process -FilePath $SevenZipPath -ArgumentList "a", "-tzip", $ZipFile, $LogFile, "-mx=3" -Wait -PassThru
            if (Test-Path $ZipFile) {
                Remove-Item $LogFile -Force
                Write-Host "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] 压缩并删除: $LogFile -> $ZipFile"
            } else {
                Write-Host "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] ⚠️ 压缩失败: $LogFile"
            }
        }
    }
}
Write-Host "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] 所有站点处理完成"