Version 1.1.0.0 of the documentation is no longer actively maintained. The site that you are currently viewing is an archived snapshot.
Convert-DNSDebugLogFile
For AI agents: a documentation index is available at /llms.txt; a markdown version of this page is available at /v1.1.0.0/cn/docs/commands/convert-dnsdebuglogfile/index.md.
SYNOPSIS
将 Windows DNS 服务器调试日志转换为结构化的 CSV 格式,便于分析和报告。
SYNTAX
__AllParameterSets
Convert-DNSDebugLogFile [-InputFile] <string[]> [[-OutputFile] <string>] [[-Delimiter] <string>]
[[-ComputerName] <string>] [[-OutputType] <string>] [[-ContextFilter] <string>]
[[-InputCulture] <cultureinfo>] [[-OutputCulture] <cultureinfo>] [-SkipHeaderValidation]
[-RemoveSourceFile] [-CompressOutput] [-WhatIf] [-Confirm] [<CommonParameters>]
ALIASES
此 cmdlet 具有以下别名,
DESCRIPTION
将 Windows DNS 服务器调试日志文件转换为结构化的 CSV 数据,可在 Excel、Power BI、SQL 数据库或 SIEM 工具中进行分析。
专为安全分析、性能监控、故障排除和合规报告设计。
该 cmdlet 解析 DNS 调试日志中的所有 17 个字段,包括日期/时间、协议、客户端 IP、查询类型、域名、响应代码、标志、事件信息和计算机名。
生成结构化的 CSV 输出,并可选地生成按客户端、协议和查询类型汇总活动的统计摘要。
主要功能:
- 针对大文件(100MB 以上)优化的高性能解析
- 可自定义 CSV 分隔符(默认:分号)
- 可选的统计摘要,包含汇总指标
- 上下文过滤(PACKET、EVENT、Note),聚焦特定日志条目类型
- 支持文化感知的日期解析和格式化,适用于国际服务器
- 支持管道批量处理多个文件
- 可选输出文件压缩(ZIP 格式)
- 可选自动删除源文件
- 头部验证确保数据完整性
输出格式:
ComputerName 列始终包含在每条记录的末尾。
如果未指定 -ComputerName 参数,则该列为空。
确保多服务器合并场景下输出结构一致。
性能:
使用 StreamReader/StreamWriter 及 64KB 缓冲区优化,采用字符串操作替代正则表达式,手动生成 CSV,并使用高效的哈希表收集统计数据。
兼容性:
- PowerShell 5.1+(桌面版和核心版)
- Windows Server 2016+
- 支持 DNS Server 2012 R2 至 2025 日志格式
EXAMPLES
示例 1
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log"
使用默认设置转换 DNS 调试日志(生成数据文件和统计文件,分隔符为分号)。
输出:C:\Logs\dns.csv 和 C:\Logs\dns_statistic.csv
示例 2
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputType CSV
仅生成数据文件,不生成统计文件。
输出:C:\Logs\dns.csv
示例 3
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputType Statistic
仅生成统计文件,包含汇总指标。
输出:C:\Logs\dns_statistic.csv
示例 4
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputFile "C:\Output\parsed.csv"
将日志转换到自定义输出位置。
输出:C:\Output\parsed.csv
示例 5
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -Delimiter "," -ComputerName "DNS01" -OutputType Both
使用逗号作为分隔符,并添加 ComputerName 列,值为 “DNS01”。
输出:C:\Logs\dns.csv 和 C:\Logs\dns_statistic.csv,包含 ComputerName 列
示例 6
PS C:\> Get-ChildItem "C:\Logs\*.log" | Convert-DNSDebugLogFile -OutputType Both
通过管道批量处理多个 DNS 调试日志文件。
输出:针对每个 .log 文件,生成对应的 .csv 和 _statistic.csv 文件
示例 7
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput
转换并将输出压缩为 ZIP 归档。
输出:C:\Logs\dns.zip(包含 dns.csv 和 dns_statistic.csv)
示例 8
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -RemoveSourceFile -Verbose
转换日志并在成功处理后删除源文件。
详细输出确认文件已删除。
示例 9
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -InputCulture 'de-DE' -OutputCulture 'en-US'
解析德国日期格式(DD.MM.YYYY),输出为美国格式(MM/DD/YYYY)。
适用于处理来自不同区域设置服务器的日志。
示例 10
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter 'Packet'
仅转换 DNS 查询/响应数据包条目,排除 EVENT 和 Note 条目。
用于聚焦实际 DNS 流量分析。
示例 11
PS C:\> Get-ChildItem "C:\Logs\*.log" | Convert-DNSDebugLogFile -RemoveSourceFile -CompressOutput
自动日志归档:处理所有日志,压缩输出,并删除源文件。
适合计划任务的日志处理流水线。
PARAMETERS
-CompressOutput
在创建后将输出的 CSV 文件压缩为 ZIP 归档。
创建一个包含生成的 CSV 文件的 .zip 文件,然后删除未压缩的 CSV 文件。
ZIP 文件与输出 CSV 位于同一目录,且使用相同的基本文件名。
优点:
- 大幅减少磁盘空间占用(CSV 文件通常可压缩 90% 以上)
- 简化文件管理和归档
- 适合长期存储
示例:输入 ‘dns.log’ 生成 ‘dns.csv’,压缩为 ‘dns.zip’,然后删除 ‘dns.csv’。
Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: Named
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-ComputerName
指定 CSV 输出中 ComputerName 列的值。
ComputerName 列始终包含在输出中——如果未指定此参数,该列为空。
在合并多个 DNS 服务器日志时使用,以识别合并数据中的源服务器。
注意:这不是远程参数。
该 cmdlet 仅处理本地文件。
Type: String
DefaultValue: ''
SupportsWildcards: false
Aliases:
- Server
- DNSServer
- HostName
ParameterSets:
- Name: (All)
Position: 3
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-Confirm
在运行 cmdlet 前提示确认。
指定后,会在以下操作前提示确认:
- 处理每个 DNS 调试日志文件
- 删除源文件(当指定 -RemoveSourceFile 时)
- 覆盖现有输出文件
适用于交互式处理,方便控制处理的文件。
Type: SwitchParameter
DefaultValue: ''
SupportsWildcards: false
Aliases:
- cf
ParameterSets:
- Name: (All)
Position: Named
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-ContextFilter
过滤要包含在输出中的日志条目类型。
DNS 调试日志包含不同的上下文类型:
- PACKET:DNS 查询和响应数据包信息(主要数据)
- EVENT:DNS 服务器事件(例如,“DNS 服务器已启动。”)
- Note:诊断注释和警告(例如,套接字错误、内部状态)
有效值:
- ‘All’:包含所有上下文类型(默认)
- ‘Packet’:仅包含 PACKET 条目(DNS 查询/响应)
- ‘Event’:仅包含 EVENT 条目(服务器事件)
- ‘Note’:仅包含 Note 条目(诊断信息)
默认值:All
注意:过滤为 ‘Event’ 或 ‘Note’ 时,只有 DateTime、ThreadId、Context 和 Information 列有数据。
其他列(协议、客户端 IP 等)为空。
Type: String
DefaultValue: All
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 5
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-Delimiter
指定 CSV 输出的分隔符字符。
默认:分号(;)
常见替代:逗号(,)、制表符(`t)、管道符(|)
在逗号作为小数分隔符的地区(欧洲)使用分号。
在标准 CSV 工具和数据库中通常使用逗号。
Type: String
DefaultValue: ;
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 2
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-InputCulture
指定用于解析 DNS 调试日志中日期/时间值的文化/区域设置。
DNS 服务器调试日志使用生成日志的服务器上的 Windows 区域设置的日期格式。
处理来自不同区域设置服务器的日志时使用此参数。
默认值:当前文化
常见示例:
- ‘de-DE’ 或 ‘de-AT’:德国格式(DD.MM.YYYY 或 DD/MM/YYYY)
- ’en-US’:美国格式(MM/DD/YYYY,带 AM/PM)
- ’en-GB’:英国格式(DD/MM/YYYY,24 小时制)
- ‘sv-SE’:瑞典/ISO 格式(YYYY-MM-DD)
Type: CultureInfo
DefaultValue: '[System.Globalization.CultureInfo]::CurrentCulture'
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 6
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-InputFile
指定要解析的 DNS 调试日志文件路径。
支持数组以处理多个文件。
接受来自 Get-ChildItem 或其他生成文件的 cmdlet 的管道输入。
Type: String[]
DefaultValue: ''
SupportsWildcards: false
Aliases:
- FullName
- FilePath
- InputPath
- File
- Path
ParameterSets:
- Name: (All)
Position: 0
IsRequired: true
ValueFromPipeline: true
ValueFromPipelineByPropertyName: true
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-OutputCulture
指定用于格式化输出 CSV 文件中日期/时间值的文化/区域设置。
控制 DateTime 值写入 CSV 的格式。
当 CSV 文件将被具有特定区域设置的应用程序或系统使用时使用此参数。
默认值:当前文化
常见示例:
- ’en-US’:美国格式(MM/DD/YYYY)
- ‘de-DE’:德国格式(DD.MM.YYYY)
- ‘sv-SE’ 或 InvariantCulture:ISO 格式(YYYY-MM-DD),最大兼容性
Type: CultureInfo
DefaultValue: '[System.Globalization.CultureInfo]::CurrentCulture'
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 7
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-OutputFile
指定输出 CSV 文件的路径。
如果未指定,使用输入文件名并替换为 .csv 扩展名,输出到输入文件所在目录。
重要:必须是文件路径,不能是目录。
如果想使用输入文件目录但自定义文件名,请指定包含文件名的完整路径。
Type: String
DefaultValue: ''
SupportsWildcards: false
Aliases:
- Output
- Destination
- OutFile
- OutputPath
ParameterSets:
- Name: (All)
Position: 1
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-OutputType
指定要生成的输出类型。
有效值:
- ‘CSV’:仅生成包含所有解析日志条目的数据文件(默认)
- ‘Statistic’:仅生成包含汇总指标的统计文件
- ‘Both’:同时生成数据文件和统计文件
默认值:Both
统计信息提供按客户端 IP、协议、方向和查询类型的汇总计数,以及每个唯一组合的日期范围。
Type: String
DefaultValue: Both
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 4
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-RemoveSourceFile
在成功处理后删除源 DNS 调试日志文件。
适用于自动化日志处理流水线或磁盘空间管理。
仅当处理成功且所有输出文件均已创建时才删除源文件。
安全性:不能与 -SkipHeaderValidation 一起使用,以防意外删除无效文件。
警告:源文件将被永久删除。
使用此选项前请确保输出文件有效。
Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: Named
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-SkipHeaderValidation
跳过 DNS 调试日志头部验证检查。
默认情况下,cmdlet 会验证输入文件是否具有有效的 DNS 服务器调试日志头部。
使用此开关可处理无验证的文件,适用于:
- 修改或自定义日志格式
- 解决验证问题
- 非标准或预处理日志
警告:如果文件不是有效的 DNS 日志,可能导致处理错误。
Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: Named
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-WhatIf
显示如果运行该 cmdlet 会发生什么。
cmdlet 不会实际执行。
指定后,显示将执行的操作的详细信息,实际不执行。
适用于:
- 预览将处理的文件
- 验证输出文件路径
- 在生产环境运行前测试脚本
Type: SwitchParameter
DefaultValue: ''
SupportsWildcards: false
Aliases:
- wi
ParameterSets:
- Name: (All)
Position: Named
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
CommonParameters
此 cmdlet 支持常用参数:-Debug、-ErrorAction、-ErrorVariable、
-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、
-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。更多信息,请参见
about_CommonParameters。
INPUTS
System.String[]
NOTES
版本 : 1.3.0.1
作者 : Andi Bellstedt, Copilot
日期 : 2026-01-23
关键词 : Microsoft Windows Server, DNSServer, DNS, DebugLog, LogParser