Microsoft Windows Server DNS Monitoring Control Server WA

Microsoft.Windows.DNSServer.2016.ControlServer.WA (WriteActionModuleType)

Script Write Action that performs multiple server control actions

Element properties:

TypeWriteActionModuleType
IsolationAny
AccessibilityPublic
RunAsDefault
InputTypeSystem.BaseData
OutputTypeSystem.CommandOutput

Member Modules:

ID Module Type TypeId RunAs 
WA WriteAction Microsoft.Windows.PSScriptWriteAction Default

Source Code:

<WriteActionModuleType ID="Microsoft.Windows.DNSServer.2016.ControlServer.WA" Accessibility="Public" Batching="false">
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="Action" type="xsd:string"/>
</Configuration>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<WriteAction ID="WA" TypeID="Microsoft.Windows.PSScriptWriteAction">
<ScriptName>Microsoft.Windows.Server.DNS.ControlServer.WA.ps1</ScriptName>
<Arguments>"-Command $Config/Action$"</Arguments>
<ScriptBody><Script>#Copyright (c) Microsoft Corporation. All rights reserved.

#*************************************************************************
# ScriptName: Microsoft.Windows.Server.DNS.ControlServer.WA
#
# Purpose: DNS Server DNS Control Server Write Action
#
# File: Microsoft.Windows.Server.DNS.ControlServer.WA.ps1
#*************************************************************************


param (
[parameter(Mandatory=$false)]
[string]$Command = [string]::Empty

)

Function Start-Initialization
{
Set-Variable ErrorDnsWmiClass -value "Unable to start scavenging." -Scope Script -Option Constant
Set-Variable ErrorDnsWmiCacheClass -value "Unable to clear DNS Cache." -Scope Script -Option Constant
Set-Variable ErrorBadArguments -value "Bad command specified." -Scope Script -Option Constant
Set-Variable MessageDnsScavengingStarted -value "Scavening successfully started." -Scope Script -Option Constant
Set-Variable MessageDnsClearCacheStarted -value "Cache successfully cleared." -Scope Script -Option Constant

Set-Variable SCRIPT_NAME -value "Microsoft.Windows.DNSServer.2016.ControlServer.WA.ps1" -Scope Script -Option Constant
}


Function Start-Scavenging
{
try
{
Start-DnsServerScavenging -Force
Write-Host "$Script:MessageDnsScavengingStarted"
}
catch
{
$ErrorNumber = $_.Exception.HResult
Write-ErrorOutput -strMessageArg $Script:ErrorDnsWmiClass -ErrorDescription $_.Exception.Message -ErrorNumber $ErrorNumber
}
}


Function Clear-DnsCache
{
try
{
Clear-DnsServerCache -Force
Write-Host "$Script:MessageDnsClearCacheStarted"
}
catch
{
$ErrorNumber = $_.Exception.HResult
Write-ErrorOutput -strMessageArg $Script:ErrorDnsWmiCacheClass -ErrorDescription $_.Exception.Message -ErrorNumber $ErrorNumber

}
}

Function Write-ErrorOutput([string]$strMessageArg, [string]$ErrorDescription = [string]::Empty,$ErrorNumber = $null)
{
Write-Host "$Script:SCRIPT_NAME completed with an error."
Write-Host "$strMessageArg"
Write-Host "Command: $Script:Command"

$sErrorDescription = "Error: "
$double = 0

if ( -Not [string]::IsNullOrEmpty($ErrorDescription) )
{

if([double]::TryParse($ErrorNumber,[ref]$double))
{
$sErrorDescription = $ErrorDescription + "0x" + $ErrorNumber.ToString("x") + " - "
}

$sErrorDescription = $sErrorDescription + $ErrorDescription
Write-Host $sErrorDescription
}


}

Function Import-CmdLets ()
{
try
{
$dnsmodule = Get-Module -Name "DnsServer"
if ($null -eq $dnsmodule)
{
Import-Module DnsServer
}
}
catch [System.IO.FileNotFoundException]
{
$ErrorMessage = "Dns cmdlets doesn't exist."
$ErrorNumber = 1
Write-ErrorOutput -strMessageArg $Script:ErrorDnsWmiCacheClass -ErrorDescription $ErrorMessage -ErrorNumber $ErrorNumber
exit
}
catch
{
$ErrorMessage = $_.Exception.Message
$ErrorNumber = 1
Write-ErrorOutput -strMessageArg $Script:ErrorDnsWmiCacheClass -ErrorDescription $ErrorMessage -ErrorNumber $ErrorNumber
exit
}
}

Start-Initialization
Import-CmdLets

switch ($Command) {
scavenge {Start-Scavenging ;break}
clearcache {Clear-DnsCache ; break}
default {Write-ErrorOutput -strMessageArg $Script:ErrorBadArguments ; break}
}
</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</WriteAction>
</MemberModules>
<Composition>
<Node ID="WA"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.CommandOutput</OutputType>
<InputType>System!System.BaseData</InputType>
</WriteActionModuleType>