MSMQ触发powershell - 触发但对转发的消息没有任何作用

时间:2015-09-25 13:57:58

标签: windows powershell msmq queueing messageid

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

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

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

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

我尝试通过将测试脚本写入与脚本位于同一目录中的文件来尝试简化此操作。同样,如果我手动将消息移动到队列中,但如果消息从另一个服务器到达,则结果相同;脚本似乎没有执行。

触发器肯定会触发,我可以在Windows任务管理器中看到powershell.exe和预期的命令行,如果消息在从另一台服务器发送后到达,它就什么都不做。

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

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

事件日志中没有错误。

我尝试过以下不会产生不同结果的内容:

  1. 切换到32位powershell.exe。
  2. 添加一个始终为真的条件。
  3. 从网络服务切换到域帐户,以便消息排队和消息队列触发服务,并将帐户的权限添加到队列和目录中。
  4. 其他人可以考虑尝试一下吗?

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

    有没有办法在执行触发器时捕获stderr输出?它可能以某种方式失败但我无法找到方法来看待它。

    我的测试脚本"内容:

    $fileName = "C:\Users\Public\Documents\Scribe\Test\MoveMessage.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-206a1d7792da \ 25"但我不确定为什么这根据消息来源不起作用。尽管\ xx在附加参数中,但messageId确实被分成2个参数。

1 个答案:

答案 0 :(得分:0)

显然主要问题是在某些情况下messageId不能用作触发规则参数。我使用了lookupId,一切都按预期工作。