Ibm mq 通过SYSTEM.ADMIN.Command.EVENT运行MQSC命令

Ibm mq 通过SYSTEM.ADMIN.Command.EVENT运行MQSC命令,ibm-mq,Ibm Mq,我已通过Windows上的MQ资源管理器远程连接到QMgr。MQ服务器版本为7.5.0.1。我可以从MQ Explorer成功地将消息放入SYSTEM.ADMIN.COMMAND.EVENT,当我转储SYSTEM.ADMIN.COMMAND.EVENT时,我可以看到我的消息。据我所知,我应该能够通过这个通道运行PCF命令和MQSC命令。所以,我将DISPLAY QMGR ALL消息放在这个队列中,我可以在MQ服务器上成功地看到这个消息。我的问题是如何通过这个频道远程运行此消息?谢谢 IBM文档

我已通过Windows上的MQ资源管理器远程连接到QMgr。MQ服务器版本为7.5.0.1。我可以从MQ Explorer成功地将消息放入
SYSTEM.ADMIN.COMMAND.EVENT
,当我转储
SYSTEM.ADMIN.COMMAND.EVENT
时,我可以看到我的消息。据我所知,我应该能够通过这个通道运行PCF命令和MQSC命令。所以,我将
DISPLAY QMGR ALL
消息放在这个队列中,我可以在MQ服务器上成功地看到这个消息。我的问题是如何通过这个频道远程运行此消息?谢谢


IBM文档表明我应该能够在
SYSTEM.MQSC.REPLY.QUEUE
中接收命令结果。但我无法从客户端MQ资源管理器浏览此队列。此队列的队列类型为
Model

命令服务器不处理文本消息,它处理PCF消息。您需要构建PCF格式的消息,并且可以对其进行处理。看


理想情况下,您可以使用真正的PCF格式,但有一种PCF格式,您可以在其中发送MQSC命令(“转义”PCF-请参见此处)

这里有两个问题

首先,您使用了错误的队列。命令服务器监听
SYSTEM.ADMIN.command.QUEUE
。向其发送消息的队列,
SYSTEM.ADMIN.COMMAND.EVENT
是QMgr在执行命令后将事件消息放入的队列,当然前提是命令事件已启用

正如Jason提到的,第二个问题是,
runmqsc
处理器接受人类可读的脚本,并将其转换为QMgr可以理解的命令。将文本命令直接传递到命令服务器将不起作用

通常,我们通过直接将命令传递给runmqsc来执行您想要的操作,例如

echo DISPLAY QMGR ALL | runmqsc MYQMGRNAME
如果您需要作为客户机执行此操作,那么您需要下载或前往MQ Gem并获取的副本。它们中的任何一个都将在本地队列管理器上接受上述命令,并且还可以为它们提供MQ通道参数并连接到远程QMgr

除了此基本功能外,MQSCX产品还具有自己的内部脚本解析和执行。例如,假设您希望根据QMgr的命令级别执行某些操作

使用
runmqsc
可以发出上面的命令,通过
grep
awk
或类似方式过滤结果的2列输出,然后将最终输出捕获到变量中。您可能需要多次执行此操作以捕获多个值,每次调用新的
runmqsc
,并解析脚本中的输出。然后,必须为启动所有这些操作时要运行的实际命令生成字符串,并将其传递给另一次调用
runmqsc

或者,MQSCX允许您发出
DISPLAY
命令,然后直接按名称引用结果值。例如,您可以向MQSCX传递几行脚本,告诉它查询QMgr,然后根据命令版本执行有条件的操作,而无需返回shell、bat或Perl脚本


完全披露,我不为MQ Gem工作或从MQ Gem获得佣金。我只是不喜欢在写100行代码的时候,用2行就可以了。如果执行任意数量的MQSC脚本,MQSCX上的ROI以分钟为单位。作为对这个问题的回答,它正好100%符合主题。

谢谢JasonE,我阅读了文档,问题是IBM文档中没有关于这方面的示例,请您在escape命令中给我举个例子好吗?哇!你在MQ方面的知识令人难以置信。再次感谢T.Rob。我已经成功地通过MO72远程运行MQSC命令。然而,我有一个问题,是否可以通过MQ远程运行OS命令?提前感谢您是的,如果ID是管理员。遗憾的是,无法禁用此功能,因此任何可以升级到管理员权限的人都可以使用MQ服务帐户在基础主机上执行命令。基本上,您要么定义要触发的进程,要么定义服务对象。其中任何一个都将在操作系统中执行命令。它们不是设计用来这样做的,因此您必须为每个命令定义一个新的进程或服务,然后在不再需要时将其删除。好的,为了运行操作系统命令,我远程运行此命令:define service('myservice')STARTCMD('ping 127.0.0.1'),并成功创建了它。现在我想启动那个服务,所以我运行了这个命令:start service('myservice'),但是我得到了AMQ8734-命令失败-程序无法启动。我的ID是管理员。你知道吗?事情是这样的。。。如果未来的人想知道同样的事情,他们怎么知道在这个问题的评论中寻找?你现在处在一个需要提出新问题的领域。好消息是,作为一个新问题,您可以包含格式化代码,以便显示您定义的对象描述。