Is it possible to purge a msmq queue from a bat file?
Essentially I want to make a bat file or at least something quick and easy so that an untrained employee can cl
PowerShell script to purge all private queues on local machine:
[Reflection.Assembly]::LoadWithPartialName("System.Messaging")
$MachineName=(get-wmiobject win32_computersystem).name
[System.Messaging.MessageQueue]::GetPrivateQueuesByMachine("$MachineName") | % { $_.Purge(); }
As explained in https://stackoverflow.com/a/11793579/1235394, easiest way to execute it is:
purge-private-msmq-queues.ps1
in the same folder create script file purge-private-msmq-queues.cmd
with following content:
powershell -executionpolicy Unrestricted .\purge-private-msmq-queues.ps1
Take a look on MSMQAdm Utility
Tasks administered through the utility programs include the following:
Don't forget about powershell, take a look on PowerShell Community Extensions
Update
Open powershell and write line by line
[Reflection.Assembly]::LoadWithPartialName("System.Messaging")
$queueName = '.\Private$\testQueue'
$queue = new-object -TypeName System.Messaging.MessageQueue -ArgumentList $queueName
$queue.Purge()
Call powershell from cmd
The easiest way call script from cmd.
powershell.exe -executionpolicy Unrestricted C:\purgemsmq.ps1
THis Code Works:
[Reflection.Assembly]::LoadWithPartialName("System.Messaging") | Out-Null
$Name=(get-wmiobject win32_computersystem).name
$QName=(
"FormatName:Direct=OS:$name\System$;DEADXACT",
"FormatName:Direct=OS:$name\System$;DEADLETTER"
)
foreach ($Q in $Qname){
$MessageQueue = New-Object System.Messaging.MessageQueue($Q)
$MSGCount=$($MessageQueue.GetMessageEnumerator2()).count
IF($MSGCount){
$MessageQueue.Purge()
Write-Host "$Q has been purged of $MSGCount messages." -ForegroundColor green
}
Else{
Write-Host "$Q is clean"}
}