Get-MsmqQueue 在集群中找不到队列

Get-MsmqQueue does not find queues in cluster

我有一个 2 节点集群,在 Windows Server 2012R2 上安装了 PowerShell 4.0 版。集群中的角色之一是 'Messaging Queuing',名为 'TESTMSMQ',它安装了大约 20 个专用队列。

在新的 PowerShell 控制台中,我使用命令

将环境变量 _CLUSTER_NETWORK_NAME_ 设置为 'TESTMSMQ'
$env:_CLUSTER_NETWORK_NAME_='TESTMSMQ'

当我 运行 Get-MsmqQueue -Name * 时,我什么也得不到。但是如果我 运行 compmgmt.msc 我可以看到列出的所有队列,如果我将 System.Messaging 程序集加载到 PowerShell 会话中,我可以看到队列。

[System.Reflection.Assembly]::LoadWithPartialName("System.Messaging")
[System.Messaging.MessageQueue]::Exists('.\private$\MyTestQueue')

returns 正确

有人知道为什么 MSMQ cmdlet 找不到队列,但 .net 程序集可以并且计算机管理管理单元也能看到队列吗?

明确一点,本地节点或物理节点上没有定义任何队列。 "private$\MyTestQueue" 仅在 MSMQ 安装角色 "TESTMSMQ".

上定义

因此,如果 Exists() 使用本地主机名返回 True,那么我会假设环境是 MSMQ 角色,而不是物理节点。

听起来像是经典的集群 MSMQ 问题。

Clustering MSMQ applications – rule #1

您没有指定运行安装您的应用程序的位置。例如,如果 "Exists('.\private$\MyTestQueue')" returns True 那么这意味着 MSMQ 服务正在 运行 本地测试。因此,如果您 运行 从节点上的命令提示符进行测试,则您是在与节点上的 MSMQ 通信,而不是集群。您需要 运行 从集群命令提示符进行测试,而不是使用集群 MSMQ 服务。

有点晚了,但我在任何地方都找不到这个问题的答案。也许其他人也在看...

终于从几个地方拼凑了一些想法,并在 Windows Server 2016 上运行。

在其中一个集群节点上:

$env:computername = "MsmqHostName"
Get-MsmqQueue | Format-Table -Property QueueName,MessageCount

远离集群:

Invoke-Command -ScriptBlock {$env:computername = "msmqHostName";Get-MsmqQueue | Format-Table -Property QueueName,MessageCount } -ComputerName ClusternNodeName