故障排除

转换 DNS 调试日志时可能遇到的症状、原因及解决方法。

For AI agents: a documentation index is available at /llms.txt; a markdown version of this page is available at /cn/docs/08-troubleshooting/index.md.

“该文件不是有效的 DNS 调试日志文件”

头部检查拒绝了输入。通常是路径错误——同一文件夹下的 .log 文件不是 DNS 调试日志,或者文件只包含了一个轮换头部。

请按以下步骤排查:

  1. 打开文件。DNS 调试日志以类似 Message logging started at … 的头部行开始,后续是带时间戳的查询条目。

  2. 确认 DNS 调试日志确实已启用并写入你预期的路径:

    Get-DnsServerDiagnostics | Select-Object Enable, LogFilePath, MaxMBFileSize
    
  3. 如果文件确实是 DNS 日志,但头部不寻常——手动编辑过、预过滤过、或自定义导出——可跳过检查:

    Convert-DNSDebugLogFile -InputFile "C:\Logs\odd.log" -SkipHeaderValidation
    

其他地方请保持验证开启。注意 -SkipHeaderValidation 不能与 -RemoveSourceFile 一起使用,因此未经验证的文件转换后无法被删除。

输出文件为空或行数远少于预期

请按顺序检查:

  • 日志中是否包含查询条目? 刚轮换的日志如果还没发生查询,可能只有头部。
  • 是否使用了 -ContextFilter -ContextFilter Packet 会移除 EventNote 条目。如果过滤为 EventNote,大多数列也会为空——这些条目只包含 DateTimeThreadIdContextInformation
  • 源日志是否仍在写入? DNS 服务器正在写入的文件在转换时可能变化;最新条目可能缺失,最后一条记录可能被截断。需要完整输出时,请转换已轮换且关闭的日志。
  • 文件是否损坏或截断? 检查日志末尾是否有半写入的行。

日期错误、偏移或日月颠倒

日志由与转换会话不同 Windows 区域设置的服务器写入。20.01.202601/20/2026 表示同一时间,但前提是双方对格式达成一致。

# 日志来自德国服务器
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns-berlin.log" -InputCulture 'de-DE'

计划任务中请显式设置 -InputCulture,不要依赖运行账户的区域设置。如果输出需要机器可读,添加 -OutputCulture 'sv-SE'。详情见参数和选项

导入后所有内容都在一列

分隔符不匹配。模块默认写入 ;,而你的导入程序期望 ,(或反之)。

要么重新运行转换,指定导入程序需要的分隔符:

Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -Delimiter ","

…要么告诉导入程序文件使用的分隔符——Excel 中通过 数据 → 从文本/CSV,PowerShell 中通过 Import-Csv -Delimiter ';'

“访问被拒绝”

  • DNS 日志目录通常需要管理员权限。以提升权限启动 PowerShell,或用有访问权限的账户运行计划任务。
  • 检查输出目录的写权限,不仅是日志的读权限。
  • 对 SMB/UNC 路径:以 SYSTEM 运行的任务在网络上以计算机账户身份认证。请授予该计算机账户(或 Domain Controllers 组)共享和 NTFS 权限,或使用专用服务账户。
  • 如果 -RemoveSourceFile 在成功运行后失败,说明账户有读取权限但无删除权限。

处理速度非常慢

  1. 先看磁盘——转换受 I/O 限制。繁忙的卷或慢速网络路径会主导运行时间。
  2. 如果不需要数据包详细 JSON,使用 -NoDetailsParsing;对细节丰富的日志可节省 30–50% 时间。
  3. 使用 -ContextFilter Packet 减少写入量。
  4. 使用 DNS 服务器日志轮换拆分超大日志,而不是转换一个巨大文件。
  5. 考虑为日志目录设置杀毒软件排除。

更多信息见性能

压缩后的输出比预期大

内容非常多样的日志——许多唯一域名、许多不同客户端——压缩效果不如重复性强的日志。这是正常的。ZIP 通常仍能大幅减小文件;如果没有,检查 Details 列是否膨胀文件,以及你是否真的需要它。

统计数据与预期不符

  • 确认使用了 -OutputType Both-OutputType Statistic。使用 -OutputType CSV 时不会写入统计文件。
  • Count 是总计数,不是唯一计数。一个客户端请求同一名称 500 次计为 500。这是“数字不对”的最常见原因。
  • 统计按天分组。跨两天的日志会产生两天的行。
  • 如果统计文件中 ComputerName 为空,说明转换时未设置 -ComputerName

计划任务交互式运行正常,但作为任务运行失败

几乎总是以下三种情况之一:

  • 找不到模块。 SYSTEM 账户加上 -NoProfile 只看到机器范围的模块路径。请机器范围安装模块,或在任务动作中显式添加 Import-Module DNSServer.DebugLogParser
  • 区域设置错误。 任务账户的区域设置与你不同。显式设置 -InputCulture-OutputCulture
  • 执行策略或脚本未签名。 使任务的 -ExecutionPolicy 与你的签名策略匹配,并解除从其他地方复制文件的阻止。

在相同上下文(例如用 PsExec 以 SYSTEM 身份)手动运行任务命令行以复现问题。

报告问题

如果以上都无效:

  1. 更新到最新模块版本并重试。

  2. GitHub issues 搜索相同症状。

  3. 收集诊断信息:

    $PSVersionTable
    Get-Module DNSServer.DebugLogParser -ListAvailable | Select-Object Name, Version, Path
    Get-Culture
    

    以及你运行的确切命令、完整错误信息(包括堆栈跟踪),如果可以分享,附上能复现问题的日志小段(已匿名处理)。

  4. 使用这些信息新建 issue。