<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DNSServer.DebugLogParser on PowerShell module DNSServer.DebugLogParser</title><link>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/</link><description>Recent content in DNSServer.DebugLogParser on PowerShell module DNSServer.DebugLogParser</description><generator>Hugo</generator><language>en</language><lastBuildDate>Wed, 27 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/index.xml" rel="self" type="application/rss+xml"/><item><title>Overview</title><link>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/docs/01-overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/docs/01-overview/</guid><description>&lt;p&gt;DNSServer.DebugLogParser is a PowerShell module that transforms Windows DNS Server debug log files into structured, analyzable CSV data for security analysis, performance monitoring, troubleshooting, and compliance reporting.&lt;/p&gt;
&lt;h2 id="what-is-a-dns-debug-log"&gt;What is a DNS debug log?&lt;/h2&gt;
&lt;p&gt;DNS debug logging is a feature of Windows DNS Server that records detailed information about DNS operations. When enabled, the DNS Server writes log entries to a text file (typically &lt;code&gt;dns.log&lt;/code&gt;) in the DNS Server’s directory.&lt;/p&gt;
&lt;p&gt;Each log entry contains up to 16 fields including:&lt;/p&gt;</description></item><item><title>Output Formats</title><link>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/docs/02-output-formats/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/docs/02-output-formats/</guid><description>&lt;p&gt;DNSServer.DebugLogParser can generate two types of output:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A CSV data file containing all parsed entries&lt;/li&gt;
&lt;li&gt;Optional statistics files for daily aggregation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To see real-world examples of each output type, check the sample in this article.&lt;/p&gt;
&lt;h2 id="csv-data-file"&gt;CSV data file&lt;/h2&gt;
&lt;p&gt;Example output files:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;en-US (no details): &lt;a href="../outputformat/en-us.-.dnsdebug-dc01.-.WithComputerName.csv"&gt;WithComputerName&lt;/a&gt;, &lt;a href="../outputformat/en-us.-.dnsdebug-dc01.-.NoComputerName.csv"&gt;NoComputerName&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;de-DE (no details): &lt;a href="../outputformat/de-de.-.dnsdebug-dc01.-.WithComputerName.-.NoDetails.csv"&gt;WithComputerName&lt;/a&gt;, &lt;a href="../outputformat/de-de.-.dnsdebug-dc01.-.NoComputerName.-.NoDetails.csv"&gt;NoComputerName&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;de-DE (with details / &lt;code&gt;Details&lt;/code&gt; JSON populated for Packet detail blocks): &lt;a href="../outputformat/de-de.-.dnsdebug-dc01.-.WithComputerName.-.WithDetails.csv"&gt;WithComputerName&lt;/a&gt;, &lt;a href="../outputformat/de-de.-.dnsdebug-dc01.-.NoComputerName.-.WithDetails.csv"&gt;NoComputerName&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The CSV data file contains all parsed log entries with the following columns:&lt;/p&gt;</description></item><item><title>Operational Best Practices</title><link>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/docs/06-operational-best-practices/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/docs/06-operational-best-practices/</guid><description>&lt;p&gt;When using DNSServer.DebugLogParser in production:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Schedule regular processing&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use Task Scheduler to automatically convert new log files daily or weekly.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Rotate logs appropriately&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DNS debug logs can grow quickly; configure rotation at a manageable size (for example 100MB).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Validate output&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Verify the first few converted files before fully automating.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Plan storage requirements&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Even with compression, plan storage based on DNS volume and retention.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Secure sensitive data&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DNS logs can be sensitive; protect outputs with appropriate access controls.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Document your workflow&lt;/p&gt;</description></item><item><title>Troubleshooting</title><link>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/docs/08-troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/docs/08-troubleshooting/</guid><description>&lt;h2 id="common-issues-and-solutions"&gt;Common issues and solutions&lt;/h2&gt;
&lt;h3 id="the-file-is-not-a-valid-dns-debug-log-file"&gt;“The file is not a valid DNS debug log file”&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Ensure you’re converting an actual DNS Server debug log.&lt;/li&gt;
&lt;li&gt;The file should start with &lt;code&gt;Message logging started at&lt;/code&gt; or contain DNS query entries.&lt;/li&gt;
&lt;li&gt;If you’re certain the file is valid but the header differs, use &lt;code&gt;-SkipHeaderValidation&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="output-file-is-empty-or-incomplete"&gt;Output file is empty or incomplete&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Confirm the input file contains valid log entries.&lt;/li&gt;
&lt;li&gt;Some logs may only contain header information if no queries occurred.&lt;/li&gt;
&lt;li&gt;Verify the log file isn’t corrupted and contains actual query data.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="processing-is-very-slow"&gt;Processing is very slow&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Ensure sufficient memory and that the disk is not heavily loaded.&lt;/li&gt;
&lt;li&gt;Consider processing smaller log files.&lt;/li&gt;
&lt;li&gt;Consider &lt;code&gt;-CompressOutput&lt;/code&gt; with scheduled processing to handle smaller batches.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="access-denied-errors"&gt;“Access denied” errors&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Run PowerShell with appropriate permissions to read the source log files and write to the destination directory.&lt;/li&gt;
&lt;li&gt;DNS log files may require administrator access.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="compressed-output-is-larger-than-expected"&gt;Compressed output is larger than expected&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Logs with many unique values compress less efficiently; this can be normal.&lt;/li&gt;
&lt;li&gt;ZIP compression still typically achieves substantial reduction.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="statistics-file-doesnt-match-expectations"&gt;Statistics file doesn’t match expectations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Verify you’re using &lt;code&gt;-OutputType Both&lt;/code&gt; or &lt;code&gt;-OutputType Statistic&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Statistics are aggregated counts (daily groupings), so values represent totals.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="reporting-issues"&gt;Reporting issues&lt;/h2&gt;
&lt;p&gt;If you encounter problems not covered here:&lt;/p&gt;</description></item><item><title>Convert-DNSDebugLogFile</title><link>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/docs/commands/convert-dnsdebuglogfile/</link><pubDate>Wed, 27 May 2026 00:00:00 +0000</pubDate><guid>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/docs/commands/convert-dnsdebuglogfile/</guid><description>&lt;!-- This file is auto-generated using PlatyPS + HUGO Workflow automation. Avoid editing directly! Original Front-Matter:
date: 2026-05-27
document type: cmdlet
external help file: DNSServer.DebugLogParser-Help.xml
flagTranslation: Primary
HelpUri: https://github.com/AndiBellstedt/DNSServer.DebugLogParser
Locale: en-US
Module Name: DNSServer.DebugLogParser
ms.date: 05/27/2026
PlatyPS schema version: 2024-05-01
title: Convert-DNSDebugLogFile
type: docs
--&gt;
&lt;h2 id="synopsis"&gt;SYNOPSIS&lt;/h2&gt;
&lt;p&gt;Transforms Windows DNS Server debug logs into structured CSV format for analysis and reporting.&lt;/p&gt;
&lt;h2 id="syntax"&gt;SYNTAX&lt;/h2&gt;
&lt;h3 id="__allparametersets"&gt;__AllParameterSets&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;Convert-DNSDebugLogFile [-InputFile] &amp;lt;string[]&amp;gt; [[-OutputFile] &amp;lt;string&amp;gt;] [[-Delimiter] &amp;lt;string&amp;gt;]
 [[-ComputerName] &amp;lt;string&amp;gt;] [[-OutputType] &amp;lt;string&amp;gt;] [[-ContextFilter] &amp;lt;string[]&amp;gt;]
 [[-InputCulture] &amp;lt;cultureinfo&amp;gt;] [[-OutputCulture] &amp;lt;cultureinfo&amp;gt;] [-SkipHeaderValidation]
 [-RemoveSourceFile] [-CompressOutput] [-NoDetailsParsing] [-WhatIf] [-Confirm] [&amp;lt;CommonParameters&amp;gt;]
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="aliases"&gt;ALIASES&lt;/h2&gt;
&lt;p&gt;This cmdlet has the following aliases,&lt;/p&gt;</description></item><item><title>Release notes v1.2.1.0 (2026-01-26)</title><link>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/changelog/release-v1.2.1.0/</link><pubDate>Mon, 26 Jan 2026 00:00:00 +0000</pubDate><guid>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/changelog/release-v1.2.1.0/</guid><description>&lt;h2 id="changed"&gt;Changed&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: Improved multi-line record processing to avoid loading large files into memory
&lt;ul&gt;
&lt;li&gt;Prevents out-of-memory errors on very large log files&lt;/li&gt;
&lt;li&gt;Maintains full support for PACKET detail blocks and indented continuation lines&lt;/li&gt;
&lt;li&gt;Memory usage is now constant regardless of file size&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Progress&lt;/strong&gt;: Added &lt;code&gt;Write-Progress&lt;/code&gt; for processing feedback
&lt;ul&gt;
&lt;li&gt;Progress bar updates every 1000 records for minimal performance impact&lt;/li&gt;
&lt;li&gt;Displays current record count and file being processed&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Release notes v1.2.0.0 (2026-01-25)</title><link>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/changelog/release-v1.2.0.0/</link><pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate><guid>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/changelog/release-v1.2.0.0/</guid><description>&lt;h2 id="added"&gt;Added&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NEW&lt;/strong&gt;: Multi-line record processing for DNS PACKET detail blocks
&lt;ul&gt;
&lt;li&gt;PACKET context entries can now include detailed TCP/UDP connection information and DNS message structure&lt;/li&gt;
&lt;li&gt;Detail blocks are parsed into structured JSON format in the new &lt;code&gt;Details&lt;/code&gt; column&lt;/li&gt;
&lt;li&gt;Includes: Socket info, remote address/port, timing data, message structure (XID, Flags, QCOUNT, etc.)&lt;/li&gt;
&lt;li&gt;DNS sections (QUESTION, ANSWER, AUTHORITY, ADDITIONAL) are captured with full record details&lt;/li&gt;
&lt;li&gt;Encoded domain names in detail blocks are automatically converted to FQDN format&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NEW&lt;/strong&gt;: &lt;code&gt;Details&lt;/code&gt; column in CSV output
&lt;ul&gt;
&lt;li&gt;Contains structured JSON data for PACKET entries with detail blocks&lt;/li&gt;
&lt;li&gt;Empty for PACKET entries without details and all non-PACKET contexts&lt;/li&gt;
&lt;li&gt;Enables deep packet analysis and forensic investigation of DNS queries/responses&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NEW&lt;/strong&gt;: &lt;code&gt;NoDetailsParsing&lt;/code&gt; switch parameter for performance optimization
&lt;ul&gt;
&lt;li&gt;Skips expensive JSON parsing of PACKET detail blocks&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Can improve&lt;/strong&gt;&lt;/em&gt; processing speed by &lt;strong&gt;30-50%&lt;/strong&gt; for logs with many detail blocks&lt;/li&gt;
&lt;li&gt;Use when processing very large files (100MB+) and detailed packet structure is not needed&lt;/li&gt;
&lt;li&gt;Detail blocks are still collected in Information column, but Details column remains empty&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NEW&lt;/strong&gt;: Multi-line continuation support for non-PACKET contexts
&lt;ul&gt;
&lt;li&gt;EVENT, Note, DSPoll, and other contexts can now span multiple lines&lt;/li&gt;
&lt;li&gt;Indented continuation lines are automatically joined to the main record&amp;rsquo;s Information field&lt;/li&gt;
&lt;li&gt;Preserves complete error messages, zone updates, and diagnostic output&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NEW&lt;/strong&gt;: &lt;code&gt;ContextFilter&lt;/code&gt; recognizes additional context types: &lt;code&gt;DSPoll&lt;/code&gt;, &lt;code&gt;Init&lt;/code&gt;, &lt;code&gt;Lookup&lt;/code&gt;, &lt;code&gt;Recurse&lt;/code&gt;, &lt;code&gt;Remote&lt;/code&gt;, &lt;code&gt;Tombstone&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Effect: &lt;code&gt;Convert-DNSDebugLogFile&lt;/code&gt; can now include/exclude these diagnostic and lifecycle entries via &lt;code&gt;-ContextFilter&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NEW&lt;/strong&gt;: Statistics output now includes two dedicated files
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;_Statistic.csv&lt;/code&gt;: Daily record counts per context type (Date, Context, Count, ComputerName)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_PacketStatistic.csv&lt;/code&gt;: Daily PACKET counts by client/protocol/direction/type (Date, ClientIP, Protocol, Direction, QuestionType, Count, ComputerName)&lt;/li&gt;
&lt;li&gt;Benefit: More focused reporting (operational context volume vs. DNS traffic breakdown)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;JSON generation for PACKET detail blocks is optimized for performance (manual parsing instead of regex)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="changed"&gt;Changed&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BREAKING&lt;/strong&gt;: CSV output now includes 18 columns (added &lt;code&gt;Details&lt;/code&gt; column before &lt;code&gt;ComputerName&lt;/code&gt;)
&lt;ul&gt;
&lt;li&gt;New column order: DateTime, ThreadId, Context, PacketId, Protocol, Direction, ClientIP, Xid, Type, Opcode, FlagsHex, FlagsChar, ResponseCode, QuestionType, QuestionName, Information, &lt;strong&gt;Details&lt;/strong&gt;, ComputerName&lt;/li&gt;
&lt;li&gt;Impact: Scripts that rely on column positions must be updated&lt;/li&gt;
&lt;li&gt;Benefit: Rich packet analysis capabilities without changing existing Information column behavior&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Data line processing refactored to read all lines into memory for efficient multi-line record detection
&lt;ul&gt;
&lt;li&gt;Performance: Minimal impact due to optimized List&lt;string&gt; usage&lt;/li&gt;
&lt;li&gt;Benefit: Enables accurate lookahead for detail blocks and continuation lines&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Question names that are missing or encoded as empty are now handled gracefully (no parse errors); CSV output will contain an empty QuestionName field when absent&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="improved"&gt;Improved&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Convert-DNSDebugLogFile&lt;/code&gt; parsing is more resilient: stricter line validation and improved extraction reduce spurious/invalid rows from malformed logs while preserving the CSV/statistic output format&lt;/li&gt;
&lt;li&gt;PACKET context detection distinguishes between simple queries and queries with detail blocks&lt;/li&gt;
&lt;li&gt;Empty lines after PACKET entries without details are properly skipped&lt;/li&gt;
&lt;li&gt;Domain name decoding in detail blocks uses existing &lt;code&gt;ConvertTo-Fqdn&lt;/code&gt; function for consistency&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="performance"&gt;Performance&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Processing speed maintained for logs without detail blocks&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NoDetailsParsing&lt;/code&gt; switch provides 30-50% speed improvement when JSON parsing is not needed&lt;/li&gt;
&lt;li&gt;Efficient state management during multi-line record processing&lt;/li&gt;
&lt;li&gt;Optimized string operations (TrimStart, Join) instead of regex for continuation line handling&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="notes"&gt;Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;These changes are designed to be backward compatible for normal usage. If you rely on an exact set of context names or previously-strict parsing behavior, please validate downstream scripts&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;Details&lt;/code&gt; column is always present in CSV output; use &lt;code&gt;NoDetailsParsing&lt;/code&gt; to keep it empty for performance&lt;/li&gt;
&lt;li&gt;Existing scripts that parse CSV by column position need to account for the new &lt;code&gt;Details&lt;/code&gt; column (position 17, before ComputerName)&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Release notes v1.0.0 (2026-01-23)</title><link>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/changelog/release-v1.0.0/</link><pubDate>Fri, 23 Jan 2026 00:00:00 +0000</pubDate><guid>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/changelog/release-v1.0.0/</guid><description>&lt;h3 id="added"&gt;Added&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Initial release&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Convert-DNSDebugLogFile&lt;/code&gt; - High-performance parser for Windows DNS Server debug log files&lt;/li&gt;
&lt;li&gt;Parses all 15 standard fields from DNS debug logs into structured CSV format&lt;/li&gt;
&lt;li&gt;Supports customizable CSV delimiters (default: semicolon)&lt;/li&gt;
&lt;li&gt;Optional ComputerName column for multi-server log consolidation&lt;/li&gt;
&lt;li&gt;Three output modes: CSV data only, statistics only, or both&lt;/li&gt;
&lt;li&gt;Statistical summaries aggregating activity by client IP, protocol, and query type&lt;/li&gt;
&lt;li&gt;Pipeline support for batch processing multiple log files&lt;/li&gt;
&lt;li&gt;Header validation to ensure data integrity (can be bypassed if needed)&lt;/li&gt;
&lt;li&gt;Optional automatic compression of output files (ZIP format)&lt;/li&gt;
&lt;li&gt;Optional removal of source files after successful processing&lt;/li&gt;
&lt;li&gt;Culture-aware date parsing and formatting for international DNS servers&lt;/li&gt;
&lt;li&gt;Optimized for large files (100MB + ) using streaming I/O and efficient string operations&lt;/li&gt;
&lt;li&gt;Compatible with PowerShell 5.1+ (Desktop and Core editions)&lt;/li&gt;
&lt;li&gt;Supports Windows Server 2016+ and DNS Server 2012 R2 through 2025 log formats&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Release notes v1.1.0 (2026-01-23)</title><link>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/changelog/release-v1.1.0.0/</link><pubDate>Fri, 23 Jan 2026 00:00:00 +0000</pubDate><guid>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/changelog/release-v1.1.0.0/</guid><description>&lt;h2 id="added"&gt;Added&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NEW&lt;/strong&gt;: ContextFilter parameter for selective log parsing
&lt;ul&gt;
&lt;li&gt;Filter log entries by context type: PACKET (DNS queries/responses), EVENT (server events), or Note (diagnostic information)&lt;/li&gt;
&lt;li&gt;Allows focused analysis on specific log entry types&lt;/li&gt;
&lt;li&gt;Default: All (includes all context types)&lt;/li&gt;
&lt;li&gt;Use cases: Focus on DNS traffic only, monitor server events, troubleshoot diagnostic issues&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NEW&lt;/strong&gt;: Information field in CSV output
&lt;ul&gt;
&lt;li&gt;Captures detailed information for EVENT and Note context entries&lt;/li&gt;
&lt;li&gt;Examples: &amp;ldquo;The DNS server has started.&amp;rdquo;, &amp;ldquo;Zone loading completed&amp;rdquo;, socket errors, internal state messages&lt;/li&gt;
&lt;li&gt;Enhances visibility into DNS server operational events and diagnostics&lt;/li&gt;
&lt;li&gt;Field is populated when Context is EVENT or Note; empty for PACKET entries&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="changed"&gt;Changed&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BREAKING&lt;/strong&gt;: ComputerName column now always included at the end of all output records
&lt;ul&gt;
&lt;li&gt;Previously: ComputerName was conditionally included at the beginning when parameter was specified&lt;/li&gt;
&lt;li&gt;Now: ComputerName always present as the last column; empty when parameter not specified&lt;/li&gt;
&lt;li&gt;Benefit: Consistent output structure simplifies multi-server log consolidation and automated processing&lt;/li&gt;
&lt;li&gt;Impact: Existing scripts that parse column positions or expect conditional column presence must be updated&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="added-1"&gt;Added&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Context filtering to focus on specific log entry types (PACKET, EVENT, NOTE) via ContextFilter parameter&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="improved"&gt;Improved&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Refactored comment-based help for Convert-DNSDebugLogFile for better clarity and conciseness&lt;/li&gt;
&lt;li&gt;Updated parameter descriptions to be more informative and actionable&lt;/li&gt;
&lt;li&gt;Improved example documentation with more focused and practical use cases&lt;/li&gt;
&lt;li&gt;Enhanced about_DNSServer.DebugLogParser help file to reflect current functionality&lt;/li&gt;
&lt;li&gt;Enhanced verbose logging to provide more detailed progress information during processing&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Legal Notice</title><link>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/impressum/</link><pubDate>Sun, 18 Jan 2026 00:00:00 +0000</pubDate><guid>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/impressum/</guid><description>&lt;div&gt;&lt;a id="td-block-0" class="td-anchor-no-extra-offset"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;section class="row td-box td-box--primary td-box--height-auto"&gt;
&lt;div class="col"&gt;
&lt;div class="h1"&gt;
&lt;h1 id="information-pursuant-to-section-5-of-the-german-telemedia-act-tmg"&gt;Information pursuant to Section 5 of the German Telemedia Act (TMG)&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;br&gt;
&lt;h2 id="legal-notice"&gt;Legal notice&lt;/h2&gt;
&lt;p&gt;Andreas Bellstedt&lt;br&gt;
Brunnenstr. 38&lt;br&gt;
75387 Neubulach&lt;br&gt;
Germany&lt;/p&gt;
&lt;br&gt;
&lt;h2 id="contact"&gt;Contact&lt;/h2&gt;
&lt;p&gt;Email: &lt;a href="mailto:blog@andibellstedt.com"&gt;blog@andibellstedt.com&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;h2 id="legal-form--business-status"&gt;Legal form / business status&lt;/h2&gt;
&lt;p&gt;This website is operated by a private individual / sole proprietor.&lt;/p&gt;
&lt;br&gt;
&lt;h2 id="responsible-for-content-pursuant-to-section-552-of-the-german-interstate-broadcasting-treaty-rstv"&gt;Responsible for content pursuant to Section 55(2) of the German Interstate Broadcasting Treaty (RStV)&lt;/h2&gt;
&lt;p&gt;Andreas Bellstedt&lt;br&gt;
(Address above)&lt;/p&gt;
&lt;br&gt;
&lt;h2 id="liability-for-content"&gt;Liability for content&lt;/h2&gt;
&lt;p&gt;As a service provider, we are responsible for our own content on these pages in accordance with Section 7(1) TMG under general law. Pursuant to Sections 8–10 TMG, however, we are not obligated to monitor transmitted or stored third‑party information or to investigate circumstances that indicate illegal activity.&lt;/p&gt;</description></item><item><title>Privacy Policy</title><link>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/privacy-policy/</link><pubDate>Sun, 18 Jan 2026 00:00:00 +0000</pubDate><guid>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/privacy-policy/</guid><description>&lt;div&gt;&lt;a id="td-block-0" class="td-anchor-no-extra-offset"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;section class="row td-box td-box--primary td-box--height-auto"&gt;
&lt;div class="col"&gt;
&lt;div class="h1"&gt;
&lt;h1 id="privacy-policy"&gt;Privacy Policy&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;br&gt;
&lt;h2 id="1-privacy-at-a-glance"&gt;1. Privacy at a Glance&lt;/h2&gt;
&lt;h3 id="general-notes"&gt;General Notes&lt;/h3&gt;
&lt;p&gt;The following notes provide a simple overview of what happens to your personal data when you visit this website. Personal data are all data with which you can be personally identified. Detailed information on the topic of data protection can be found in our privacy policy listed below this text.&lt;/p&gt;
&lt;h3 id="data-collection-on-this-website"&gt;Data Collection on this Website&lt;/h3&gt;
&lt;h4 id="who-is-responsible-for-data-collection-on-this-website"&gt;Who is responsible for data collection on this website?&lt;/h4&gt;
&lt;p&gt;The data processing on this website is carried out by the website operator. Their contact details can be found in the section “Notice on the Data Controller” in this privacy policy.&lt;/p&gt;</description></item><item><title>About the Author</title><link>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/about/</guid><description>&lt;link rel="preload" as="image" href="https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/images/main-background_hu_fa24d3b9a9ebf86.jpg" media="(max-width: 1200px)"&gt;
&lt;link rel="preload" as="image" href="https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/images/main-background_hu_96620a9289dc443e.jpg" media="(min-width: 1200px)"&gt;
&lt;style&gt;
#td-cover-block-0 {
 background-image: url(/v1.2.1.0/images/main-background_hu_fa24d3b9a9ebf86.jpg);
}
@media only screen and (min-width: 1200px) {
 #td-cover-block-0 {
 background-image: url(/v1.2.1.0/images/main-background_hu_96620a9289dc443e.jpg);
 }
}
&lt;/style&gt;
&lt;section id="td-cover-block-0" class="row td-cover-block td-cover-block--height-auto td-below-navbar js-td-cover td-overlay td-overlay--dark -bg-dark" &gt;
 &lt;div class="col-12"&gt;
 &lt;div class="container td-overlay__inner"&gt;
 &lt;div class="text-center"&gt;
 &lt;h1 class="display-1 mt-0 mt-md-5 pb-4"&gt;About the Author&lt;/h1&gt;
 &lt;div class="pt-3 lead"&gt;
 &lt;!-- color="primary bg-gradient td-below-navbar" --&gt;
&lt;p&gt;&lt;img src="https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/images/about/author.png" alt="Me"&gt;&lt;/p&gt;
&lt;!-- prettier-ignore --&gt;
&lt;p class="display-6"&gt;- Andi Bellstedt -&lt;/p&gt;
&lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/section&gt;
&lt;div&gt;&lt;a id="td-block-1" class="td-anchor-no-extra-offset"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;section class="row td-box td-box--white td-box--height-auto"&gt;
&lt;div class="col"&gt;
&lt;div class="container"&gt;
&lt;h2 id="hello-to-the-world"&gt;Hello to the World!&lt;/h2&gt;
&lt;br&gt;
&lt;p&gt;I&amp;rsquo;m &lt;strong&gt;Andreas Bellstedt&lt;/strong&gt; — an IT professional with more than &lt;strong&gt;20 years of experience&lt;/strong&gt; across enterprise environments. Usually I am called &lt;strong&gt;Andi&lt;/strong&gt;.&lt;br&gt;
I’m passionate about technology, but even more about applying it in a way that improves reliability, security, and operational efficiency.&lt;/p&gt;</description></item><item><title>Practical usage in a Domain Environment (GPO-driven collection and conversion)</title><link>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/docs/examples/gpo-driven-collection/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/docs/examples/gpo-driven-collection/</guid><description>&lt;p&gt;This document outlines a practical, end-to-end example of running DNSServer.DebugLogParser in an Active Directory domain environment, focused on converting Windows DNS Server debug logs on domain controllers.&lt;/p&gt;
&lt;p&gt;This example is accompanied by a &lt;a href="../gpo/T0-C-Analytics-DNSDebugLogging.zip"&gt;ZIP archive&lt;/a&gt;, which provide the policy artifacts used to implement the workflow described here.&lt;br&gt;
The most relevant artifacts are &lt;a href="../gpo/backup/manifest.xml" target="_blank" rel="noopener noreferrer"&gt;backup manifest&lt;/a&gt;, &lt;a href="../gpo/backup/{2B6F16BC-0E7C-4787-83D7-2854FED882EE}/gpreport.xml" target="_blank" rel="noopener noreferrer"&gt;GPO report&lt;/a&gt;, &lt;a href="../gpo/backup/{2B6F16BC-0E7C-4787-83D7-2854FED882EE}/DomainSysvol/GPO/Machine/Preferences/Files/Files.xml" target="_blank" rel="noopener noreferrer"&gt;Files.xml&lt;/a&gt;, &lt;a href="../gpo/backup/{2B6F16BC-0E7C-4787-83D7-2854FED882EE}/DomainSysvol/GPO/Machine/Preferences/Files/Set-DNSServerDebugLogging.ps1" target="_blank" rel="noopener noreferrer"&gt;Set-DNSServerDebugLogging.ps1&lt;/a&gt;, and &lt;a href="../gpo/backup/{2B6F16BC-0E7C-4787-83D7-2854FED882EE}/DomainSysvol/GPO/Machine/Preferences/ScheduledTasks/ScheduledTasks.xml" target="_blank" rel="noopener noreferrer"&gt;ScheduledTasks.xml&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="scenario"&gt;Scenario&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Multiple domain controllers (DCs) host the DNS Server role.&lt;/li&gt;
&lt;li&gt;DNS debug logging is enabled and configured consistently on each DC via a scheduled task (writing log files to &lt;code&gt;C:\Administration\Logs\DNSServer&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;A centrally managed process converts logs into CSV for:
&lt;ul&gt;
&lt;li&gt;security analytics&lt;/li&gt;
&lt;li&gt;operational reporting&lt;/li&gt;
&lt;li&gt;troubleshooting&lt;/li&gt;
&lt;li&gt;compliance/retention&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="target-outcomes"&gt;Target outcomes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Consistent conversion settings across all DCs&lt;/li&gt;
&lt;li&gt;Predictable output location and naming&lt;/li&gt;
&lt;li&gt;Optional compression to reduce storage footprint&lt;/li&gt;
&lt;li&gt;Optional statistics outputs for quick daily rollups&lt;/li&gt;
&lt;li&gt;Minimal host-side risk, with explicit rerun and cleanup considerations&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="suggested-architecture"&gt;Suggested architecture&lt;/h2&gt;
&lt;h3 id="collection-model-local-convert--central-pull"&gt;Collection model: local convert + central pull&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Each DC writes DNS debug logs to disk with rollover enabled.&lt;/li&gt;
&lt;li&gt;Each DC converts rotated &lt;code&gt;*.log&lt;/code&gt; files into a data CSV and statistics CSVs, then compresses the outputs into &lt;code&gt;*.zip&lt;/code&gt; on a schedule (Task Scheduler).&lt;/li&gt;
&lt;li&gt;Outputs are written next to the log files so the pipeline stays simple.&lt;/li&gt;
&lt;li&gt;A central server collects the &lt;code&gt;*.zip&lt;/code&gt; outputs, for example via file share ingestion, scheduled copy, SIEM forwarder, or an agent-based collector.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This model minimizes network reads of large raw log files and keeps parsing close to the data.&lt;/p&gt;</description></item><item><title>Scheduled Task Example</title><link>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/docs/examples/scheduletask/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/docs/examples/scheduletask/</guid><description>&lt;p&gt;This script creates a Windows Scheduled Task that runs daily at 2:00 AM. It imports the module and processes all the log file in the folder where the script is executed (in this example &amp;ldquo;C:\Administration\Logs\DNS&amp;rdquo;). The process does compress the output into ZIP-files and removes the original to maintain hygiene.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-powershell"&gt;$actionParams = @{
 Execute = &amp;quot;powershell.exe&amp;quot;
 Argument = '-ExecutionPolicy RemoteSigned -Command &amp;quot;Import-Module DNSServer.DebugLogParser; Get-ChildItem .\*.log | Sort-Object lastwritetime, Name -Descending | Convert-DNSDebugLogFile -ComputerName $env:COMPUTERNAME -Delimiter \&amp;quot;;\&amp;quot; -OutputType Both -ContextFilter Packet -OutputCulture sv-SE -CompressOutput&amp;quot;'
 WorkingDirectory = &amp;quot;C:\Administration\Logs\DNS&amp;quot;
}
$Action = New-ScheduledTaskAction @actionParams

$Trigger = New-ScheduledTaskTrigger -Daily -At &amp;quot;2:00AM&amp;quot;

Register-ScheduledTask -TaskName &amp;quot;Process DNS Logs&amp;quot; -Action $Action -Trigger $Trigger -Description &amp;quot;Convert DNS debug logs to CSV daily&amp;quot;
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Search Results</title><link>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/search/</guid><description>&lt;!--
 This page is generated by the search layout and is not meant to be edited directly.
 The content is generated from the search index and the search query.
 The search query is passed as a URL parameter "q", e.g. /en/search?q=example
--&gt;</description></item><item><title>Website information</title><link>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/site/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/site/</guid><description>&lt;!--
 This comment should stay for translation purposes on pester testing, but the content of this comment is not much relevant for the end user and can be ignored.
 This page is meant to provide information about the website, such as the theme used, build process, and other relevant details.
--&gt;
&lt;h2 id="build-information"&gt;Build information&lt;/h2&gt;
&lt;p&gt;Site built with [&lt;span class="badge bg-primary text-bg-primary fs-6"&gt;Docsy]&lt;/span&gt; theme for Hugo.&lt;/p&gt;</description></item><item><title>Security Analysis Workflow with SQL Server</title><link>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/docs/examples/security-analysis-sql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://DNSServerDebugLogParser.andibellstedt.com/v1.2.1.0/docs/examples/security-analysis-sql/</guid><description>&lt;p&gt;This example shows a practical workflow for security analytics: parse a DNS
debug log with &lt;code&gt;Convert-DNSDebugLogFile&lt;/code&gt;, import the generated CSV into SQL
Server, and run a query that highlights unusually high volumes of TXT record
lookups.&lt;/p&gt;
&lt;p&gt;For best interoperability, this example writes timestamps in an ISO-like format
by using &lt;code&gt;-OutputCulture 'sv-SE'&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="required-modules"&gt;Required modules&lt;/h2&gt;
&lt;p&gt;This example uses the following PowerShell modules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DNSServer.DebugLogParser&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SqlServer&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Install them if needed:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-powershell"&gt;Install-Module -Name DNSServer.DebugLogParser -Scope CurrentUser
Install-Module -Name SqlServer -Scope CurrentUser
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="scenario"&gt;Scenario&lt;/h2&gt;
&lt;p&gt;Use this workflow when you want to move parsed DNS debug log data into SQL
Server so you can:&lt;/p&gt;</description></item></channel></rss>