Ich versuche, bestimmte Nachrichten aus einer MSMQ-Nachrichtenwarteschlange mithilfe von PowerShell zu löschen. Ich bin mir bewusst, dass mehrere neue Cmdlets für die Verwaltung von MSMQ-Warteschlangen & Nachrichten in PowerShell 4+ eingeführt wurden, aber von dem, was ich sagen kann, helfen mir diese immer noch nicht mein Ziel des Löschens bestimmter Nachrichten zu erreichen.So verwenden Sie PowerShell, um bestimmte Nachrichten aus einer MSMQ-Nachrichtenwarteschlange zu löschen
Was ich versuche, ist ein einfaches Skript, das eine Verbindung zu einer bestimmten Warteschlange herstellt, dann jede Nachricht in dieser Warteschlange durchläuft, nach einer angegebenen Suchzeichenfolge im Nachrichtentext sucht und dann alle übereinstimmenden Nachrichten zu einer anderen Warteschlange auf demselben Server. Ich habe dies sehr gut funktioniert Nachrichten für die Suche, und jede passende Kopie kann mit der Send-Methode verwenden:
$source = new-object System.Messaging.MessageQueue($sourcequeuename)
$destination = new-object System.Messaging.MessageQueue($destinationqueuename)
$msgs = $source.GetAllMessages()
foreach ($msg in $msgs)
{
#Extra logic here - check message body for search string etc...
$destination.Send($msg)
}
Aber - einmal kopiert, meine einzige Option, um die ursprüngliche Nachricht von der Quelle Warteschlange zu löschen scheint das Spülen zu werden gesamte Quellwarteschlange, die auch alle anderen Nachrichten löschen wird, was ich nicht tun möchte!
$source.Purge()
Ich dachte, ich wäre auf etwas mit dem neuen (Powershell 4+) 'Move-MSMQMessage' Cmdlets ...
Move-MsmqMessage -DestinationQueue $d -InputObject $q -Message $msg
Aber ich bin zu kämpfen, dies zu an der Arbeit - ich m unklar, ob ich es bestimmte Nachrichtenobjekte übergeben kann. Kann mir jemand ein praktisches Beispiel für die Verwendung von PowerShell (einer beliebigen Version) geben, um Nachrichten in einer Warteschlange durchzulaufen und bestimmte Nachrichten mit diesem Cmdlet Move-MsmqMessage zu verschieben?
Sie keine Nachrichten außerhalb der Warteschlange verschieben können. Sie können nur eine neue Nachricht erstellen, die den Inhalt des Originals verwendet, um sie an eine andere Warteschlange zu senden und dann das Original zu löschen. Mag pedantisch klingen, aber MSMQ hat das Konzept, dass die Zielwarteschlange die letzte Ruhestätte für eine Nachricht ist. Es gibt einen zugrunde liegenden Mechanismus von Acks und Timeouts, um die Zustellung an eine Warteschlange zu bestätigen. Wenn Sie eine Nachricht verschieben könnten, müsste dieser Mechanismus diese Aktivität (über mehrere Computer hinweg!) Verfolgen und den ursprünglichen Absender jedes Mal informieren. –
Move-MsmqMessage wirkt sich nur auf Nachrichten in derselben Warteschlange aus, wenn Unterwarteschlangen verwendet werden. Eine Warteschlange kann in viele Unterwarteschlangen unterteilt werden, aber alle Nachrichten befinden sich noch immer in derselben Warteschlange. –
Danke John, das macht die Dinge viel klarer für mich – verticallyg