Официальная возможность получить лицензионный софт бесплатно.
Giveaway of the Day
Это не реклама!

Щелкните для получения прогноза по Биробиджану


среда, 3 декабря 2014 г.

MS IE: Автоматическое определение параметров и GPO

Для старых версий Internet Explorer в оснастке групповых политик существовал раздел IE Maintenance. Но в более новых версиях контроллеров и для IE версий 10+ этого раздела нет, а сохранившиеся настройки не работают или работают частично.
Особую головную боль вызывает галочка "Автоматическое определение параметров", которая никак через политики не настраивается:




Довольно долго пришлось копаться, пока не выяснилось, что за нее отвечают параметры:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections

DefaultConnectionSettings
SavedLegacySettings

Однако, эти параметры представляют собой значения типа reg_binary, то есть, некие числовые данные, причем очень длинные.


Первым (и довольно популярным, как ни странно) решением, которое мне попалось, было "скопируйте значения этих ключей с машины, где сделаны нужные настройки, и политикой добавляйте их в реестр на целевых машинах". Почти элегантно, если не считать того, что эти байтовые массивы действительно длинные и явно отвечают не только за одну эту галку.
Такая постановка вопроса смутила не меня одного и нашелся человек, который расковырял это дело и обнаружил, что управляет этой галкой один бит в одном байте этого массива. (дальше речь про DefaultConnectionSettings, а SavedLegacySettings не трогаем).
Этот человек сочинил скрипт, которым я и воспользовался.
Отвечает за галку бит со значением 0x8 в байте с номером 0x8 (нумерация с нуля!):


Для изменения этого бита воспользуемся старыми добрыми логическими функциями: И и ИЛИ.
Чтобы установить этот бит: байт(8) OR 8 (810=000010002)
Чтобы сбросить этот бит: байт(8) AND 247 (24710=111101112)
Осталось выдернуть этот байт из этого ключа, изменить его в зависимости от того, что нам нужно, и записать обратно. Этим занимается слегка модифицированная версия исходного скрипта на .vbs. Проверено, в GPO она отрабатывает нормально, хотя иногда требуется сделать gpupdate /force и перелогиниться под текущим пользователем больше одного раза.






Я сохранил большинство авторских комментариев и добавил пару своих.

RESET_IE_AUTOCONFIG.VBS
--
Option Explicit
On Error Resume Next
'Create a constant for the HKEY_CURRENT_USER object
Const HKCU = &H80000001
'Define variables
Dim strComputer
Dim strRegistryKey
Dim objRegistry
Dim strRegistryValue
DIm binValue
strComputer = "."
strRegistryKey = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections"
strRegistryValue = "DefaultConnectionSettings"
'Connect to the Registry
Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
'Retrieve the current settings.
objRegistry.GetBinaryValue HKCU, strRegistryKey, strRegistryValue, binValue

'**********
'Change the 'Automatically detect settings' box to unticked
'**********
'bit value=8 (not related to byte #8!!!)
rem 255 xor 8 = 247
rem set: binValue(8) or 8
rem reset: binValue(8) and 247

binValue(8) = binValue(8) and 247
'Save the changes
objRegistry.SetBinaryValue HKCU, strRegistryKey, strRegistryValue, binValue
--

Разумеется, этот скрипт можно сделать более компактным и оптимальным, но смысл? Он действительно работает и довольно прост для адаптации под индивидуальные нужды. Три ключевых момента я выделил цветом: получаем значение, изменяем его в зависимости от, записываем значение обратно.

Настройка гарантированно работает как для IE8/xp, так и для IE11/win7/srv2008r2

2 комментария:

  1. Статья классная, по крайней мере надеялся найти тут решение такой же проблемы, но скрипт не работает у меня почему-то((

    ОтветитьУдалить
    Ответы
    1. В чем именно выражается неработа скрипта? Бит не меняется или что?

      Удалить

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