Получение VBS-скрипта для изменения реестра

Я пробовал множество различных решений для создания скрипта, который одним щелчком мыши может изменить некоторые настройки реестра в Skype. Я пытался выполнить прямой сценарий, даже используя задержку и отправку ввода, но, похоже, ничего не работает.

Самое близкое, что я получил, это следующее:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Skype\Phone]
"ProxySetting"=-
"ProxyAddress"=-
"DisableUDP"=-

Однако это все еще приводит к появлению окна подтверждения от "RegistryEditor". Я попытался получить скрипт для отправки ввода, и я попытался создать отдельный сценарий VBS для запуска этого файла и дважды отправить ввод для обработки окна подтверждения, но без "гладкого" успеха.

Каким было бы правильное решение?

1 ответ

Решение

С помощью regedit /s возможно, но немного неловко, так как вам нужно создать файл с настройками, а затем импортировать этот файл. И даже если мы проигнорировали это, у решения все еще была проблема, которая regedit не возвращает код состояния, указывающий, был ли импорт успешным или нет. Последний может быть решен путем замены regedit.exe с reg.exe:

rc = objShell.Run("reg import \\host\share\registry.reg", 0, True)

Однако нет необходимости импортировать внешний файл. VBScript может напрямую создавать, манипулировать и удалять ключи и значения реестра, либо через WshShell объект:

Set sh = CreateObject("WScript.Shell")

sh.RegDelete "HKLM\SOFTWARE\Policies\Skype\Phone\ProxySetting"
sh.RegDelete "HKLM\SOFTWARE\Policies\Skype\Phone\ProxyAddress"
sh.RegDelete "HKLM\SOFTWARE\Policies\Skype\Phone\DisableUDP"

или через WMI:

Const HKLM = &h80000001
Const key  = "SOFTWARE\Policies\Skype\Phone"

Set reg = GetObject("winmgmts://./root/default:StdRegProv")

rc1 = reg.DeleteValue(HKLM, key, "ProxySetting")
rc2 = reg.DeleteValue(HKLM, key, "ProxyAddress")
rc3 = reg.DeleteValue(HKLM, key, "DisableUDP")
Другие вопросы по тегам