2010-05-12 27 views
2

Existe-t-il un moyen de rechercher une clé spécifique dans le Registre à l'aide de Windows Scripting Host?Recherche d'une clé dans le Registre - JScript

J'utilise JavaScript (JScript/VBScript?) De le faire, et la bibliothèque msdn ne mentionne pas cette méthode: http://msdn.microsoft.com/en-us/library/2x3w20xf(v=VS.85).aspx

Merci,


Alors, voici un mettre à jour le problème:

Le problème est un peu plus compliqué qu'une recherche de registre directe. Je dois regarder à travers les produits installés sur une boîte de Windows, pour trouver une entrée de produit spécifique que je veux supprimer. Le chemin du registre est défini comme suit:

HKEY_LOCAL_MACHINE \ Software \ Microsoft ... \ Produits.

Dans la clé Produits, les produits installés sont répertoriés, mais leurs clés sont définies comme codes de hachage. Dans les clés de produit se trouvent d'autres clés avec des noms définis et des valeurs définies. Je veux être capable de chercher sur ces dernières clés et valeurs. Comment puis-je faire cela, en ignorant les codes de hachage inconnus?

Par exemple, j'ai besoin de trouver un produit avec DisplayVersion key = 1.0.0. Le chemin d'accès à cette clé est:

HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Installer \ UserData \ Produits \ A949EBE4EED5FD113A0CB40EED7D0258 \ InstallProperties \ DisplayVersion. Comment puis-je récupérer ou éviter d'écrire la clé de produit: A949EBE4EED5FD113A0CB40EED7D0258 ??

+2

Le lien que vous avez posté est pour Windows Scripting Host, pas Javascript. –

+0

est-ce que l'OP ou quelqu'un qui connaît JScript/WSH reformulera/retitle/retag s'il y a lieu? –

+0

@Jason: Correction. J'espère que j'ai bien compris l'intention du PO. –

Répondre

7

En supposant que vous utilisez JScript via le Windows Scripting Host (et pas JavaScript à partir d'un navigateur), vous pouvez obtenir la valeur d'une clé spécifique en utilisant la méthode WScript.RegRead:

// MyScript.js 
var key = 'HKEY_CURRENT_USER\\SessionInformation\\ProgramCount' 
    , wsh = WScript.CreateObject('WScript.Shell') 
    , val = wsh.RegRead(key); 
WScript.Echo('You are currently running ' + val + ' programs.'); 

Si vous avez réellement besoin de rechercher une clé ou une valeur en fonction de certaines conditions plutôt que d'une clé de registre connu, vous pouvez alors mettre en œuvre votre OW n algorithme de recherche récursif où les valeurs de registre de type "REG_SZ" sont des nœuds feuilles. Pour faire un peu plus de familiarité avec JScript sur Windows Scripting Host, j'ai fait un small interface to the registry qui fait exactement cela. L'exemple inclus dans le projet montre comment effectuer une telle recherche de registre dans un script du FSM:

<job id="FindDisplayVersions"> 
    <script language="jscript" src="../registry.js"/> 
    <script language="jscript"> 
    // Search the registry and gather 20 DisplayVersion values. 
    var reg = new Registry() 
     , rootKey = 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Products' 
     , keyRegex = /Products\\(.*?)\\InstallProperties\\DisplayVersion$/ 
     , valRegex = /^1\./ 
     , maxResults = 20 
     , uids = []; 
    reg.find(rootKey, function(path, value) { 
     var keyMatch = keyRegex.exec(path); 
     if (keyMatch) { 
     if (valRegex.exec(value)) { 
      uids.push(keyMatch[1] + '\t=\t' + value); 
      if (uids.length >= maxResults) { return false; } // Stop searching 
     } 
     } 
     return true; // Keep searching. 
    }); 
    WScript.Echo(uids.join("\n")); 
    </script> 
</job> 

Notez que, comme le souligne @ Robert Harvey sur, cela pourrait prendre très longtemps si la clé racine est trop profondément connecté. Les tests simples ne prennent que quelques secondes sur la clé que j'ai choisie, mais votre kilométrage peut varier; bien sûr, pas de garantie ou d'adéquation à un usage, ne me blâmez pas si votre ordinateur explose.

+0

Cela prendra une éternité. –

+0

@Robert - aucun doute! Espérons que le nœud racine n'est pas trop profondément connecté ... – maerics

+0

Merci à tous. Le problème est donc un peu plus compliqué qu'une recherche de registre directe. Je dois regarder à travers les produits installés sur une boîte de Windows, pour trouver une entrée de produit spécifique que je veux supprimer. Le chemin du registre est défini comme suit: HKEY_LOCAL_MACHINE \ Software \ Microsoft \ ... \ Products \. Dans la clé Produits, les produits installés sont répertoriés, mais leurs clés sont définies en tant que codes de hachage. Dans les clés de produit se trouvent d'autres clés avec des noms définis et des valeurs définies. Je veux être capable de chercher sur ces dernières clés et valeurs. Comment puis-je faire cela, en ignorant les codes de hachage inconnus? – rkhj