2016-03-22 16 views
1

Ich bin ein absoluter Neuling, wenn es um PowerShell geht, aber habe untersucht, die beste Möglichkeit zum Testen einer Nachrichtenwarteschlange, die ich eingerichtet habe (MSMQ). Bisher konnte ich die folgenden in Powershell laufen alle meine Warteschlangen zu erhalten, um zu sehen, was vorhanden ist:MSMQ Nachricht senden

gwmi -class Win32_PerfRawData_MSMQ_MSMQQueue -computerName . | 
ft -prop Name, MessagesInQueue 

Dies gibt eine Liste von MSMQ-Warteschlangen ich zur Verfügung haben. Ich möchte jetzt eine Nachricht nur an eine der zurückgegebenen Warteschlangen senden, die zum Testen der Verbindung benannt sind. Meine Warteschlange heißt:

<server>\private$\<queuename> 

habe ich versucht, mit dem folgenden, aber habe kein Glück gehabt:

$myqueue = '.\Private$\portalemailqueue' 
$MyQueue.Send("<<Message>>", "test1") 

Method invocation failed because [System.String] does not contain a method named 'Send'. 
At line:3 char:1 
+ $MyQueue.Send("<<Message>>", "test1") 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
+ FullyQualifiedErrorId : MethodNotFound 

Ich kann nicht für das Leben von mir herauszufinden, wie dies zu tun. Hat jemand irgendwelche guten Ressourcen oder Code, um dies zu tun?

Antwort

3

Wie der Fehler sagt, Ihr $MyQueue Objekt ist nur eine Zeichenfolge, nichts besonderes daran.

können Sie das .NET verwenden System.Messaging Namespace mit Message Queue-Instanzen zu arbeiten:

Add-Type -AssemblyName System.Messaging 
$MyQueuePath = '.\Private$\portalemailqueue' 
$MyQueue = if([System.Messaging.MessageQueue]::Exists($MyQueuePath)) { 
    # Open existing queue 
    New-Object System.Messaging.MessageQueue $MyQueuePath 
} else { 
    # Or create it 
    [System.Messaging.MessageQueue]::Create($MyQueuePath) 
} 
# Now you can call $MyQueue.Send()