PowerShell y MSMQ

PowerShell Llevo un tiempo con ganas de meterle un poco de mano a PowerShell y por fin he encontrado la ocasión. Siempre he sido un gran amante de los scripts y siempre he sentido un poco de envidia de los poderosos interpretes de comandos del mundo Unix, pero se acabo. Habitualmente uso vbs para mis scripts, es bastante potente y muy simple de programar y además puedo acceder a cualquier objeto COM (lo que es tanto como decir que se puede hacer cualquier cosa).

El otro día, harto ya de purgar a mano las colas MSMQ de la aplicación en la que estoy trabajando, decidí hacer un script para automatizar esta tarea. El problema es que vbs no tiene manera de controlar colas MSMQ y aunque se supone que existe un API COM de administración MSMQ, no fui capaz de dar con la documentación de la misma.

Así que ya tenía la escusa perfecta para hacer mis primieros pinitos con PowerShell , ya conozco el API de MSMQ de .Net y por tanto hacer el script de PowerShell es coser y cantar.

Y tengo que decir que… estoy enamorado de PowerShell!!! Es impresionante el tener todo el API de .Net al alcance de un lenguaje de scripting contodas las facilidades de un lenguaje de scripting tipo shell (pipes, manejo de ficheros simple, orientación a la línea de comandos etc…).

A continuación os dejo el código del script en cuestión, que aunque es muy simple, da una idea de como manejar colas MSMQ desde PowerShell, lo único que hago es enumerar todas las colas públicas y luego purgar aquellas pertenecen a mi aplicación:

# Script que permite purgar todas las colas privadas de Captor
# Cargamos el assembly que nos permite trabajar con colas
[Reflection.Assembly]::LoadWithPartialName(«System.Messaging») | out-null

# Obtenemos las colas privadas
$queues = [System.Messaging.MessageQueue]::GetPrivateQueuesByMachine(«.»)

foreach ($queue in $queues)
{

    # Si la cola es de Captor la purgamos
    if ($queue.QueueName.Contains(«captor»))
    {
        $queueName = $queue.MachineName + «» + $queue.QueueName
        $q = new-object System.Messaging.MessageQueue($queueName)
        Write-Host «Purgando la cola» $queueName «que contenía» $q.GetAllMessages().Count «mensajes» -foregroundcolor Yellow
        $q = new-object System.Messaging.MessageQueue($queueName)
        $q.Purge()
    }

}

Write-Host «Se purgaron las colas MSMQ de Captor» -foregroundcolor Green

El resultado de la ejecución del script es el que sigue:

Purge MSMQ Queues Power Shell

Prometo que habrá más entradas sobre PowerShell en este blog…

8 comentarios sobre “PowerShell y MSMQ”

  1. «C:Doc and settingsRodrigoC» ?? q paso con Vista ?? jejeje (asumo que sera un xp llamado pc086)

    en serio, yo vengo siguiendo algunos posts en los blogs de MSDN y me han dejado asombrado con las capacidades de PowerShell. A ver con que nos deslumbras por aqui 😀

    Saludos

  2. Jejjejeje…. sip… XP, la verdad es que funciona muy bien a pesar de lo años. Yo prefiero Vista, pero sobre esa máquina en concreto no tengo poder de decisión… 🙁

  3. ¡Que sorpresa que tengamos también en común lo de los scripts!

    A mí me encantan y en sí, se le puede sacar muchísimo provecho.

    Es el típico patito feo que luego en diferentes situaciones y proyectos se convierten en un precioso cisne. 🙂

    Espero que haya más entradas de este tipo, ¡sí!

  4. Es que a windows ya le iba haciendo falta un lenguaje de script decente, los sistemas Unix y Linux llevan en eso algo de ventaja 😛

    Tengo que felicitarte por todos tus artículos, si existe una Biblia de la programación, tu blog debería de ser uno de los Evangelios.

    Un saludo desde León 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *