2010-03-15 21 views
1

Donc, je requête WMI une machine distante pour obtenir les membres de son groupe Administrators:Constructor ManagementObject (chemin de chaîne) ne parvient pas à analyser des chaînes obtenues à partir de l'interrogation classe Win32_GroupUser (C#)

SELECT PartComponent FROM Win32_GroupUser WHERE GroupComponent = "Win32_Group.Domain='MACHINE_NAME',Name='Administrators'" 

Il retourne la propriété PartComponent comme des chaînes. Voici la liste (les noms ont changé pour la sécurité). Les utilisateurs du domaine joeblow et janedoe sont en effet des administrateurs locaux de cette machine.

\\MACHINE_NAME\root\cimv2:Win32_UserAccount.Domain="MACHINE_NAME",Name="localadmin" 
\\MACHINE_NAME\root\cimv2:Win32_Group.Domain="OUR_DOMAIN",Name="Domain Admins" 
\\MACHINE_NAME\root\cimv2:Win32_UserAccount.Domain="OUR_DOMAIN",Name="joeblow" 
\\MACHINE_NAME\root\cimv2:Win32_UserAccount.Domain="OUR_DOMAIN",Name="janedoe" 

Je traverse les résultats ci-dessus dans une boucle. En son sein, je fais ce qui suit:

ManagementObject isInThisUser = new ManagementObject(memberString); 

Je fais ce que je peux extraire le domaine et les propriétés de nom de chaque objet membre. Dans un monde parfait, j'obtenir la liste folowing de chaînes que le résultat final:

\\MACHINE_NAME\localadmin 
\\OUR_DOMAIN\Domain Admins 
\\OUR_DOMAIN\joeblow 
\\OUR_DOMAIN\janedoe 

Mais voici ce qui se passe: les objets créés ManagementObject en utilisant ce constructeur viennent vide! Domaine, nom, légende, tout, tous null! Sauf pour le premier (l'administrateur local). Pour celui-là, le constructeur fonctionne comme annoncé.

Pourquoi cela se produit-il? Est-ce parce que l'utilisateur qui fait la requête n'est pas un administrateur de domaine? (Il est un administrateur local sur la machine cible, bien qu'en fait, il est OUR_DOMAIN\janedoe..)

Répondre

0

Eh bien, cela fonctionne pour moi: après avoir sélectionné PartComponent de Win32_GroupUser de associator je

string path = obj.Properties["PartComponent"].Value.ToString(); 
ManagementObject mo=new ManagementObject(path); 

et mo contient toutes les propriétés remplies. Comment remplissez-vous la variable memberString?