Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Проверка наличия ветки реестра (http://forum.oszone.net/showthread.php?t=323753)

botkin1 11-02-2017 18:43 2710952

Проверка наличия ветки реестра
 
Добрый День!
Только начинаю осваивать vbs язык, задачка вроде простая, но никак не получается.
Необходимо найти ветку в реестре и если она есть, то внести изменения. Прошу помощи, за ранее спасибо
Код:

Dim WshShell, objWMIService, verSoft, mkey2003, mkey2007, mkey2010

On Error Resume Next
Set WshShell = WScript.CreateObject("WScript.Shell")
mkey2003 = "HKCU\Software\Microsoft\Office\11.0\"
mkey2007 = "HKCU\Software\Microsoft\Office\12.0\"
mkey2010 = "HKCU\Software\Microsoft\Office\14.0\"

If mkey2003 = True Then
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\11.0\Outlook\"
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\11.0\Outlook\Preferences\"
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\11.0\Outlook\Preferences\DoAging", "1", "REG_DWORD"
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\11.0\Outlook\Preferences\EveryDays", "35", "REG_DWORD"
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\11.0\Outlook\Preferences\ArchivePeriod", "24", "REG_DWORD"
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\11.0\Outlook\Preferences\ArchiveDelete", "0", "REG_DWORD"
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\11.0\Outlook\Preferences\DeleteExpired", "0", "REG_DWORD"
       
        ElseIf  mkey2007 = True Then     
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\12.0\Outlook\"
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\12.0\Outlook\Preferences\"
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\12.0\Outlook\Preferences\DoAging", "1", "REG_DWORD"
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\12.0\Outlook\Preferences\EveryDays", "35", "REG_DWORD"
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\12.0\Outlook\Preferences\ArchivePeriod", "24", "REG_DWORD"
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\12.0\Outlook\Preferences\ArchiveDelete", "0", "REG_DWORD"
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\12.0\Outlook\Preferences\DeleteExpired", "0", "REG_DWORD"
 
 ElseIf mkey2010 = True Then

        WshShell.RegWrite "HKCU\Software\Microsoft\Office\14.0\Outlook\"
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\14.0\Outlook\Preferences\"
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\14.0\Outlook\Preferences\DoAging", "1", "REG_DWORD"
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\14.0\Outlook\Preferences\EveryDays", "35", "REG_DWORD"
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\14.0\Outlook\Preferences\ArchivePeriod", "24", "REG_DWORD"
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\14.0\Outlook\Preferences\ArchiveDelete", "0", "REG_DWORD"
        WshShell.RegWrite "HKCU\Software\Microsoft\Office\14.0\Outlook\Preferences\DeleteExpired", "0", "REG_DWORD"

        End If


Iska 11-02-2017 19:12 2710954

Цитата:

Цитата botkin1
Необходимо найти ветку в реестре »

Какую? Зачем? Версия установленного Microsoft Office определяется совсем не так. К тому же, скажем, при установленном Office 2003 и пакете совместимости (типичное дело) наличествует как раздел 11.0
так и 12.0.

botkin1 11-02-2017 19:24 2710956

Вообще есть нормальный скрипт через WMI, который определяет версию Microsoft Office и нормально работает, но есть одно препятствие на ПЭВМ WMI - может быть не рабочий и следовательно изменения в реестр не запишет.
Поэтому пошли самым простым на наш взгляд способом ищем в реестра, вероятность наличия 2003 очень мала.
И очень хочется понять, что не правильно

Iska 11-02-2017 20:05 2710968

Цитата:

Цитата botkin1
но есть одно препятствие на ПЭВМ WMI - может быть не рабочий »

Простите, это как — «не рабочий»?

botkin1 12-02-2017 07:57 2711049

"Не рабочий" - это значит служба работает, а при выполнении запроса выходит ошибка, либо ответ просто не получаешь.
И все таки хотелось понять почему не работает проверка условий?
У меня предположение, что в таком виде и не будет работать так как проверяется не одно значение на несколько условий.

Iska 12-02-2017 11:34 2711088

Цитата:

Цитата botkin1
И все таки хотелось понять почему не работает проверка условий? »

Проверка условий работает. Ровно так, как и заказывали.

Цитата:

Цитата botkin1
"Не рабочий" - это значит служба работает, а при выполнении запроса выходит ошибка, либо ответ просто не получаешь. »

Какая именно ошибка? Какого именно запроса? Что значит «ответ просто не получаешь»?! С этим надо разбираться, а не отмахиваться.


Я предполагаю, что Вы хотели нечто такое:
Код:

mkey2003 = WshShell.RegRead("HKCU\Software\Microsoft\Office\11.0\")
mkey2007 = WshShell.RegRead("HKCU\Software\Microsoft\Office\12.0\")
mkey2010 = WshShell.RegRead("HKCU\Software\Microsoft\Office\14.0\")

и:
Код:

If Not VarType(mkey2003) = vbEmpty Then
        …
ElseIf Not VarType(mkey2007) = vbEmpty Then
        …
ElseIf Not VarType(mkey2010) = vbEmpty  Then
        …
End If

вместо того, что у Вас. Но, как я писал выше, данный алгоритм далеко не всегда отработает корректно. По целому ряду причин.

botkin1 12-02-2017 12:40 2711103

Цитата:

С этим надо разбираться, а не отмахиваться
Я не отмахиваюсь и проблему решаем по мере возникновения, но когда парк машин более 2500 и сделать нужно быстро, разбираться с каждой просто нет времени.
Поставленная задача, как говорится "овчинка выделки не стоит", но руководство хочет.
Вы все верно поняли, перепробовал все варианты, но опыта нет вот и застрял.
Спасибо, Вам снова выручили


Время: 22:37.

Время: 22:37.
© OSzone.net 2001-