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.
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. –
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
Puis postez votre solution comme une réponse ci-dessous et marquez-le comme le accepté. – Helen