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

Powershell Get-MsmqQueue在群集中找不到队列,powershell,cluster-computing,msmq,Powershell,Cluster Computing,Msmq,我在Windows Server 2012R2上安装了一个2节点群集,安装了PowerShell的4.0版。集群中的一个角色是“消息传递队列”,名为“TESTMSMQ”,它安装了大约20个专用队列 在一个全新的PowerShell控制台中,我使用以下命令将环境变量_CLUSTER_NETWORK_NAME_uu设置为“TESTMSMQ” $env:_CLUSTER_NETWORK_NAME_='TESTMSMQ' 当我运行Get-MsmqQueue-Name*时,我什么也没有得到。但是,如果我

我在Windows Server 2012R2上安装了一个2节点群集,安装了PowerShell的4.0版。集群中的一个角色是“消息传递队列”,名为“TESTMSMQ”,它安装了大约20个专用队列

在一个全新的PowerShell控制台中,我使用以下命令将环境变量_CLUSTER_NETWORK_NAME_uu设置为“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')
返回True

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

需要明确的是,在本地节点或物理节点上没有定义队列。“private$\MyTestQueue”仅在MSMQ安装角色“TESTMSMQ”上定义


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

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


您没有指定在哪里运行应用程序。例如,如果“Exists('.\private$\MyTestQueue')返回True,则表示MSMQ服务正在本地运行到您的测试。因此,如果您在节点上从命令提示符运行测试,那么您是在节点上与MSMQ对话,而不是在集群上。要使用群集MSMQ服务,您需要从群集命令提示符运行测试。

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


您没有指定在哪里运行应用程序。例如,如果“Exists('.\private$\MyTestQueue')返回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

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

最后从几个地方拼凑出一些想法,并在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

通过设置环境群集\网络\名称,我是否不在群集命令提示符下?**通过设置环境群集\网络\名称,我是否不在群集命令提示符下?**这在2019年对我也非常有效-只需将$env:computername设置为集群名称这在2019年对我也非常有效-只需将$env:computername设置为集群名称