none
Проверка ключа в реестре с помощью VBS

    Общие обсуждения

  • Вобщем, суть проблемы такова: надо сделать скриптик на VBS, который бы проверял реестр винды на наличие определенного ключа и, если он не существует, создавал бы его(возможно даже вместе с новой веткой реестра) с определенным значением. Как создать ключ я знаю, а вот как осуществить проверку - нет =(. Може кто-нибудь знает или покажет пример такого скрипта ?
    14 марта 2008 г. 12:08

Все ответы

  • REG QUERY не подойдет? Он может возвращать значение 0 или 1, которое потом можно обрабатывать.

    14 марта 2008 г. 12:31
    Модератор
  • How to use the Windows Script Host to read, write, and delete registry keys

     

    Проверку осуществить можно так:

     

    On error resume next
    set oshell=createobject("WScript.shell")
    value=oshell.regread ("HKCU\environment\test")
    if err.number<>0 then wscript.echo "Нет нужного ключа" else wscript.echo "Есть нужный ключ"
    wscript.echo value


     

    Вместо HKCU\environment\test поставить нужный ключ.

    Для добавления ключа можно использовать regwrite. Только у vbs есть некоторые ограничения: значения типа reg_bin, reg_milti_sz, reg_expand_sz не создает (или создает, только я не знаю как ). Так что для создания или перезаписи существующих значений лучше использовать импорт заготовленного reg-файлика:

     

    oshell.Run "regedit.exe /s путь_к_reg-файлу",,true

    17 апреля 2008 г. 0:50

  • Code Snippet

    Option Explicit
    Dim i,Shell,KeyValue,Keys(1,4)
    set Shell = WScript.CreateObject("WScript.Shell")
    Keys(0,0)="ИмяКлюча"
    Keys(0,1)="ВеткаРеестра"
    Keys(0,2)="Значение"
    Keys(0,3)="Тип"

    On Error Resume Next
    For i=0 To UBOUND(Keys)-1
      Shell.RegRead(Keys(i,1)&Keys(i,0))
        if Err.Source="WshShell.RegRead" then
       Shell.RegWrite Keys(i,1)&Keys(i,0),Keys(i,2),Keys(i,3)
       KeyValue=Keys(i,2)
       else
       KeyValue= Shell.RegRead(Keys(i,1)&"\"&Keys(i,0))
    end if
       Err.Clear
     If KeyValue<>Keys(i,2) then
       Shell.RegDelete(Keys(i,1)&"\"&Keys(i,0))
       Shell.RegWrite Keys(i,1)&Keys(i,0),Keys(i,2),Keys(i,3)
     End If
    Next


    Проверяет на наличие в реестра заданного клчюча и если он отсутствует или значения не совпадают - пишет новое
    17 апреля 2008 г. 6:02
  • Извлечение значение из параметра Windows, который находится в разделеHKLM\SOFTWARE\Microsoft\

    WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows")

    Извлечение значение из параметра по умолчанию, который находится в разделеHKLM\SOFTWARE\Microsoft\Windows\

    WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows\")


    Также нужно учитывать, что если раздела не существует, как и его параметра по умолчанию, то будет выброшено исключение, которое нужно корректно обработать.

    Суммировав все вышесказанное, мы получим достаточно простую функцию, листинг которой представлен далее.

    Листинг 1. Функция проверки существования раздела.

    Function KeyExists(KeyName)
        On Error Resume Next
        Set WshShell = CreateObject("WScript.Shell")
        WshShell.RegRead(KeyName & "\")
    
        If Err.Number <> 0 Then
            KeyExists = False
        Else
            KeyExists = True
        End If
    End Function


    А чтобы картина была полной, ниже показана функция, с помощью которой проверяется существование параметра в реестре.

    Листинг 2. Функция проверки существования параметра.

    Function ValueExists(ValueName)
        On Error Resume Next
        Set WshShell = CreateObject("WScript.Shell")
        WshShell.RegRead(ValueName)
    
        If Err.Number <> 0 Then
            ValueExists = False
        Else
            ValueExists = True
        End If
    End Function
    26 июля 2016 г. 6:27
  • Hidhieroglyph, некромантите понемногу? пост 8 лет как сдох.
    26 июля 2016 г. 7:49
  • Очень даже хорошо, что люди пишут, хотя бы спустя длительное время. Вот я нашёл эту страничку через поиск и что-то для себя почерпнул)
    10 августа 2017 г. 12:30