gpt4 book ai didi

windows - MSMQ 触发的 powershell - 触发但对转发的消息不执行任何操作

转载 作者:可可西里 更新时间:2023-11-01 10:44:25 26 4
gpt4 key购买 nike

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

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

该规则没有条件,是一个“窥视”规则。

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

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

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

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

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

事件日志中没有错误。

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

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

那么还有其他人能想出什么来尝试吗?

有没有办法在规则的参数中添加程序开关?它将所有字符串参数放在引号中,并且 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 个参数。

最佳答案

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

关于windows - MSMQ 触发的 powershell - 触发但对转发的消息不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32783876/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com