参数和选项
For AI agents: a documentation index is available at /llms.txt; a markdown version of this page is available at /cn/docs/03-parameters-and-options/index.md.
本页以通俗语言解释各选项,且按你通常需要的顺序排列。它是指南,不是规范——权威且始终最新的参数列表在命令参考和:
Get-Help Convert-DNSDebugLogFile -Full
简短版
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log"
这单行命令已经给你合理的行为:同时生成数据和统计文件,分隔符为分号,使用你机器的日期格式,启用头部验证,源日志不变。以下内容是微调。
| 选项 | 默认值 | 何时更改 |
|---|---|---|
-InputFile | (必需) | 始终 |
-OutputFile | 输入路径,扩展名为 .csv | 你想输出到其他位置 |
-Delimiter | ; | 你的消费者期望逗号、制表符或管道符 |
-ComputerName | 空 | 你合并多个服务器的日志 |
-OutputType | Both | 你只想要数据,或只要汇总 |
-ContextFilter | All | 你只关心实际的 DNS 流量 |
-InputCulture | 当前文化 | 日志来自不同区域设置的服务器 |
-OutputCulture | 当前文化 | 机器将读取 CSV |
-NoDetailsParsing | 关闭 | 吞吐量比数据包内部细节更重要 |
-CompressOutput | 关闭 | 你归档或传输结果 |
-RemoveSourceFile | 关闭 | 定时清理,且你信任输出 |
-SkipHeaderValidation | 关闭 | 文件有效但头部不寻常 |
输入和输出
-InputFile
要转换的日志路径。接受数组,也接受管道输入——这就是为什么下面这样写有效:
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" | Convert-DNSDebugLogFile
Get-ChildItem 输出带有 FullName 属性的对象,-InputFile 通过属性名接受它(别名包括 FullName、Path、FilePath)。无需 ForEach-Object。
本地路径和 SMB/UNC 路径都支持:
Convert-DNSDebugLogFile -InputFile "\\dc01\C$\Administration\Logs\DNSServer\dns.log"
命令还能打开 DNS 服务器当前打开的日志。使用前请参阅下面的活动日志。
-OutputFile
不指定时,CSV 文件会放在输入文件旁,基名相同,扩展名为 .csv。指定后,你控制目标位置。
-OutputFile "D:\Processed\" 并不意味着“写入此文件夹”。请给出包含文件名的完整路径:-OutputFile "D:\Processed\dns_data.csv"。
这也意味着当你管道传入多个文件时,-OutputFile 不合适——每次转换都会写入同一个目标。批量运行时,省略它,让每个日志生成自己的 CSV。
-Delimiter
默认是分号,因为在逗号是小数点分隔符的地区,Excel 期望使用分号。对于假定经典逗号分隔值的工具和数据库,使用 -Delimiter ",";制表符用 -Delimiter "`t"。
无论选什么,导入时用相同的值。不匹配是“所有内容都挤到一列”的头号原因。
标记和过滤
-ComputerName
填充 ComputerName 列。该列无论如何都会存在;此选项只是赋值。
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ComputerName $env:COMPUTERNAME
尽管名字(以及别名 -Server / -DNSServer / -HostName)如此,-ComputerName 不连接任何东西。没有 WinRM,没有远程执行。它只是写入输出中的标签。要读取远程日志,请将 -InputFile 指向 UNC 路径。
当多个服务器合并到一个数据集时,务必设置它——否则事后无法区分哪行来自哪个 DC。
-OutputType
CSV— 仅数据文件Statistic— 仅两个汇总文件,无行级数据Both— 三个文件都生成 (默认)
当只需每日趋势时,Statistic 是快速且小巧的选项。下游系统自行聚合时,选 CSV。
-ContextFilter
DNS 调试日志混合了实际查询流量和服务器内部通信。-ContextFilter 决定哪些内容保留到输出。
# 仅真实 DNS 流量
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter Packet
# 流量加服务器事件,但无诊断注释
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter Packet, Event
| 值 | 包含内容 |
|---|---|
All | 全部 (默认) |
Packet | DNS 查询和响应——大多数分析需要的数据 |
Event | 服务器事件,如“DNS 服务器已启动” |
Note | 诊断注释和警告,如套接字错误 |
其他上下文类型(DSPoll、Init、Lookup、Recurse、Remote、Tombstone)包含在 All 中。
过滤为仅 Event 或 Note 时,仅填充 DateTime、ThreadId、Context 和 Information——协议列为空,因为这些条目不携带该信息。
-ContextFilter Packet 是安全和报告管道的常用选择:它去除噪声,显著缩小输出。
国际日志
DNS 服务器以其运行机器的 Windows 区域设置写时间戳。德国 DC 写 20.01.2026 23:00:16;美国服务器写 1/20/2026 11:00:16 PM。如果工作站区域设置与服务器不同,解析会出错——更糟的是,日期和月份会被悄悄交换。
-InputCulture
告诉解析器源日志使用的区域设置:
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns-berlin.log" -InputCulture 'de-DE'
| 文化 | 日志时间戳格式 |
|---|---|
de-DE | DD.MM.YYYY HH:MM:SS |
en-US | M/D/YYYY H:MM:SS AM/PM |
en-GB | DD/MM/YYYY HH:MM:SS |
sv-SE | YYYY-MM-DD HH:MM:SS |
默认是运行命令的会话文化。在混合区域环境中,显式设置它而非依赖默认——且记住以 SYSTEM 运行的计划任务可能没有你交互测试时的文化。
-OutputCulture
控制时间戳写入 CSV 的格式:
# 类 ISO 输出,SQL Server、Power BI 和 pandas 都能理解
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputCulture 'sv-SE'
# 同效果,显式不变文化
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" `
-OutputCulture ([System.Globalization.CultureInfo]::InvariantCulture)
经验法则:如果人用 Excel 打开文件,匹配本地文化;机器读取时,使用 sv-SE 或不变文化,别担心导入端的区域设置。
这两个参数独立——你可以读取瑞典日志,写出美式格式。
速度和存储
-NoDetailsParsing
如果 DNS 服务器记录完整数据包细节,解析器会把每个细节块转成 Details 列的 JSON。这有用,但也是运行中最耗时的部分,且膨胀 CSV。
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -NoDetailsParsing
该列仍存在但为空;TCP/UDP 细节头行仍在 Information 中。细节块丰富的日志可节省 30–50% 处理时间。只要查询级信息够用,就用它。
-CompressOutput
压缩生成的 CSV 文件,删除未压缩文件。dns.log 生成 dns.zip 替代 dns.csv。
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput
此类 CSV 通常压缩率 90% 以上,归档和网络传输几乎免费节省存储。
-RemoveSourceFile
成功转换后删除源 .log 文件——仅当所有输出文件都创建成功时才删除。
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput -RemoveSourceFile
这里没有回收站。启用此选项前,请在真实日志上验证输出,且绝不要指向活动日志文件。
命令故意拒绝将 -RemoveSourceFile 与 -SkipHeaderValidation 结合使用,防止删除未确认是 DNS 日志的文件。
保护措施
-SkipHeaderValidation
默认命令会检查文件是否真的是 DNS 服务器调试日志,才开始解析。这样能捕获指向错误文件夹的经典错误。
仅对真正不寻常的情况关闭:手工编辑日志、预过滤提取、自定义格式。其他情况保持开启——它开销小,是防止拼写错误导致垃圾行的屏障。
-WhatIf 和 -Confirm
命令支持两者。-WhatIf 是查看新批处理会影响哪些文件的正确方式:
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
Convert-DNSDebugLogFile -RemoveSourceFile -WhatIf
-Confirm 在处理每个文件、删除源文件和覆盖现有输出前都会提示。
活动日志
Convert-DNSDebugLogFile 可以读取 DNS 服务器当前打开的文件。方便临时查看当前情况。
活动日志在读取时会变化。输出可能漏掉转换期间写入的条目,且最后一条记录可能被截断。重复运行结果不同。
要获得可复现输出,请在 DNS 服务器启用日志轮换,仅转换已关闭、已轮换的文件——例如跳过最新文件:
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
Sort-Object LastWriteTime -Descending |
Select-Object -Skip 1 |
Convert-DNSDebugLogFile -ComputerName $env:COMPUTERNAME
综合示例
域控制器上的典型生产调用:
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
Sort-Object LastWriteTime -Descending |
Select-Object -Skip 1 |
Convert-DNSDebugLogFile `
-ComputerName $env:COMPUTERNAME `
-Delimiter ';' `
-OutputType Both `
-ContextFilter Packet `
-OutputCulture 'sv-SE' `
-CompressOutput
意思是:取除活动日志外的所有轮换日志,仅保留 DNS 流量,用服务器名标记每行,写机器可读时间戳,留下压缩档案。完整的计划任务和组策略版本见GPO 驱动的收集示例。