MSMQ запустил PowerShell - запускает, но ничего не делает для перенаправленного сообщения
Это на Windows Server 2008 R2 Enterprise (64 бит)
Я хочу выполнить скрипт powershell, когда сообщение приходит в определенную очередь. Это работает, как и ожидалось, если я захожу на сервер и использую утилиту для перемещения / копирования сообщения в очередь.
Правило не имеет условий и является правилом "взглянуть".
Сообщение фактически предназначено для отправки с другого сервера. Когда это происходит, приходит сообщение и, глядя на диспетчер задач, я вижу, что powershell.exe запускается, но сценарий powershell, похоже, не выполняется.
Я попытался упростить это, просто записав тестовый скрипт в файл в том же каталоге, что и скрипт. Опять же, это работает, если я вручную перемещаю сообщение в очередь, но результаты остаются такими же, если сообщение приходит с другого сервера; сценарий, кажется, не выполняется.
Триггер определенно срабатывает, я вижу powershell.exe с ожидаемой командной строкой в диспетчере задач Windows, он просто ничего не делает, если сообщение приходит после отправки с другого сервера.
Для параметров у меня есть полный путь к скрипту в качестве строкового параметра для моего тестирования.
Я убедился, что у сетевой службы есть разрешения на очереди и каталог скриптов.
В журналах событий ошибок нет.
Я пробовал следующее, которое не дало разных результатов:
- Переход на 32-х разрядный powershell.exe.
- Добавьте условие, которое всегда верно.
- Переключитесь с сетевой службы на учетную запись домена для службы очередей сообщений и очереди сообщений и добавьте разрешения учетной записи в очереди и каталоги.
Так может кто-нибудь еще придумать что попробовать?
Есть ли способ добавить программный переключатель к параметрам правила? Он помещает все строковые параметры в кавычки, а выбор 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 даже не используется в скрипте.
Возможно, это связано с идентификатором сообщения "73493861-3988-4109-8356-206a1d7792da\25", но я не уверен, почему это не сработает в зависимости от источника сообщения. MessageId разделяется на 2 аргумента, хотя \xx находится в дополнительном аргументе.
1 ответ
Очевидно, основная проблема заключается в том, что messageId не может использоваться в качестве параметра правила триггера в некоторых ситуациях. Я использовал lookupId вместо этого, и все работает, как ожидалось.