Purge Queue

Microsoft.MSMQ.6.3.PurgeQueue (WriteActionModuleType)

Removes all messages in the Queue.

Element properties:

TypeWriteActionModuleType
IsolationAny
AccessibilityPublic
RunAsMicrosoft.MSMQ.6.3.QueueAccessProfile
InputTypeSystem.BaseData

Member Modules:

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

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
TimeoutSecondsint$Config/TimeoutSeconds$Timeout Seconds

Source Code:

<WriteActionModuleType ID="Microsoft.MSMQ.6.3.PurgeQueue" Accessibility="Public" RunAs="Microsoft.MSMQ.6.3.QueueAccessProfile" Batching="false">
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="Computer" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="QueuePath" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="TimeoutSeconds" type="xsd:integer"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="TimeoutSeconds" Selector="$Config/TimeoutSeconds$" ParameterType="int"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<WriteAction ID="WA" TypeID="Windows!Microsoft.Windows.ScriptWriteAction">
<ScriptName>PurgeQueue.js</ScriptName>
<Arguments>"$Config/Computer$" "$Config/QueuePath$"</Arguments>
<ScriptBody><Script>var SCRIPT_NAME = "PurgeQueue.js";

var MQ_RECEIVE_ACCESS = 1;
var MQ_SEND_ACCESS = 2;
var MQ_PEEK_ACCESS = 32;
var MQ_DENY_NONE = 0;
var MQ_DENY_RECEIVE_SHARE = 1;

var SCRIPT_PURGE_ERROR = -2;

var objArgs = WScript.Arguments;
var strComputer = objArgs(0);
var strQueuePathName = objArgs(1);

var bIsCluster = false;
var objWshShell;

if(IsCluster(strComputer))
{
bIsCluster = true;
var WshShell = new ActiveXObject("WScript.Shell");
objWshShell = WshShell.Environment("Process");
var sName = GetQueueServer(strComputer);
objWshShell("_CLUSTER_NETWORK_NAME_") = sName;
objWshShell("_CLUSTER_NETWORK_HOSTNAME_") = sName;
}

try
{
var objMSMQQueueInfo = new ActiveXObject("MSMQ.MSMQQueueInfo");
objMSMQQueueInfo.PathName = strQueuePathName;
objMSMQQueueInfo.Refresh();
var objQueue = objMSMQQueueInfo.Open(MQ_RECEIVE_ACCESS,MQ_DENY_NONE);
objQueue.Purge();
}
catch (e)
{
PrintError(e);
FailScript(SCRIPT_PURGE_ERROR,"Failed on attempt to purge queue.");
}

if(bIsCluster)
{
objWshShell.Remove("_CLUSTER_NETWORK_NAME_");
objWshShell.Remove("_CLUSTER_NETWORK_HOSTNAME_");
}

WScript.Echo("Successfully purged queue.")

function GetQueueServer(Path)
{
return (Path.split(".",1))
}


function IsCluster(sComputer)
{
var wshNetwork = new ActiveXObject("Wscript.Network");
var st1 = String(wshNetwork.ComputerName);
var st2 = String(GetQueueServer(sComputer));

if (st1.toLowerCase() != st2.toLowerCase())
{
return (true)
}
else
{
return (false)
}
}

function PrintError(error)
{
WScript.Echo("============================ BEGIN SCRIPT ERROR ================================\n");
WScript.Echo("Script Name : " + SCRIPT_NAME);
WScript.Echo("Error Type : " + error);
WScript.Echo("Error Number : " + error.number);
WScript.Echo("Error Code : " + (error.number &amp;0xFFFF));
WScript.Echo("Win32 Facility : " + (error.number&gt;&gt;16 &amp;0x1FFF));
WScript.Echo("Error Source : " + error.Source);
WScript.Echo("Error Description : " + error.description + "\n");
WScript.Echo("============================= END SCRIPT ERROR =================================\n");
}

function FailScript(errorCode, errorDescription)
{
WScript.Echo("============================ BEGIN SCRIPT ERROR ================================\n");
WScript.Echo("Script Name : " + SCRIPT_NAME);
WScript.Echo("Script Exit Code : " + errorCode);
WScript.Echo("Script Error Message : " +errorDescription + "\n");
WScript.Echo("============================= END SCRIPT ERROR =================================");
WScript.Quit(errorCode);
}
</Script></ScriptBody>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
</WriteAction>
</MemberModules>
<Composition>
<Node ID="WA"/>
</Composition>
</Composite>
</ModuleImplementation>
<InputType>System!System.BaseData</InputType>
</WriteActionModuleType>