故障排除
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 调试日志,或者文件只包含了一个轮换头部。
请按以下步骤排查:
打开文件。DNS 调试日志以类似
Message logging started at …的头部行开始,后续是带时间戳的查询条目。确认 DNS 调试日志确实已启用并写入你预期的路径:
Get-DnsServerDiagnostics | Select-Object Enable, LogFilePath, MaxMBFileSize如果文件确实是 DNS 日志,但头部不寻常——手动编辑过、预过滤过、或自定义导出——可跳过检查:
Convert-DNSDebugLogFile -InputFile "C:\Logs\odd.log" -SkipHeaderValidation
其他地方请保持验证开启。注意 -SkipHeaderValidation 不能与 -RemoveSourceFile 一起使用,因此未经验证的文件转换后无法被删除。
输出文件为空或行数远少于预期
请按顺序检查:
- 日志中是否包含查询条目? 刚轮换的日志如果还没发生查询,可能只有头部。
- 是否使用了
-ContextFilter?-ContextFilter Packet会移除Event和Note条目。如果过滤为Event或Note,大多数列也会为空——这些条目只包含DateTime、ThreadId、Context和Information。 - 源日志是否仍在写入? DNS 服务器正在写入的文件在转换时可能变化;最新条目可能缺失,最后一条记录可能被截断。需要完整输出时,请转换已轮换且关闭的日志。
- 文件是否损坏或截断? 检查日志末尾是否有半写入的行。
日期错误、偏移或日月颠倒
日志由与转换会话不同 Windows 区域设置的服务器写入。20.01.2026 和 01/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在成功运行后失败,说明账户有读取权限但无删除权限。
处理速度非常慢
- 先看磁盘——转换受 I/O 限制。繁忙的卷或慢速网络路径会主导运行时间。
- 如果不需要数据包详细 JSON,使用
-NoDetailsParsing;对细节丰富的日志可节省 30–50% 时间。 - 使用
-ContextFilter Packet减少写入量。 - 使用 DNS 服务器日志轮换拆分超大日志,而不是转换一个巨大文件。
- 考虑为日志目录设置杀毒软件排除。
更多信息见性能。
压缩后的输出比预期大
内容非常多样的日志——许多唯一域名、许多不同客户端——压缩效果不如重复性强的日志。这是正常的。ZIP 通常仍能大幅减小文件;如果没有,检查 Details 列是否膨胀文件,以及你是否真的需要它。
统计数据与预期不符
- 确认使用了
-OutputType Both或-OutputType Statistic。使用-OutputType CSV时不会写入统计文件。 Count是总计数,不是唯一计数。一个客户端请求同一名称 500 次计为 500。这是“数字不对”的最常见原因。- 统计按天分组。跨两天的日志会产生两天的行。
- 如果统计文件中
ComputerName为空,说明转换时未设置-ComputerName。
计划任务交互式运行正常,但作为任务运行失败
几乎总是以下三种情况之一:
- 找不到模块。
SYSTEM账户加上-NoProfile只看到机器范围的模块路径。请机器范围安装模块,或在任务动作中显式添加Import-Module DNSServer.DebugLogParser。 - 区域设置错误。 任务账户的区域设置与你不同。显式设置
-InputCulture和-OutputCulture。 - 执行策略或脚本未签名。 使任务的
-ExecutionPolicy与你的签名策略匹配,并解除从其他地方复制文件的阻止。
在相同上下文(例如用 PsExec 以 SYSTEM 身份)手动运行任务命令行以复现问题。
报告问题
如果以上都无效:
更新到最新模块版本并重试。
在 GitHub issues 搜索相同症状。
收集诊断信息:
$PSVersionTable Get-Module DNSServer.DebugLogParser -ListAvailable | Select-Object Name, Version, Path Get-Culture以及你运行的确切命令、完整错误信息(包括堆栈跟踪),如果可以分享,附上能复现问题的日志小段(已匿名处理)。
使用这些信息新建 issue。