草庐IT

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

coder 2024-06-14 原文

这是在 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/

有关windows - MSMQ 触发的 powershell - 触发但对转发的消息不执行任何操作的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

  3. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  4. ruby - Chef 执行非顺序配方 - 2

    我遵循了教程http://gettingstartedwithchef.com/,第1章。我的运行list是"run_list":["recipe[apt]","recipe[phpap]"]我的phpapRecipe默认Recipeinclude_recipe"apache2"include_recipe"build-essential"include_recipe"openssl"include_recipe"mysql::client"include_recipe"mysql::server"include_recipe"php"include_recipe"php::modul

  5. ruby-on-rails - link_to 不显示任何 rails - 2

    我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article

  6. ruby - 为什么 Ruby 的 each 迭代器先执行? - 2

    我在用Ruby执行简单任务时遇到了一件奇怪的事情。我只想用每个方法迭代字母表,但迭代在执行中先进行:alfawit=("a".."z")puts"That'sanalphabet:\n\n#{alfawit.each{|litera|putslitera}}"这段代码的结果是:(缩写)abc⋮xyzThat'sanalphabet:a..z知道为什么它会这样工作或者我做错了什么吗?提前致谢。 最佳答案 因为您的each调用被插入到在固定字符串之前执行的字符串文字中。此外,each返回一个Enumerable,实际上您甚至打印它。试试

  7. ruby-on-rails - RSpec:避免使用允许接收的任何实例 - 2

    我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_

  8. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  9. ruby - 检查是否通过 require 执行或导入了 Ruby 程序 - 2

    如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby​​文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否

  10. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

随机推荐