2012-06-28 41 views
1

我想把腳本放在一起來監視服務器上的MSMQ。我發現this,它的作品像一個魅力,但我也需要得到的到來時間。監視MSMQ到達時間

當使用Get-Member cmdlet時,我得到一個屬性列表,但沒有一個看起來讓我知道我需要什麼。

有誰知道如何獲得到達時間?

/G

+0

由於我還不知道消息本身是如何處理的,這只是一個黑暗的鏡頭。只是在抵達時編寫代碼中的日誌條目纔可能是一種可行的解決方案? –

+0

我不認爲這是必要的,因爲如果你檢查隊列,你可以看到到達的時間,所以它存儲在某個地方。問題在哪裏。 – Gisli

回答

2

終於明白了。

[String]$cName = $Env:COMPUTERNAME 
[Reflection.Assembly]::LoadWithPartialName("System.Messaging") | out-null 
[System.Messaging.MessageQueue[]]$queues = [System.Messaging.MessageQueue]::GetPrivateQueuesByMachine($cName.ToLower()) 
Foreach ($queue in $queues) { 
    $queue.MessageReadPropertyFilter.SetAll() 
    try { 
     [System.Messaging.Message]$message = $queue.Peek(10) 
     Write-Host $queue.QueueName $message.ArrivedTime 
    } 
    catch { 
     #Write-Host "Timeout" 
    } 
} 

訣竅是設置MessageReadPropertyFilter。可以單獨設置每個屬性,但現在可以這樣做。

2
$qname = "<YourQueueNameHere>" 

[Reflection.Assembly]::LoadWithPartialName("System.Messaging") | out-null 

$q = new-object System.Messaging.MessageQueue($qname) 

$msgs = $q.GetAllMessages() 

foreach ($msg in $msgs) 
{ 
    Write-Host $msg.ArrivedTime 
} 

的文檔MessagehereMessage.ArrivedTimehere的文檔。