MSMQ触发火灾,但对转发的消息不做任何处理



这是在Windows Server 2008 R2 Enterprise(64位)上

我想在消息到达特定队列时执行powershell脚本。如果我登录到服务器并使用实用程序将消息移动/复制到队列中,它就会像预期的那样工作。

该规则没有任何条件,是一个"peek"规则。

消息实际上是从另一个服务器发送的。当这种情况发生时,消息到达,通过查看任务管理器,我可以看到powershell.exe运行,但powershell脚本似乎没有执行。

我试着简化这一点,只是有一个测试脚本写入文件在同一目录下的脚本。同样,如果我手动将消息移动到队列中,则此操作有效,但如果消息来自另一个服务器,则结果是相同的;脚本似乎无法执行。

触发器肯定会触发,我可以在windows任务管理器中看到powershell.exe与预期的命令行,如果消息从另一个服务器发送后到达,它只是不做任何事情。

对于参数,我只是将脚本的完整路径作为我测试的字符串参数。

我确保网络服务对队列和脚本目录有权限。

事件日志中没有错误。

我尝试了以下方法,但没有产生不同的结果:

  1. 切换到32位的powershell.exe.
  2. 添加一个总是为真的条件。
  3. 从网络服务切换到消息队列和消息队列触发服务的域帐户,并将该帐户的权限添加到队列和目录中。

那么,还有谁能想到什么可以尝试的吗?

是否有办法将程序开关添加到规则的参数中?它将所有字符串参数放在引号中,并且exe选择不允许切换。

是否有任何方法可以捕获触发器执行时的错误输出?它可能在某种程度上失败了,但我找不到一种方法来看待它。

我的"测试脚本"内容:

$fileName = "C:UsersPublicDocumentsScribeTestMoveMessage.err";
("tested ok") | Out-File $fileName;

谢谢!

编辑:

我切换到使用write-eventlog,这正确地记录消息。

write-eventlog -logname "Windows PowerShell" -source "PowerShell" -eventID 1 -message "TestScript.ps1 Script Started."

这样做,我发现如果消息是从另一台计算机提交的,任何以MessageId作为参数的脚本都不会运行。即使脚本中没有使用messageId,也会发生这种情况。

这可能与messageId看起来像"73493861-3988-4109-8356-206a1d7792da25"有关,但我不确定为什么这取决于消息的来源而不起作用。messageId确实被分成两个参数,xx在附加参数中。

显然,主要问题是messageId在某些情况下不能用作触发器规则参数。我使用lookupId代替,一切都如预期的那样工作。

相关内容

  • 没有找到相关文章

最新更新