2009-11-04 7 views

Odpowiedz

35

znalazłem rozwiązanie: to 9. bajt tego klucza:

[HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Connections] "DefaultConnectionSettings" = hex: 3c, 00,00, 00,1f, 00,00,00, , 00,00,00,00,00,00, 00,00,00,00,00,00,00,00,00,01,00,00, 00,1f, 00,00,0068,74,74,70,3a, 2f, 2f, 31, 344,3, 24e, 31,33,31,2e, 322,32,32,0e, 31, 36,37,2f, 77,70,61,64,2e, 64,61,74,90,0e, 1e, 66, d3,88, c5,01,01,00,00,00,8d, a8, 4e, 9e, 00,00,00,00,00,00,00,00

Jest to bitfield:

  • 0x1: (Zawsze 1)
  • 0x2: Proxy włączony
  • 0x4: "Użyj skryptu automatycznej konfiguracji" sprawdzone
  • 0x8: "Automatycznie wykryj ustawienia" sprawdzone

Mask 0x8, aby włączyć wyłączyć, tj. odjąć 8, jeśli jest wyższa niż 8.

Podziękowania dla Jamie na google groups.

Aktualizacja

oparciu o VBScript przez WhoIsRich połączeniu ze szczegółami w tej odpowiedzi, oto skrypt PowerShell do zmiany tych & związanych ustawienia:

function Set-ProxySettings { 
    [CmdletBinding()] 
    param (#could improve with parameter sets 
     [Parameter(Mandatory = $false)] 
     [bool]$AutomaticDetect = $true 
     , 
     [Parameter(Mandatory = $false)] 
     [bool]$UseProxyForLAN = $false 
     , 
     [Parameter(Mandatory = $false)] 
     [AllowNull()][AllowEmptyString()] 
     [string]$ProxyAddress = $null 
     , 
     [Parameter(Mandatory = $false)] 
     [int]$ProxyPort = 8080 #closest we have to a default port for proxies 
     , 
     [AllowNull()][AllowEmptyString()] 
     [bool]$UseAutomaticConfigurationScript = $false 
    ) 
    begin { 
     [string]$ProxyRegRoot = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' 
     [string]$DefaultConnectionSettingsPath = (Join-Path $ProxyRegRoot 'Connections') 
     [byte]$MaskProxyEnabled = 2 
     [byte]$MaskUseAutomaticConfigurationScript = 4 
     [byte]$MaskAutomaticDetect = 8 
     [int]$ProxyConnectionSettingIndex = 8 
    } 
    process { 
    #this setting is affected by multiple options, so fetch once here 
    [byte[]]$DefaultConnectionSettings = Get-ItemProperty -Path $DefaultConnectionSettingsPath -Name 'DefaultConnectionSettings' | Select-Object -ExpandProperty 'DefaultConnectionSettings' 

    #region auto detect 
    if($AutomaticDetect) { 
     Set-ItemProperty -Path $ProxyRegRoot -Name AutoDetect -Value 1 
     $DefaultConnectionSettings[$ProxyConnectionSettingIndex] = $DefaultConnectionSettings[$ProxyConnectionSettingIndex] -bor $MaskAutomaticDetect 
    } else { 
     Set-ItemProperty -Path $ProxyRegRoot -Name AutoDetect -Value 0 
     $DefaultConnectionSettings[$ProxyConnectionSettingIndex] = $DefaultConnectionSettings[$ProxyConnectionSettingIndex] -band (-bnot $MaskAutomaticDetect) 
    } 
    #endregion 

    #region defined proxy 
    if($UseProxyForLAN) { 
     if(-not ([string]::IsNullOrWhiteSpace($ProxyAddress))) { 
      Set-ItemProperty -Path $ProxyRegRoot -Name ProxyServer -Value ("{0}:{1}" -f $ProxyAddress,$ProxyPort) 
     } 
     Set-ItemProperty -Path $ProxyRegRoot -Name ProxyEnable -Value 1 
     $DefaultConnectionSettings[$ProxyConnectionSettingIndex] = $DefaultConnectionSettings[$ProxyConnectionSettingIndex] -bor $MaskProxyEnabled 
    } else { 
     Set-ItemProperty -Path $ProxyRegRoot -Name ProxyEnable -Value 0   
     $DefaultConnectionSettings[$ProxyConnectionSettingIndex] = $DefaultConnectionSettings[$ProxyConnectionSettingIndex] -band (-bnot $MaskProxyEnabled) 
    } 
    #endregion 

    #region config script 
    if($UseAutomaticConfigurationScript){ 
     $DefaultConnectionSettings[$ProxyConnectionSettingIndex] = $DefaultConnectionSettings[$ProxyConnectionSettingIndex] -bor $MaskUseAutomaticConfigurationScript 
    }else{ 
     $DefaultConnectionSettings[$ProxyConnectionSettingIndex] = $DefaultConnectionSettings[$ProxyConnectionSettingIndex] -bor $MaskUseAutomaticConfigurationScript 
    } 
    #endregion 

    #persist the updates made above 
    Set-ItemProperty -Path $DefaultConnectionSettingsPath -Name 'DefaultConnectionSettings' -Value $DefaultConnectionSettings 
    } 
} 
+0

Naprawdę przydatne. rozwiązał mój problem. – Sean

+1

rozwiązałem także moje! –

+5

To byłby dziewiąty ** bajt **, a nie bit. –

0

zawsze można po prostu wyeksportować rejestr, zmień ustawienie, a następnie wyeksportuj rejestr ponownie i wykonaj różnicę.

+1

Tak, rzeczywiście, Ale najlepiej byłoby znaleźć rzeczywiste specyfikacje dotyczące tego klucza – leo

+1

Ogólnie nie ma specyfikacji dla IE Kluczowymi kluczami rejestru są głównie wewnętrzne informacje o implementacji, z których nie można polegać, aby były takie same od wydania do wydania .. –

0

Potwierdzam, że to działa. I eksportowany plik reg po tym, jak dokonał korekt, a następnie umieścić go w skrypcie logowania jak poniżej:

REM ------ IE Auto Detect Settings FIX ------------------ 
REG IMPORT \\mydomain.local\netlogon\IE-Autofix.reg 2>NUL 
-1

Rzeczywiście, 9 bajt wskazuje stan wyboru przycisku, ale odpowiedzi powyżej nie podejmują pod uwagę pole wyboru umożliwiające ręczną konfigurację. Ta wartość stanu sprawdzania jest również obecna w tym dziewiątym bajcie. Prawdziwa odpowiedź powinna być tak:

wartość Byte

00001001 = proxy Instrukcja jest sprawdzana

00000101 = Użyj skryptu automatycznej konfiguracji jest zaznaczone

00000011 = Automatycznie wykrywa ustawienia jest zaznaczone

Po zaznaczeniu wielu pól wyboru wartość 9 bajt jest wynikiem bitowej operacji OR na wartościach, dla których pole wyboru jest zaznaczone.

+1

jak do cholery tego znasz? pokaż nam dokumentację źródłową? \ –

+0

To jest rzeczywiście źle, jest odwrotnie (00000011 = Ręczny serwer proxy, itp.) Zobacz akceptowaną odpowiedź, aby dowiedzieć się więcej szczegółów Mówi, że jest to bitfield z 0x2 = Manual proxy, to jest to samo, co powiedzenie, że dodajesz 00000011 do swojego OR dla instrukcji proxy (zwracając uwagę, że najmniej znaczący bit jest zawsze 1 dla tego pola) – Kidburla

1

Jeśli jest to po prostu wyłączenie polityki grupowej wymuszanej co 30 minut, można odznaczyć pole, a następnie zmienić uprawnienia tylko do odczytu.

0
Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Internet Explorer\Control Panel] 
"Connection Settings"=dword:00000000 
"Connwiz Admin Lock"=dword:00000000 
"Autoconfig"=dword:00000000 
"Proxy"=dword:00000000 
"ConnectionsTab"=dword:00000000 
5

Dla każdego, kto chce odznacz „Automatycznie wykryj ustawienia” bez zastępowania innych ustawień zawartych we wpisie rejestru, można użyć VBScript przy logowaniu.

On Error Resume Next 

Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") 
sKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections" 
sValueName = "DefaultConnectionSettings" 

' Get registry value where each byte is a different setting. 
oReg.GetBinaryValue &H80000001, sKeyPath, sValueName, bValue 

' Check byte to see if detect is currently on. 
If (bValue(8) And 8) = 8 Then 

    ' Turn off detect and write back settings value. 
    bValue(8) = bValue(8) And Not 8 
    oReg.SetBinaryValue &H80000001, sKeyPath, sValueName, bValue 

End If 

Set oReg = Nothing 
+0

, aby było jasne, czy ten plik automatycznie odznacza ustawienie? i czy możesz mi powiedzieć w części skryptu do zmiany, aby to sprawdzić? – FluorescentGreen5

+0

Tak, odznacza to ustawienie. Jeśli chcesz to sprawdzić, ustaw IE z automatycznym wykrywaniem, uruchom skrypt i ponownie otwórz IE, a zobaczysz go odznaczony. Możesz użyć RegEdit, aby spojrzeć na zmianę wartości, po prostu bądź świadomy jego zmiany binarnej, a nie łatwej do odczytania wartości true/false on/off. – WhoIsRich

+0

NB: Aby przełączyć z powrotem, wykonaj 'bValue (8) = bValue (8) lub 8'. To implementuje logikę znalezioną w odpowiedzi @ leo: http://stackoverflow.com/a/1674377/361842. W nawiasie 8 jest dziewiąty bajt w tablicy bajtów. Pozostałe 8 to maska ​​"Automatycznie wykryj ustawienia". – JohnLBevan

7

Innym sposobem na kontrolowanie tego ustawienia jest za pomocą klucza AutoDetect nieudokumentowanych rejestru = 0 wymienionego w this blog post:

klucza rejestru: HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\

DWORD AutoDetect = 0 lub 1

Plik .reg, aby go wyłączyć, będzie wyglądał następująco:

Windows Registry Editor Version 5.00 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings] 
"AutoDetect"=dword:00000000 
+1

Dzięki za to. Klucz zostanie automatycznie usunięty przez system Windows, gdy ustawienie zostanie zastosowane, ale pozwala skonfigurować to ustawienie sam z GPO (zamiast nadpisywać cały blok połączenia domyślnego). – Phylogenesis

+0

Jak @Phylogenesis powiedział, że ten klucz rejestru zniknie na tobie, ale nowa wartość wydaje się trzymać. Miałem dziwne interakcje, gdy menu Opcje internetowe było otwarte w tym samym czasie lub VPN były w trakcie (dis) łączenia, ale to powinno działać we wszystkich zwykłych przypadkach użycia i jest znacznie łatwiejsze do zrozumienia niż odwracanie bitów. – Lilienthal

0

Użyłem połączoną odpowiedź i wykonany skrypt powershell, który załatwia sprawę dla ciebie

$name = $PSScriptRoot + "\" + $MyInvocation.MyCommand.Name 

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$name`"" -Verb RunAs; exit } 

$registryPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" 

$Name = "AutoDetect" 

$value = "0" 

New-ItemProperty -Path $registryPath -Name $name -Value $value ` -PropertyType DWORD -Force | Out-Null 

Read-Host -Prompt "press Enter to Continue" 

Skrypt zostanie uruchomiony jako admin i zmień wartość na 0 (Wyłącz Auto-Detect).

0

Myślę, że możesz zmienić ustawienia "Automatycznie wykryj" za pomocą nazwy klucza rejestru "AutoConfigURL". tutaj jest kod, który sprawdzam wC#. Życzę szczęścia.

RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true); 
        if(registry.GetValue("AutoConfigURL") != null) 
        { 
         //Proxy Server disabled (Untick Proxy Server) 
         registry.DeleteValue("AutoConfigURL"); 
        } 
1

Zdaję sobie sprawę, że to pytanie jest nieco stary, ale uważam, że moja mała zmiana może pomóc innych programistów.

Nie chciałem zmodyfikować WhoIsRich „s answer bo to naprawdę świetny, ale dostosowany je spełnić moje potrzeby:

  1. Jeśli Automatycznie wykryj ustawienia jest sprawdzone następnie odznacz to.
  2. Jeśli Automatycznie wykryj ustawienia jest niezaznaczone następnie check go.

    On Error Resume Next 
    
    Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") 
    sKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections" 
    sValueName = "DefaultConnectionSettings" 
    
    ' Get registry value where each byte is a different setting. 
    oReg.GetBinaryValue &H80000001, sKeyPath, sValueName, bValue 
    
    ' Check byte to see if detect is currently on. 
    If (bValue(8) And 8) = 8 Then 
        ' To change the value to Off. 
        bValue(8) = bValue(8) And Not 8 
    ' Check byte to see if detect is currently off. 
    ElseIf (bValue(8) And 8) = 0 Then 
        ' To change the value to On. 
        bValue(8) = bValue(8) Or 8 
    End If 
    
    'Write back settings value 
    oReg.SetBinaryValue &H80000001, sKeyPath, sValueName, bValue 
    
    Set oReg = Nothing 
    

Wreszcie, trzeba tylko save go w vbs pliku (VBScript) i uruchom go.

vbscript

+1

Nie działa w systemie Windows 10. Jakieś sugestie? @federico –

Powiązane problemy