You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改PowerShell脚本从获取上月IIS日志改为获取上周日志?

把IIS日志收集脚本从“上月”改成“上周”的方法

没问题,咱们来一步步把这个PowerShell脚本改成每周收集IIS日志的版本——完全支持这个修改的!

PowerShell确实没有直接的LastWeek内置参数,但咱们可以通过Get-Date手动计算上周的日期范围,再结合IIS日志的命名规则(通常是u_exYYMMDD.log或u_exYYYYMMDD.log)来精准匹配目标日志文件。

第一步:计算上周的日期范围

先明确你的“上周”定义(不同团队统计习惯不一样),这里给两种常见场景的代码:

场景1:周从周一到周日(国内多数企业习惯)

$today = Get-Date
# 计算上周周一:今天减去「当前星期几的数值 + 6」天(比如今天周三,3+6=9,减9天就是上周周一)
$lastWeekStart = $today.AddDays(-($today.DayOfWeek.value__ + 6)).Date
# 上周周日:上周周一加6天
$lastWeekEnd = $lastWeekStart.AddDays(6).Date

场景2:周从周日到周六(美国标准)

$today = Get-Date
# 上周日:今天减去当前星期几的数值,再往前推7天(比如今天周三,减3天是本周日,再减7天就是上周日)
$lastWeekStart = $today.AddDays(-$today.DayOfWeek.value__).Date.AddDays(-7)
# 上周六:上周日加6天
$lastWeekEnd = $lastWeekStart.AddDays(6).Date

第二步:生成上周所有日志的文件名匹配规则

IIS日志按天生成,所以我们要把上周的每一天转换成日志文件名的日期格式:

# 生成上周所有日期的字符串(比如「240520」对应2024年5月20日)
# 如果你的日志是四位年份(比如u_ex20240520.log),把"yyMMdd"改成"yyyyMMdd"
$lastWeekDateStrings = for ($date = $lastWeekStart; $date -le $lastWeekEnd; $date = $date.AddDays(1)) {
    $date.ToString("yyMMdd")
}

第三步:修改脚本的日志收集逻辑

把原来针对“上月”的筛选逻辑,替换成匹配上周的日期字符串:

原上月逻辑示例(参考)

# 原脚本可能是这样获取上月日志的
$lastMonth = (Get-Date).AddMonths(-1).ToString("yyyyMM")
$logs = Get-ChildItem -Path "C:\inetpub\logs\LogFiles\W3SVC1" -Filter "u_ex$lastMonth*.log"

修改后的上周逻辑

# 遍历上周每一天的日志文件
foreach ($dateStr in $lastWeekDateStrings) {
    $targetLog = Get-ChildItem -Path "C:\inetpub\logs\LogFiles\W3SVC1" -Filter "u_ex$dateStr.log" -ErrorAction SilentlyContinue
    if ($targetLog) {
        # 这里替换成你原来的收集逻辑:复制、解析、上传等
        Write-Host "已找到并处理日志:$($targetLog.FullName)"
        # Copy-Item -Path $targetLog.FullName -Destination "D:\LogBackup\LastWeek\" -Force
    }
}

备选方案:按文件修改时间筛选(不依赖文件名)

如果你的IIS日志命名不规范,或者想更精准地按日志生成时间筛选,可以直接用文件的LastWriteTime属性:

# 注意:把上周结束时间调整到周日的23:59:59,避免漏掉当天的日志
$lastWeekEnd = $lastWeekEnd.AddDays(1).AddSeconds(-1)

$lastWeekLogs = Get-ChildItem -Path "C:\inetpub\logs\LogFiles\W3SVC1" -Filter "u_ex*.log" |
    Where-Object { $_.LastWriteTime -ge $lastWeekStart -and $_.LastWriteTime -le $lastWeekEnd }

# 批量处理日志
foreach ($log in $lastWeekLogs) {
    # 你的收集逻辑
}

关于脚本兼容性的说明

完全支持这个修改!原来的脚本核心是日期范围筛选+日志文件处理,只是把日期范围从「上月的所有天」改成了「上周的7天」,逻辑本质是一样的,只要调整日期计算部分,就能无缝适配每周收集的需求。

内容的提问来源于stack exchange,提问作者Kormath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:16:23