1

我正在尝试编写一个脚本来监视服务器上的 MSMQ。我发现了这个,它就像一个魅力,但我还需要知道到达的时间。

使用 Get-Member cmdlet 时,我会得到一个属性列表,但似乎没有一个能满足我的需要。

有谁知道如何获得到达时间?

/G

4

3 回答 3

3

终于想通了。

[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。可以单独设置每个属性,但现在就可以了。

于 2012-07-05T11:26:54.923 回答
1
$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
}

Message 此处的文档。Message.ArrivedTime 此处的文档。

于 2012-06-28T13:13:48.457 回答
1

这对我有用。就我而言,脚本会计算过去一小时内收到了多少条消息。

$QueueArray = "MyQueue1.ERRORS", "MyQueue2.ERRORS";

foreach ($queue in $QueueArray)
{
    # Create each MSMQ object
    [System.Reflection.Assembly]::LoadWithPartialName("System.Messaging") | Out-Null
    $MessageQueue = New-Object System.Messaging.MessageQueue (".\private$\" + $queue)
    
    # Get the amount of the messages in the queue for the past hour.

    $MessageQueue.MessageReadPropertyFilter.SetAll()
    $PastHour = (Get-Date).AddHours(-1)
    $countFailedMessages = 0
    foreach ($message in $MessageQueue )
    {
        if ($PastHour -lt $message.ArrivedTime)
        {
            #Write-Host $message.ArrivedTime
            $countFailedMessages++
            #Write-Host $countFailedMessages
        }
    }
    Write-Host $queue `t $countFailedMessages "failed messages for the past hour"
}
于 2020-09-11T16:43:55.787 回答