2011-07-18 5 views
0

je le JavaScript suivant pour exécuter une requête WMI sur un hôte Windows distant:SWbemServices.ExecQuery - « Paramètre non valide » lors de l'ajout d'une clause WHERE

var wmiLocator = WScript.CreateObject("WbemScripting.Swbemlocator"); 
var wmiService = wmiLocator.ConnectServer(host, "root\\cimv2", user, pass); 

var items = wmiService.ExecQuery(query); 

for(var e = new Enumerator(items); ! e.atEnd(); e.moveNext()) 
{ 
    WScript.StdOut.Write(e.item().GetObjectText_()); 
} 

user et pass sont les informations de connexion pour la host à distance , query est la requête WQL à effectuer.

Tout cela fonctionne très bien jusqu'à ce que j'ajoute une clause WHERE à la requête WQL. Par exemple,

SELECT * FROM Win32_LogicalDisk 

donne le résultat attendu, mais

SELECT * FROM Win32_LogicalDisk WHERE DriveType=3 

se traduira par une erreur "Paramètre non valide" (wbemErrInvalidParameter/de 0x80041008).

J'ai trouvé de nombreux exemples dans lesquels les clauses WHERE sont utilisées, et je ne trouve aucune information à ce sujet n'étant pas supporté. Est-ce que j'ai râté quelque chose? Dans le cas où cela est pertinent, l'hôte exécutant ce script est un Windows XP Professionnel avec Service Pack 2.

+1

Comment la chaîne de requête est-elle construite? Vous pourriez essayer quelques choses comme l'écho de sa valeur pour voir si elle contient une chaîne de requête valide. Vous pouvez également essayer d'exécuter la requête avec wbemtest.exe. –

+0

Oh mon dieu, c'est embarrassant ... la chaîne de requête a été réellement perturbée à cause d'une analyse que je fais plus tôt avec des signes «égaux» impliqués. Merci beaucoup! Je crois que cela peut être fermé. – pdinklag

+0

Puis postez votre solution comme une réponse ci-dessous et marquez-le comme le accepté. – Helen

Répondre

0

Comme l'a laissé entendre Helen, je réponds moi-même.

La chaîne de requête a été modifiée par une analyse que j'ai faite précédemment dans mon script et est devenue syntaxiquement invalide, d'où l'erreur de paramètre invalide.