2011-01-18 3 views
0

J'essaie d'exécuter un script sur un ordinateur distant du même domaine, avec le même compte utilisateur connecté aux deux machines. Notez que le script est également stocké sur une autre machine.C# - WMI InvalidOperationException lors de la tentative d'exécution d'un script sur une machine distante

code

string prop = propertyName 
object[] cmd = { String.Format("cscript \\\\machine\\script.wsf", envId, application) }; 
ManagementClass mc = new ManagementClass("\\\\" + prop + "\\root\\cimv2\\Win32_Process"); 

mc.InvokeMethod("Create", cmd); 

Exception

[InvalidOperationException: Operation is not valid due to the current state of the object.] 
    System.Management.ManagementObject.InvokeMethod(String methodName, Object[] args) +388806 

Conclusion

Je suis nouveau à l'aide de WMI, donc je ne sais pas si ce que je suis faire mal est évident, mais en regardant autour de ce type d'exception est nous Dans de nombreuses situations, j'ai de la difficulté à trouver quel est le véritable problème.

+0

Cela fonctionne-t-il lors de l'exécution locale? Sinon, vous avez de la chance. Beaucoup de choses dans WMI ne sont tout simplement pas implémentées ... Remoting ou WCF pourrait être une meilleure option. – leppie

+0

Vous voulez dire que le script fonctionne quand il est exécuté localement ou fonctionne-t-il lorsque je définis la machine cible comme étant moi-même? Je suppose que ce que je veux dire, est-ce que vous me demandez si le code WMI fonctionne ou si le script fonctionne? – damienc88

+0

Je n'utilise jamais la syntaxe "ultra-cool-short", car vous n'aurez probablement pas le bon niveau de contrôle sur les propriétés du processus. Je sais, ce processus à distance fonctionnera [bien que mon expérience ne provienne que de w2k3]. Comme "lepie" déjà mentionné, il ne fonctionnera généralement pas, si vous essayez d'excuter les ressources réseau [emplacement de votre script à excuter], car cela nécessiterait une autre étape d'authentification à votre "\\\\ machine \\ ..." . Le minimum requis pour cette étape serait d'utiliser kerberos auth! Je n'ai jamais fait ça. Quelle est votre authentification et votre paysage réseau? – mabra

Répondre

0

Il s'avère que le service Windows hébergeant le processus n'était pas exécuté sous un compte autorisé à s'exécuter sur la machine cible.

Mon erreur!

3

Votre "\ root \ cimv2 \ Win32_Process" devrait être "\ root \ cimv2: Win32_Process"

Notez le côlon, ce que je l'utilise. Bonne chance!

1

J'ai eu le même problème.

result.InvokeMethod("GetOwner", ownerArgs)

Le problème était que je tentais d'exécuter que sur un objet que je récupérai avec la requête WMI suivante.

SELECT ProcessId, ExecutablePath, CommandLine FROM Win32_Process

Changement à SELECT * FROM Win32_Process le fixe.

J'aurais probablement probablement aussi demandé un nom d'utilisateur et un domaine.

Questions connexes