DSCResources/DSC_DnsServerDiagnostics/DSC_DnsServerDiagnostics.psm1
$script:dscResourceCommonPath = Join-Path -Path $PSScriptRoot -ChildPath '..\..\Modules\DscResource.Common' $script:dnsServerDscCommonPath = Join-Path -Path $PSScriptRoot -ChildPath '..\..\Modules\DnsServerDsc.Common' Import-Module -Name $script:dscResourceCommonPath Import-Module -Name $script:dnsServerDscCommonPath $script:localizedData = Get-LocalizedData -DefaultUICulture 'en-US' <# .SYNOPSIS This will return a hashtable of results about DNS Diagnostics .PARAMETER DnsServer Specifies the DNS server to connect to, or use 'localhost' for the current node. #> function Get-TargetResource { [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param ( [Parameter(Mandatory = $true)] [System.String] $DnsServer ) Assert-Module -ModuleName 'DnsServer' Write-Verbose -Message $script:localizedData.GettingDnsServerDiagnosticsMessage $getDnsServerDiagnosticsParameters = @{ ErrorAction = 'Stop' } if ($DnsServer -ne 'localhost') { $getDnsServerDiagnosticsParameters['ComputerName'] = $DnsServer } $dnsServerDiagnostics = Get-DnsServerDiagnostics @getDnsServerDiagnosticsParameters $returnValue = @{ DnsServer = $DnsServer Answers = $dnsServerDiagnostics.Answers EnableLogFileRollover = $dnsServerDiagnostics.EnableLogFileRollover EnableLoggingForLocalLookupEvent = $dnsServerDiagnostics.EnableLoggingForLocalLookupEvent EnableLoggingForPluginDllEvent = $dnsServerDiagnostics.EnableLoggingForPluginDllEvent EnableLoggingForRecursiveLookupEvent = $dnsServerDiagnostics.EnableLoggingForRecursiveLookupEvent EnableLoggingForRemoteServerEvent = $dnsServerDiagnostics.EnableLoggingForRemoteServerEvent EnableLoggingForServerStartStopEvent = $dnsServerDiagnostics.EnableLoggingForServerStartStopEvent EnableLoggingForTombstoneEvent = $dnsServerDiagnostics.EnableLoggingForTombstoneEvent EnableLoggingForZoneDataWriteEvent = $dnsServerDiagnostics.EnableLoggingForZoneDataWriteEvent EnableLoggingForZoneLoadingEvent = $dnsServerDiagnostics.EnableLoggingForZoneLoadingEvent EnableLoggingToFile = $dnsServerDiagnostics.EnableLoggingToFile EventLogLevel = $dnsServerDiagnostics.EventLogLevel FilterIPAddressList = $dnsServerDiagnostics.FilterIPAddressList FullPackets = $dnsServerDiagnostics.FullPackets LogFilePath = $dnsServerDiagnostics.LogFilePath MaxMBFileSize = $dnsServerDiagnostics.MaxMBFileSize Notifications = $dnsServerDiagnostics.Notifications Queries = $dnsServerDiagnostics.Queries QuestionTransactions = $dnsServerDiagnostics.QuestionTransactions ReceivePackets = $dnsServerDiagnostics.ReceivePackets SaveLogsToPersistentStorage = $dnsServerDiagnostics.SaveLogsToPersistentStorage SendPackets = $dnsServerDiagnostics.SendPackets TcpPackets = $dnsServerDiagnostics.TcpPackets UdpPackets = $dnsServerDiagnostics.UdpPackets UnmatchedResponse = $dnsServerDiagnostics.UnmatchedResponse Update = $dnsServerDiagnostics.Update UseSystemEventLog = $dnsServerDiagnostics.UseSystemEventLog WriteThrough = $dnsServerDiagnostics.WriteThrough } return $returnValue } <# .SYNOPSIS This will set the desired state .PARAMETER DnsServer Specifies the DNS server to connect to, or use 'localhost' for the current node. .PARAMETER Answers Specifies whether to enable the logging of DNS responses. .PARAMETER EnableLogFileRollover Specifies whether to enable log file rollover. .PARAMETER EnableLoggingForLocalLookupEvent Specifies whether the DNS server logs local lookup events. .PARAMETER EnableLoggingForPluginDllEvent Specifies whether the DNS server logs dynamic link library (DLL) plug-in events. .PARAMETER EnableLoggingForRecursiveLookupEvent Specifies whether the DNS server logs recursive lookup events. .PARAMETER EnableLoggingForRemoteServerEvent Specifies whether the DNS server logs remote server events. .PARAMETER EnableLoggingForServerStartStopEvent Specifies whether the DNS server logs server start and stop events. .PARAMETER EnableLoggingForTombstoneEvent Specifies whether the DNS server logs tombstone events. .PARAMETER EnableLoggingForZoneDataWriteEvent Specifies Controls whether the DNS server logs zone data write events. .PARAMETER EnableLoggingForZoneLoadingEvent Specifies whether the DNS server logs zone load events. .PARAMETER EnableLoggingToFile Specifies whether the DNS server logs logging-to-file. .PARAMETER EventLogLevel Specifies an event log level. Valid values are Warning, Error, and None. .PARAMETER FilterIPAddressList Specifies an array of IP addresses to filter. When you enable logging, traffic to and from these IP addresses is logged. If you do not specify any IP addresses, traffic to and from all IP addresses is logged. .PARAMETER FullPackets Specifies whether the DNS server logs full packets. .PARAMETER LogFilePath Specifies a log file path. .PARAMETER MaxMBFileSize Specifies the maximum size of the log file. This parameter is relevant if you set EnableLogFileRollover and EnableLoggingToFile to $True. .PARAMETER Notifications Specifies whether the DNS server logs notifications. .PARAMETER Queries Specifies whether the DNS server allows query packet exchanges to pass through the content filter, such as the IPFilterList parameter. .PARAMETER QuestionTransactions Specifies whether the DNS server logs queries. .PARAMETER ReceivePackets Specifies whether the DNS server logs receive packets. .PARAMETER SaveLogsToPersistentStorage Specifies whether the DNS server saves logs to persistent storage. .PARAMETER SendPackets Specifies whether the DNS server logs send packets. .PARAMETER TcpPackets Specifies whether the DNS server logs TCP packets. .PARAMETER UdpPackets Specifies whether the DNS server logs UDP packets. .PARAMETER UnmatchedResponse Specifies whether the DNS server logs unmatched responses. .PARAMETER Update Specifies whether the DNS server logs updates. .PARAMETER UseSystemEventLog Specifies whether the DNS server uses the system event log for logging. .PARAMETER WriteThrough Specifies whether the DNS server logs write-throughs. #> function Set-TargetResource { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [System.String] $DnsServer, [Parameter()] [Boolean] $Answers, [Parameter()] [Boolean] $EnableLogFileRollover, [Parameter()] [Boolean] $EnableLoggingForLocalLookupEvent, [Parameter()] [Boolean] $EnableLoggingForPluginDllEvent, [Parameter()] [Boolean] $EnableLoggingForRecursiveLookupEvent, [Parameter()] [Boolean] $EnableLoggingForRemoteServerEvent, [Parameter()] [Boolean] $EnableLoggingForServerStartStopEvent, [Parameter()] [Boolean] $EnableLoggingForTombstoneEvent, [Parameter()] [Boolean] $EnableLoggingForZoneDataWriteEvent, [Parameter()] [Boolean] $EnableLoggingForZoneLoadingEvent, [Parameter()] [Boolean] $EnableLoggingToFile, [Parameter()] [UInt32] $EventLogLevel, [Parameter()] [String[]] $FilterIPAddressList, [Parameter()] [Boolean] $FullPackets, [Parameter()] [System.String] $LogFilePath, [Parameter()] [UInt32] $MaxMBFileSize, [Parameter()] [Boolean] $Notifications, [Parameter()] [Boolean] $Queries, [Parameter()] [Boolean] $QuestionTransactions, [Parameter()] [Boolean] $ReceivePackets, [Parameter()] [Boolean] $SaveLogsToPersistentStorage, [Parameter()] [Boolean] $SendPackets, [Parameter()] [Boolean] $TcpPackets, [Parameter()] [Boolean] $UdpPackets, [Parameter()] [Boolean] $UnmatchedResponse, [Parameter()] [Boolean] $Update, [Parameter()] [Boolean] $UseSystemEventLog, [Parameter()] [Boolean] $WriteThrough ) $PSBoundParameters.Remove('DnsServer') $setDnsServerDiagnosticsParameters = Remove-CommonParameter -Hashtable $PSBoundParameters $setDnsServerDiagnosticsParameters['ErrorAction'] = 'Stop' if ($DnsServer -ne 'localhost') { $setDnsServerDiagnosticsParameters['ComputerName'] = $DnsServer } Write-Verbose -Message $script:localizedData.SettingDnsServerDiagnosticsMessage Set-DnsServerDiagnostics @setDnsServerDiagnosticsParameters } <# .SYNOPSIS This will set the desired state .PARAMETER DnsServer Specifies the DNS server to connect to, or use 'localhost' for the current node. .PARAMETER Answers Specifies whether to enable the logging of DNS responses. .PARAMETER EnableLogFileRollover Specifies whether to enable log file rollover. .PARAMETER EnableLoggingForLocalLookupEvent Specifies whether the DNS server logs local lookup events. .PARAMETER EnableLoggingForPluginDllEvent Specifies whether the DNS server logs dynamic link library (DLL) plug-in events. .PARAMETER EnableLoggingForRecursiveLookupEvent Specifies whether the DNS server logs recursive lookup events. .PARAMETER EnableLoggingForRemoteServerEvent Specifies whether the DNS server logs remote server events. .PARAMETER EnableLoggingForServerStartStopEvent Specifies whether the DNS server logs server start and stop events. .PARAMETER EnableLoggingForTombstoneEvent Specifies whether the DNS server logs tombstone events. .PARAMETER EnableLoggingForZoneDataWriteEvent Specifies Controls whether the DNS server logs zone data write events. .PARAMETER EnableLoggingForZoneLoadingEvent Specifies whether the DNS server logs zone load events. .PARAMETER EnableLoggingToFile Specifies whether the DNS server logs logging-to-file. .PARAMETER EventLogLevel Specifies an event log level. Valid values are Warning, Error, and None. .PARAMETER FilterIPAddressList Specifies an array of IP addresses to filter. When you enable logging, traffic to and from these IP addresses is logged. If you do not specify any IP addresses, traffic to and from all IP addresses is logged. .PARAMETER FullPackets Specifies whether the DNS server logs full packets. .PARAMETER LogFilePath Specifies a log file path. .PARAMETER MaxMBFileSize Specifies the maximum size of the log file. This parameter is relevant if you set EnableLogFileRollover and EnableLoggingToFile to $True. .PARAMETER Notifications Specifies whether the DNS server logs notifications. .PARAMETER Queries Specifies whether the DNS server allows query packet exchanges to pass through the content filter, such as the IPFilterList parameter. .PARAMETER QuestionTransactions Specifies whether the DNS server logs queries. .PARAMETER ReceivePackets Specifies whether the DNS server logs receive packets. .PARAMETER SaveLogsToPersistentStorage Specifies whether the DNS server saves logs to persistent storage. .PARAMETER SendPackets Specifies whether the DNS server logs send packets. .PARAMETER TcpPackets Specifies whether the DNS server logs TCP packets. .PARAMETER UdpPackets Specifies whether the DNS server logs UDP packets. .PARAMETER UnmatchedResponse Specifies whether the DNS server logs unmatched responses. .PARAMETER Update Specifies whether the DNS server logs updates. .PARAMETER UseSystemEventLog Specifies whether the DNS server uses the system event log for logging. .PARAMETER WriteThrough Specifies whether the DNS server logs write-throughs. #> function Test-TargetResource { [CmdletBinding()] [OutputType([Boolean])] param ( [Parameter(Mandatory = $true)] [System.String] $DnsServer, [Parameter()] [Boolean] $Answers, [Parameter()] [Boolean] $EnableLogFileRollover, [Parameter()] [Boolean] $EnableLoggingForLocalLookupEvent, [Parameter()] [Boolean] $EnableLoggingForPluginDllEvent, [Parameter()] [Boolean] $EnableLoggingForRecursiveLookupEvent, [Parameter()] [Boolean] $EnableLoggingForRemoteServerEvent, [Parameter()] [Boolean] $EnableLoggingForServerStartStopEvent, [Parameter()] [Boolean] $EnableLoggingForTombstoneEvent, [Parameter()] [Boolean] $EnableLoggingForZoneDataWriteEvent, [Parameter()] [Boolean] $EnableLoggingForZoneLoadingEvent, [Parameter()] [Boolean] $EnableLoggingToFile, [Parameter()] [UInt32] $EventLogLevel, [Parameter()] [String[]] $FilterIPAddressList, [Parameter()] [Boolean] $FullPackets, [Parameter()] [System.String] $LogFilePath, [Parameter()] [UInt32] $MaxMBFileSize, [Parameter()] [Boolean] $Notifications, [Parameter()] [Boolean] $Queries, [Parameter()] [Boolean] $QuestionTransactions, [Parameter()] [Boolean] $ReceivePackets, [Parameter()] [Boolean] $SaveLogsToPersistentStorage, [Parameter()] [Boolean] $SendPackets, [Parameter()] [Boolean] $TcpPackets, [Parameter()] [Boolean] $UdpPackets, [Parameter()] [Boolean] $UnmatchedResponse, [Parameter()] [Boolean] $Update, [Parameter()] [Boolean] $UseSystemEventLog, [Parameter()] [Boolean] $WriteThrough ) Write-Verbose -Message $script:localizedData.EvaluatingDnsServerDiagnosticsMessage $currentState = Get-TargetResource -DnsServer $DnsServer $params = @{ CurrentValues = $currentState DesiredValues = $PSBoundParameters ExcludeProperties = @('DnsServer') TurnOffTypeChecking = $true } $result = Test-DscParameterState @params return $result } |