1

Тема: VBScript: Добавление записи в реестр в зависимости от переменной

Дробрый день.
Есть такая проблема, есть скрипт VBS который в зависимости от типа ОС запускает установку определённого файла.
Надо в этот скрипт вставить функцию записи в реестр в зависимости от типа ОС.

Сам скрипт:

Option Explicit

Dim strShare
Dim strComputer
Dim objFSO

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

Dim strCommandLine
Dim lngProcessID

strComputer = "."
strShare   = objFSO.GetParentFolderName(WScript.ScriptFullName)

Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set collSWbemObjectSet = objSWbemServicesEx.InstancesOf("Win32_OperatingSystem")

For Each objSWbemObjectEx In collSWbemObjectSet
    With objSWbemObjectEx
        Select Case .Version
            Case "5.1.2600"             ' Windows XP X86
                strCommandLine = strShare & "\vpn\77\Win_XP\x86\VPN_77.exe"
            Case "5.2.3790"             ' Windows XP X64 (& Windows Server 2003)
                strCommandLine = strShare & "\vpn\77\Win_XP\x86\VPN_77.exe"
            Case "6.1.7600", "6.1.7601" ' Windows 7 (& Windows Server 2008 R2)
                Select Case .OSArchitecture
                    Case "32-bit"       ' X86
                    strCommandLine = strShare & "\vpn\77\Win_XP\x86\VPN_77.exe"
                    Case "64-bit"       ' X64
                    strCommandLine = strShare & "\vpn\77\Win_XP\x86\VPN_77.exe"
                End Select
            Case Else
                ' Nothing to do
        End Select
    End With
Next


If Not IsEmpty(strCommandLine) Then
    If objSWbemServicesEx.Get("Win32_Process").Create("""" & strCommandLine & """", Empty, Nothing, lngProcessID) = 0 Then
    Else
    End If
End If

Set collSWbemObjectSet = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator    = Nothing

WScript.Quit 0

Запись в реестр для XP

REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPSec]
"AssumeUDPEncapsulationContextOnSendRule"=dword:00000002

Запись в реестр для 7

REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent]
"AssumeUDPEncapsulationContextOnSendRule"=dword:00000002

Зарание огромное спасибо, т.к. спасли от рутинной работы.

2

Re: VBScript: Добавление записи в реестр в зависимости от переменной

Бродяга пишет:

Запись в реестр
...

Берете со статьи Рецепты WMI: работа с реестром Windows примеры, тестите отдельно, а потом вставляйте в свои конструкции "case ....".

WBR. Roman

3

Re: VBScript: Добавление записи в реестр в зависимости от переменной

Мда, помощь!!!!

4

Re: VBScript: Добавление записи в реестр в зависимости от переменной

Бродяга пишет:

Мда, помощь!!!!

«Халява, сэр!»

5

Re: VBScript: Добавление записи в реестр в зависимости от переменной

alexii пишет:
Бродяга пишет:

Мда, помощь!!!!

«Халява, сэр!»

Ты в прошлый раз помог, не откажи и сейчас!

6

Re: VBScript: Добавление записи в реестр в зависимости от переменной

А когда же учиться?

7

Re: VBScript: Добавление записи в реестр в зависимости от переменной

Пробую уже второй день! Нечего не выходит!

8

Re: VBScript: Добавление записи в реестр в зависимости от переменной

Рассказывайте, как пробуете, приводите Ваш код. Пишите, что не выходит, какие ошибки появляются. И т.п.

9 (изменено: alexii, 2012-09-20 09:17:45)

Re: VBScript: Добавление записи в реестр в зависимости от переменной

Set Sh = CreateObject("WScript.Shell")
key =  "HKEY_LOCAL_MACHINE\"
Sh.RegWrite key & "SYSTEM\CurrentControlSet\Services\PolicyAgent\", "AssumeUDPEncapsulationContextOnSendRule"
Sh.RegWrite key & "SYSTEM\CurrentControlSet\Services\PolicyAgent\AssumeUDPEncapsulationContextOnSendRule", 00000002, "REG_DWORD"
WScript.Echo Sh.RegRead(key & "SYSTEM\CurrentControlSet\Services\PolicyAgent\")
WScript.Echo Sh.RegRead(key & "SYSTEM\CurrentControlSet\Services\PolicyAgent\AssumeUDPEncapsulationContextOnSendRule")
Sh.RegDelete key & "SYSTEM\CurrentControlSet\Services\PolicyAgent\"

Говорит что неправильная ветка, хотя ветка 100% правильна

10

Re: VBScript: Добавление записи в реестр в зависимости от переменной

Код на форуме оформляется тэгом «code». Я поправил Ваш пост.

Бродяга пишет:

Говорит что неправильная ветка, хотя ветка 100% правильна

Приведите точное сообщение об ошибке (нажмите Ctrl-C в окне сообщения об ошибке).

11

Re: VBScript: Добавление записи в реестр в зависимости от переменной

Разобрался наконец!
В этой ветви реестра "HKEY_LOCAL_MACHINE" нет прав на запись у пользователя.

Теперь новый вопрос, как повысить права у скрипта???

12

Re: VBScript: Добавление записи в реестр в зависимости от переменной

---------------------------
Windows Script Host
---------------------------
Сценарий: R:\Проекты\VPN\v 1.0\77.vbs
Строка: 39
Символ: 4
Ошибка: Неверная ссылка на корень в разделе реестра "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent\AssumeUDPEncapsulationContextOnSendRule".
Код: 80070005
Источник: WshShell.RegWrite

---------------------------
ОК   
---------------------------

13

Re: VBScript: Добавление записи в реестр в зависимости от переменной

Бродяга пишет:

В этой ветви реестра "HKEY_LOCAL_MACHINE" нет прав на запись у пользователя.

И не должно быть.

Бродяга пишет:

Теперь новый вопрос, как повысить права у скрипта???

Это не вопрос повышения прав.

Бродяга, в Вашем коде нет 39 строки.

14

Re: VBScript: Добавление записи в реестр в зависимости от переменной

Правильнее - скрипт запускать от имени админской у/з.
Конечно, можно и предварительно с командной строки (запущенной от имени администратора) переписать права на ветку - консольная утилита subinacl.exe (на микрософте).

WBR. Roman