如何修改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
相关产品推荐
相关产品推荐

