2012-10-11 6 views
3

J'essaie d'exécuter une commande qui appelle un fichier de commandes sur la boîte Win 2008. (Les commandes s'exécutent correctement lorsque je me connecte à Win 2008 et cliquez sur). Mais lorsque j'appelle ce fichier de commandes via WMI en utilisant les mêmes informations d'identification de l'utilisateur, le traitement par lots ne s'exécute pas.Exécution de processus à distance C# WMI

Mon code pour se connecter est:

ConnectionOptions connOptions = new ConnectionOptions(); 
connOptions.Impersonation = ImpersonationLevel.Impersonate; 
connOptions.EnablePrivileges = true; 
connOptions.Username = UserName; 
connOptions.Password = Password; 

ManagementScope manScope = new ManagementScope(
    String.Format(@"\\{0}\ROOT\CIMV2", ComputerName), connOptions); 
manScope.Connect(); 

ObjectGetOptions objectGetOptions = new ObjectGetOptions(); 
ManagementPath managementPath = new ManagementPath("Win32_Process"); 
ManagementClass processClass = new ManagementClass(
    manScope, managementPath, objectGetOptions); 

ManagementBaseObject inParams = processClass.GetMethodParameters("Create"); 

inParams["CommandLine"] = command; 
ManagementBaseObject outParams = processClass.InvokeMethod("Create", inParams, null); 
Object returnValue = outParams["ReturnValue"]; 

Toute aide est appréciée ...

+0

Quelle est la valeur ReturnValue après l'exécution de ce code? – RRUZ

+0

La valeur de retour est 0 .. Ce qui je suppose est retourné quand il n'y a pas d'erreur. – Jimmy

+0

Ensuite, la commande a été exécutée, mais elle n'est pas visible pour vous. car la méthode create ne peut pas être utilisée pour démarrer un processus interactif à distance. – RRUZ

Répondre

0

Vous devez spécifier les informations d'identification explicites lors de l'instanciation d'une commande sur un ordinateur distant via WMI. WMI améliore la sécurité, mais, ce faisant, réduit la sécurité car les informations d'identification explicites les transmettent en clair, contrairement à un jeton.

0

Si ROOT \ CIMV2 est défini comme l'espace de noms par défaut pour les scripts sur votre serveur, vous devez juste besoin des éléments suivants:

ManagementScope manScope = new ManagementScope(
    String.Format(@"\\{0}", ComputerName), connOptions); 
manScope.Connect(); 
Questions connexes