2015-09-25 1 views
2

C'est sur Windows Server 2008 R2 Enterprise (64 bits)MSMQ déclenché - powershell feux, mais ne fait rien pour le message transmis

Je veux exécuter un script Powershell lorsqu'un message arrive dans une file d'attente particulière. Cela fonctionne comme prévu si je me connecte au serveur et utilise un utilitaire pour déplacer/copier un message dans la file d'attente.

La règle n'a pas de conditions et est une règle "coup d'oeil".

Le message est en fait destiné à être envoyé depuis un autre serveur. Lorsque cela arrive le message arrive et, en regardant le gestionnaire de tâches, je peux voir powershell.exe s'exécute, mais le script powershell ne semble pas exécuter.

J'ai essayé de simplifier cela en demandant à un script de test d'écrire dans un fichier du même répertoire que le script. Encore une fois, cela fonctionne si je déplace manuellement un message dans la file d'attente mais les résultats sont les mêmes si un message arrive d'un autre serveur; le script ne semble pas s'exécuter. Le déclencheur se déclenche définitivement, je peux voir powershell.exe avec la ligne de commande attendue dans le gestionnaire de tâches de Windows il ne fait rien si le message arrive après avoir été envoyé par un autre serveur.

Pour les paramètres, je n'ai que le chemin complet du script en tant que paramètre de chaîne pour mes tests. J'ai vérifié que le service réseau avait des autorisations sur les files d'attente et le répertoire de script.

Il n'y a aucune erreur dans les journaux des événements.

J'ai essayé les éléments suivants qui ne produisent des résultats différents:

  1. Passage à l'powershell.exe 32 bits.
  2. Ajoutez une condition qui est toujours vraie.
  3. Basculez du service réseau vers un compte de domaine pour les services de mise en file d'attente des messages et de mise en file d'attente des messages et ajoutez les autorisations du compte aux files d'attente et aux répertoires.

Alors quelqu'un d'autre peut-il penser à quelque chose à essayer?

Est-il possible d'ajouter un changement de programme aux paramètres d'une règle? Il place tous les paramètres de chaîne entre guillemets et la sélection exe n'autorise pas les commutateurs.

Est-il possible de capturer la sortie stderr lors de l'exécution d'un trigger? Il échoue probablement d'une manière ou d'une autre mais je n'arrive pas à trouver un moyen de le voir.

Mon contenu "script de test":

$fileName = "C:\Users\Public\Documents\Scribe\Test\MoveMessage.err"; 
("tested ok") | Out-File $fileName; 

Merci!

Edit:

je suis passé à l'aide d'écriture et eventlog qui archive les messages correctement.

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

Faire cela, je découvre que tout script avec l'MessageId en tant que paramètre ne fonctionnera pas si le message a été envoyé à partir d'un autre ordinateur.Cela se produit même si le messageId n'est même pas utilisé dans le script.

Ceci pourrait avoir à voir avec le messageId ressemblant à "73493861-3988-4109-8356-206a1d7792da \ 25" mais je ne sais pas pourquoi cela ne fonctionnerait pas selon la source du message. Le messageId se divise en 2 arguments avec le \ xx étant dans l'argument supplémentaire.

Répondre

0

Apparemment, le problème principal est que le messageId ne peut pas être utilisé comme paramètre de règle de déclenchement dans certaines situations. J'ai utilisé le lookupId à la place et tout fonctionne comme prévu.