PDA

Показать полную графическую версию : [решено] Проверка наличия ветки реестра


botkin1
11-02-2017, 18:43
Добрый День!
Только начинаю осваивать 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
Необходимо найти ветку в реестре »
Какую? Зачем? Версия установленного Microsoft Office определяется совсем не так. К тому же, скажем, при установленном Office 2003 и пакете совместимости (типичное дело) наличествует как раздел 11.0
так и 12.0.

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

Iska
11-02-2017, 20:05
но есть одно препятствие на ПЭВМ WMI - может быть не рабочий »
Простите, это как — «не рабочий»?

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

Iska
12-02-2017, 11:34
И все таки хотелось понять почему не работает проверка условий? »
Проверка условий работает. Ровно так, как и заказывали.

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


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




© OSzone.net 2001-2012