none
Windows 2008R2 - IPv6 per Script deaktivieren RRS feed

  • Frage

  • Hallo zusammen,

    ich habe eine Frage zu o.g. Thema. Habe schon das Internet und ähnliches durchforstet auf der Suche nach einer Lösung, bin aber auf nichts brauchbares gestoßen.

    Zunächst einmal zur Ausgangssituation: Wir haben ein Scriptgesteuertes Deployment für Windows Server 2003 und 2008R2, sowohl als virtuelle Maschine über VMware Templates, als auch in Hardware über Microsoft MDT/WDS. Im Rahmen dieser scriptgesteuerten Installation wird auch die Netzwerkkarte bzw. deren Eigenschaften bearbeitet, also anpassen der IPv4-Konfiguration, DNS, WINS. Außerdem soll auf allen verwendeten Netzwerkverbindungen, auf denen ein Netzwerkstack läuft, IPv6 deaktiviert werden. Dies ist strategische Vorgabe und kann nicht beenflusst werden.

    Ich suche nun nach einer Möglichkeit, den Haken bei "IPv6" in den Einstellungen der Netzwerkverbindungen automatisiert zu entfernen. Folgende Vorgehensweisen haben bis jetzt nicht zum Erfolg geführt:

     - Konfiguration per netsh: Es lassen sich zwar Parameter für IPv6 einstellen, den Haken selber bekommen man allerdings nicht entfernt. Ein Vergleich zweier "netsh interface ipv6 dump" jeweils vor und nach dem entfernen des Hakens brachte auch kein Ergebnis. "netsh interface ipv6 delete interface interface="<Name der LAN-Verbindung>"" führt zum Abbruch mit "Catastrophic Failure"

     - Abschalten mit netio: Ein Filter mit netio zu setzen ist zwar eine Möglichkeit, die Symptome zu bekämpfen, liefert aber keine Lsung für das ursächliche Problem.

     - Abschalten von IPv6 per RegKey: Bringt zwar das gewünschte Resultat, dass kein IPv6 mehr in "ipconfig /all" auftaucht, allerdings gibt es Probleme mit dem Teredo Tunneling Interface.

    Primäres Ziel ist es, diesen Haken aus den Einstellungen der jeweiligen Netzwerkverbindung rauszukriegen. Ich bin langsam mit meinem Latein am Ende und für jeden Hinweis dankbar. Vielleicht hat ja der ein oder andere hier schon mal ein ähnliches Problem gehabt und teilt mir seine Lösung auf diesem Wege mit.

    Vielen Dank im voraus dafür.

    Mit besten Grüßen

    Martin Chauchet

    Donnerstag, 17. Februar 2011 14:46

Antworten

  • Hallo Martin

    probiere die RegWerte unter TCPIP6\Linkage entsprechend anzupassen:

    http://eniackb.blogspot.com/2009/07/how-to-disable-ipv6-in-windows-2008.html

    Gruß
    Andrei

    Freitag, 18. Februar 2011 09:00
    Moderator
  • So, habe jetzt nach langer Zeit endlich mal Zeit gefunden, den Thread endgültig zu beantworten.


    Wir haben das jetzt auf Basis von Andrei's Link (Danke an der Stelle nochmals) als VBS-Script gelöst.
    Wer Interesse hat:

    strComputer ="."
    
    Set objWMIService 	= GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
    Set objRegistry		= GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
    Set WshShell 		= Wscript.CreateObject("Wscript.Shell")
    
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterCOnfiguration WHERE IPEnabled=True")
    
    
    
    For Each objItem In colItems
    	WScript.Echo "Description: " & objItem.Description
    	WScript.Echo "SettingID: " & objItem.SettingID & vbCrLf
    	strSettingID = objItem.SettingID
    	
    	ModifyRegKey strKeyPath, "Bind", strSettingID
    	ModifyRegKey strKeyPath, "Export", strSettingID
    	ModifyRegKey strKeyPath, "Route", strSettingID
    	
    	objRegistry.EnumKey HKEY_LOCAL_MACHINE, strKeyPath2, arrSubKeys
    	For Each subKey in arrSubKeys
    		objRegistry.GetStringValue HKEY_LOCAL_MACHINE, strKeyPath2 & "\" & subKey, "NetCfgInstanceId", strValue
    		If strValue = strSettingID Then
    			ModifyRegKey strKeyPath2 & "\" & subKey & "\Linkage\", "UpperBind", "TCPIP6"
    			'~ objRegistry.GetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath2 & "\" & subKey & "\Linkage\UpperBind" , strRegKey, arrValues
    			
    				'~ If(Instr(UCase(arrValues(i)), "TCPIP6") <> 0) Then
    					'~ Exit For
    				'~ End if
    			'~ Next
    			'~ For i = tmp To UBound(arrValues) - 1
    				'~ arrValues(i) = arrValues(i + 1)
    			'~ Next
    			'~ ReDim Preserve arrValues(UBound(arrValues)-1)
    			'~ objRegistry.SetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath, strRegKey, arrValues
    		End if
    	Next
    Next
    
    
    Sub ModifyRegKey(strKeyPath, strRegKey, strValue)
    	Dim arrValues, i, tmp
    	objRegistry.GetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath, strRegKey, arrValues
    
    	For i = 0 To UBound(arrValues)
    		If(Instr(UCase(arrValues(i)), UCase(strValue)) <> 0) Then
    			wscript.echo "Gefunden in: " & strRegKey
    			bolFound = True
    			Exit For
    		End if
    	next
    	If bolFound Then
    		tmp = i
    		For i = tmp To UBound(arrValues) - 1
    			arrValues(i) = arrValues(i + 1)
    		Next
    		On Error Resume Next
    		ReDim Preserve arrValues(UBound(arrValues)-1)
    		On Error Goto 0
    		objRegistry.SetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath, strRegKey, arrValues
    	End if
    End Sub
    

     

    Gruß

    Martin

    Mittwoch, 4. Mai 2011 19:57

Alle Antworten

  • Hallo Martin

    probiere die RegWerte unter TCPIP6\Linkage entsprechend anzupassen:

    http://eniackb.blogspot.com/2009/07/how-to-disable-ipv6-in-windows-2008.html

    Gruß
    Andrei

    Freitag, 18. Februar 2011 09:00
    Moderator
  • Hallo Andrei,

     

    das sieht ja schon mal vielversprechend aus. Den Link mussich bei meiner Suche wohl übersehen haben.

    Jetzt muss ich das nur noch in ein Script verpacken und austesten.

    Ich melde mich wieder, sobald ich mehr weiss.

    LG Martin

     

    Freitag, 18. Februar 2011 12:09
  • Hallo Martin

    probiere die RegWerte unter TCPIP6\Linkage entsprechend anzupassen:

    http://eniackb.blogspot.com/2009/07/how-to-disable-ipv6-in-windows-2008.html

    Gruß
    Andrei


    Hallo zusammen

    Dieser Beitrag ist super, bloss habe ich nun das Problem, dass IPv6 zwar auf einem Adapter durch die Regkeys ausgeschaltet wird aber im GUI der Hacken "Internet Protocol Version 6 (TCP/IPv6)" immer noch gesetzt ist....

    Der Befehl netsh interface ipv6 delete interface "Local Area Connection" funktioniert leider auch nicht (Fehler: Catastrophic failure)

     

    Hat jemand eine Idee? denn ich muss diesen Hacken auch rausbringen, sonst haben andere das Gefühl es sei nicht deaktiviert.... :-(

    Thanks!

    Mittwoch, 23. Februar 2011 14:47
  • Hallo zusammen!

    Das mit den Registrywerten scheint funktioniert zu haben, danke auf jeden Fall für die Antwort, hat uns ein gutes Stück vorangebracht. Ich kann bei Interesse gerne das fertige Script hier veröffentlichen, ist ja vielleicht für den einen oder anderen interessant.

    Jetzt hab ich noch das gleiche Problem wie TinelS, also dass der Haken noch da ist. Ist aber nur noch Makulaturarbeit, den da wegzubekommen.

    Habe mal aus "Spaß" den Haken per Hand entfernt und vorher und nachher einen Registry-Dump aller Schlüssel unterhalb von "HKLM\System\CurrentControlSet" gezogen und durch beyondCompare gejagt. Da gibt es noch einen Abschnitt der sich ändert, aber wenn ich das richtig im Kopf habe, dann waren das weder ein DWORD noch ein MULTI_SZ-Wert, so dass das automatisierte Bearbeiten etwas aufwändiger werden würde. Ich warte jetzt mal auf die Antwort der Kollegen, die das Script gerade testen, wenn alles gut geht, können wir das so schon in die Produktion geben.

    Danke euch auf jeden Fall nochmals für die Hilfe.

     

    LG Martin

    Mittwoch, 9. März 2011 20:15
  • So, habe jetzt nach langer Zeit endlich mal Zeit gefunden, den Thread endgültig zu beantworten.


    Wir haben das jetzt auf Basis von Andrei's Link (Danke an der Stelle nochmals) als VBS-Script gelöst.
    Wer Interesse hat:

    strComputer ="."
    
    Set objWMIService 	= GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
    Set objRegistry		= GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
    Set WshShell 		= Wscript.CreateObject("Wscript.Shell")
    
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterCOnfiguration WHERE IPEnabled=True")
    
    
    
    For Each objItem In colItems
    	WScript.Echo "Description: " & objItem.Description
    	WScript.Echo "SettingID: " & objItem.SettingID & vbCrLf
    	strSettingID = objItem.SettingID
    	
    	ModifyRegKey strKeyPath, "Bind", strSettingID
    	ModifyRegKey strKeyPath, "Export", strSettingID
    	ModifyRegKey strKeyPath, "Route", strSettingID
    	
    	objRegistry.EnumKey HKEY_LOCAL_MACHINE, strKeyPath2, arrSubKeys
    	For Each subKey in arrSubKeys
    		objRegistry.GetStringValue HKEY_LOCAL_MACHINE, strKeyPath2 & "\" & subKey, "NetCfgInstanceId", strValue
    		If strValue = strSettingID Then
    			ModifyRegKey strKeyPath2 & "\" & subKey & "\Linkage\", "UpperBind", "TCPIP6"
    			'~ objRegistry.GetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath2 & "\" & subKey & "\Linkage\UpperBind" , strRegKey, arrValues
    			
    				'~ If(Instr(UCase(arrValues(i)), "TCPIP6") <> 0) Then
    					'~ Exit For
    				'~ End if
    			'~ Next
    			'~ For i = tmp To UBound(arrValues) - 1
    				'~ arrValues(i) = arrValues(i + 1)
    			'~ Next
    			'~ ReDim Preserve arrValues(UBound(arrValues)-1)
    			'~ objRegistry.SetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath, strRegKey, arrValues
    		End if
    	Next
    Next
    
    
    Sub ModifyRegKey(strKeyPath, strRegKey, strValue)
    	Dim arrValues, i, tmp
    	objRegistry.GetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath, strRegKey, arrValues
    
    	For i = 0 To UBound(arrValues)
    		If(Instr(UCase(arrValues(i)), UCase(strValue)) <> 0) Then
    			wscript.echo "Gefunden in: " & strRegKey
    			bolFound = True
    			Exit For
    		End if
    	next
    	If bolFound Then
    		tmp = i
    		For i = tmp To UBound(arrValues) - 1
    			arrValues(i) = arrValues(i + 1)
    		Next
    		On Error Resume Next
    		ReDim Preserve arrValues(UBound(arrValues)-1)
    		On Error Goto 0
    		objRegistry.SetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath, strRegKey, arrValues
    	End if
    End Sub
    

     

    Gruß

    Martin

    Mittwoch, 4. Mai 2011 19:57
  • Hi,

    Am 04.05.2011 21:57, schrieb Martin.Chauchet:

    Wir haben das jetzt auf Basis von Andrei's Link (Danke an der Stelle
    nochmals) als VBS-Script gelöst.

    Damit wird aber IPv6 nicht deaktiviert.
    ping localhost wird immer noch mit ::1 antworten.
    Ihr entfernt damit nur die Bindung des Protokolls an den Adapter
    und das verursacht mehr Fehler als ihr damit positive Effekte gewinnt.

    Warum?
    Div. Programme: dsa.msc und die anderen MMC kommunizieren bevorzugt
    IPv6, das Protokoll ist aktiv, aber nicht verbunden, in der Übersicht
    der DCs in der MMC taucht der eigene Server dann "offline" auf.
    Im SBS 2008 läuft der "Internet Connection Wizard" (heisst der immer
    noch so?) nicht zu Ende durch, da DHCP für IPv6 nicht automatisch
    eingerichtet werden kann. usw.usw.usw.

    Wenn abschalten, dann "richtig". Nicht die Bindung entfernen, sondern
    die Komponente im Stack abschalten und das ist ein einfacher Registry
    Eintrag:

    http://support.microsoft.com/kb/929852
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\
    DisabledComponents=0xffffffff

    Tschö
    Mark


    Mark Heitbrink - MVP Windows Server - Group Policy

    Homepage:       www.gruppenrichtlinien.de - deutsch
    GPO Tool:       www.reg2xml.com - Registry Export File Converter
    NetworkTrayTool www.gruppenrichtlinien.de/tools/Networktraytool.htm

    Mittwoch, 4. Mai 2011 20:47
  • >Damit wird aber IPv6 nicht deaktiviert.
    >ping localhost wird immer noch mit ::1 antworten.

    >Wenn abschalten, dann "richtig". Nicht die Bindung entfernen, sondern
    >die Komponente im Stack abschalten und das ist ein einfacher Registry
    >Eintrag:

    Das ist leider nicht ganz korrekt.
    Selbst mittels DisabledComponents=0xffffffff bleibt noch ein minimaler Teil aktiv,
    nämlich der auf dem Loopback-Adapter.

    Also ein "ping ::1" funktioniert auch dann immer noch.

    Allerdings wird bei "ping localhost" dann von 127.0.0.1 geantwortet
    und auf allen Schnittstellen (außer eben Loopback) sind alle IPv6 Komponeten deaktiviert.


    Mittwoch, 4. Mai 2011 21:22
  • Hi,

    Am 04.05.2011 23:22, schrieb Matthias Wolf:

    Also ein "ping ::1" funktioniert auch dann immer noch.
    Allerdings wird bei "ping localhost" dann von 127.0.0.1 geantwortet

    Das ist für schlecht programmierte Software das Wichtigste.
    Ich kenne 2 Produkte, die nur eine Antwort von 127.0.0.1 akzeptieren,
    weil die Entwickler nicht verstanden haben das localhost sowas wie
    eine Variable ist. :-(

    Tschö
    Mark


    Mark Heitbrink - MVP Windows Server - Group Policy

    Homepage:       www.gruppenrichtlinien.de - deutsch
    GPO Tool:       www.reg2xml.com - Registry Export File Converter
    NetworkTrayTool www.gruppenrichtlinien.de/tools/Networktraytool.htm

    Mittwoch, 4. Mai 2011 22:26
  • >Ich kenne 2 Produkte, die nur eine Antwort von 127.0.0.1 akzeptieren,
    >weil die Entwickler nicht verstanden haben das localhost sowas wie
    >eine Variable ist. :-(

    Noch schlimmer, ich hatte einmal eine Software, die tatsächlich folgendes macht hat:

    ping hostname >%pfad%\antwort.txt

    Dann wurde das File antwort.txt eingelesen und nach "Antwort von" durchsucht.
    Wurde ein Eintrag gefunden, so ist man davon ausgegangen dass der Rechner antwortete.

    Was natürlich schonmal auf einem nicht deutschen System gar nicht funktioniert.
    Wenn dann statt dem Client der Router antwortete, wurde natürlich auch davon ausgegangen dass der Verbindungsaufbau erfolgreich war.

    Aber das nur am Rande :-)

    Donnerstag, 5. Mai 2011 07:45
  • Hallo,

    und sorry das ich das alte Teil nochmal ausgrabe aber das Script funktioniert (zumindest bei mir) nicht.

    Es steigt an Zeile 43 ( objRegistry.GetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath, strRegKey, arrValues) mit dem Hinweis, dass der zweite Parameter ungültig ist aus.

    Bin leider zu deppert um den Fehler selbst zu beheben. Mit einem On Error Resume Next läuft es (logisch) durch macht dann aber nicht das was es soll,

    sondern "pseudodeinstalliert" den IPv6 Adapter (sprich man muss nur einmal auf installieren klicken und dann ohne Auswahl abrechen und er ist wieder da) entfernt den Haken aber nicht (grad das währe wichtig für mich).

    Hatte eigentlich gehofft ein Script gefunden zu haben, was den Adapter entkoppelt (nicht deinstalliert) und den Haken wegmacht.

    Irgendwer noch eine Idee dazu bzw. das selbe Problem?

    Samstag, 24. März 2012 11:13
  • Hi,
     
    Am 24.03.2012 12:13, schrieb Nysrogh76:
    > und sorry das ich das alte Teil nochmal ausgrabe aber das Script
    > funktioniert (zumindest bei mir) nicht.
     
    Was für ein Glück. Das Deaktivieren der Checkbox ist nur das deaktiveren
    der BINDUNG des PROTOKOLLS an den Adapter. IPv6 ist aber immer noch aktiv.
     
    Mit anderen Worten:
    a) das bringt nichts
    b) macht Fehler
    c) ist sinnfrei!? Da es nur die Bindung entfernt
     
    Du suchst "DisabledComponents" = FFFFFFFF
     
    Tschö
    Mark
    --
    Mark Heitbrink - MVP Windows Server - Group Policy
     
    Homepage:       www.gruppenrichtlinien.de - deutsch
    GPO Tool:       www.reg2xml.com - Registry Export File Converter
    NetworkTrayTool www.gruppenrichtlinien.de/tools/Networktraytool.htm
     
    Samstag, 24. März 2012 11:19
  • Das Deaktiviern der Bindung ist ja genau das was ich will (aber auch das macht das Script in der Form nicht) allerdings soll auch der Haken bei IPv6 verschwinden (alles was man ändert sollte ja auch  geändert angezeigt werden).

    Das komplette disablen ist leider so nicht gewünscht, dafür hab ich hier schon seit "Urzeiten" ein Script von MS rumliegen.

    Im moment sieht es halt so aus das ich ein Script habe das alle gewünschten IPv4 Einstelllungen ( DHCP, LMHOST aus, NetBIOS aus, DNS-Suffixe setzten, Verbindung nicht registrieren) setzt, nur wegen dem blöden Haken bei IPv6 muss bei jedem Rechner einmal von Hand in die Netzwerkeinstellungen gegangen und der von Hand entfernt werden......

    Samstag, 24. März 2012 12:49
  • Am 24.03.2012 13:49, schrieb Nysrogh76:
    > Das Deaktiviern der Bindung ist ja genau das was ich will
     
    Dadurch kriegst du mit div. Software fehler, die eine Antwort intern auf
    IPv6 erwartet, denn das Protokoll ist aktiv und dann nicht bekommt weil
    die Bindung an der NIC nicht vorhanden ist.
     
    Das ist definitiv die "unsupporteste" und "unempfohlenste" Lösung von
    allen. Entweder abschalten, oder anlassen.
     
    Fehler in deinem Konstrukt, z.b.:
    - im dsa.msc, wenn an den Server wechselt, der eigene wird offline angezeigt
    - div. 3rd Party Webservices und alte MS Webservices können Webseiten
    auf Localhost nicht darstellen, da die Antwort von ::1 kommt und nicht
    127.0.0.1
    usw.
     
    Tschö
    Mark
    --
    Mark Heitbrink - MVP Windows Server - Group Policy
     
    Homepage:       www.gruppenrichtlinien.de - deutsch
    GPO Tool:       www.reg2xml.com - Registry Export File Converter
    NetworkTrayTool www.gruppenrichtlinien.de/tools/Networktraytool.htm
     
    Samstag, 24. März 2012 17:10
  • Huhu,

    das ist mir alles klar aber ich hab das nicht zu entscheiden. Vorgabe ist halt wie schon geschrieben. Wobei ich mittlerweile glaube das es eh an dem blöden Haken scheitern wird. Die Bindung kann ich über die Powershell per script abschalten. Nur der Haken geht nicht weg.

    Der Regkey für den Haken soll unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\Config zu finden sein nur die Wurzel Control gibt es nicht unter Network. Irgendwie nervig das so ein blöder Haken soviel Stress macht. Naja im Notfall mach ich mir mit AutoIt ein Aufzeichnungsmakro... nicht schön abger funktioniert

    Samstag, 24. März 2012 17:23
  • IPv6 kann effizient deaktiviert werden durch folgenden Befehl:

    netsh interface tcp set global autotuning=disabled

    Damit wird IPv6 deaktiviert, wie wenn der Haken bei den Eigenschaften der Netzwerkkarte manuell entfernt wird.

    Freundliche Grüsse

    Anton Alois Keller

    Montag, 29. Oktober 2012 07:20
  •     Zitat Mark Heitbrink:
        Mit anderen Worten:
        a) das bringt nichts
        b) macht Fehler
        c) ist sinnfrei!? Da es nur die Bindung entfernt

        Du suchst "DisabledComponents" = FFFFFFFF
        http://support.microsoft.com/kb/929852/en-us


        </Zitat>

    Vermutlich will er das nicht. Wenn mak einen Sinn nicht erkennen kann heisst das noch lange nicht dass es keinen gibt.

    Das Scrip von Martin.Chauchet kann so nicht funktionieren wie gepostet :-( Schade, da wo ich daheim bin bleibt sowas nicht als Falle stehen.
    Leider habe ich keine Ahnung von VisualBasic, hab mir aber mal die Mühe gemacht das fehlerhafte Posting zu korrigieren und die Ausgaben von dem Script etwas Debug-freundlicher zu gestalten.

    So wie's hier folgt funktionert's wenigstens Programm-technisch, wenn auch nicht funktionell.

    Das Abkoppeln eines Adapters von einem Protokoll erfordert zusätzlich einen wesentlichen Eingirff in SYSTEM\CurrentControlSet\Control\Network\Config. Leider hab ich wie gesagt keine Ahnung von det Janze, bin hier nicht daheim. Siehe Kommentare für weiter Infos, sollte doch eigentlich ein Leichtes sein das Teil zu ergänzen und so nutzbringend funktionstüchtig zu bekommen.

        const HKEY_LOCAL_MACHINE = &H80000002
        const SYSTEMNICS_CLASS_GUID = "{4D36E972-E325-11CE-BFC1-08002BE10318}"
        Const Quote = """"

        strComputer ="."

        Set objWMIService     = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
        Set objRegistry        = GetObject("winmgmts:{impersonationLevel=impersonate}!\\"&strComputer & "\root\default:StdRegProv")
        Set WshShell         = Wscript.CreateObject("Wscript.Shell")

        strLinkByProtoPrefix = "SYSTEM\CurrentControlSet\services"
        strLinksByNICPrefix = "SYSTEM\CurrentControlSet\Control\Class\"&SYSTEMNICS_CLASS_GUID

        ' Get all IP-enabled NICs
        Set colNICs = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterCOnfiguration WHERE IPEnabled=True")

        ' We should create the LockHolder, like GUI or nvspbind.exe do
        objRegistry.SetStringValue HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Control\Network\NetCfgLockHolder", "@", "me"

        ' Ugently ToDo: Figure out the format of HKEY_LOCAL_MACHIN\SYSTEM\CurrentControlSet\Control\Network\Config
        ' This must be altered correctly, like GUI and nvspbind do, otherwise you possibly loose all bindings after reboot, depending
        ' on the ammount of non-matching bindings (eg. lltdio, rspndr). Just deleting this key (unlike stated elsewhere) is no workaround!
        'obj.Registry.SetMagicCure HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Control\Network", Config, $magic

        For Each objNIC In colNICs
            ' Get the GUID, all settings reference it
            '    PS äquivalent was:
            '     "Get-WmiObject -Class 'Win32_NetworkAdapterConfiguration' | Where-Object {$_.IPEnabled -eq 'True'} | select settingid"
            strNICguid = objNIC.SettingID

            WScript.Echo "Checking NIC " & Quote & objNIC.Description & Quote & " (" & strNICguid & ")"

            ' Remove NIC-GUID from these 3 values
                strKeyPathToMod = strLinkByProtoPrefix & "\TCPIP6\Linkage"
            ModifyRegKey strKeyPathToMod, "Route", strNICguid
            ModifyRegKey strKeyPathToMod, "Bind", "\Device\" & strNICguid
            ModifyRegKey strKeyPathToMod, "Export", "\Device\Tcpip6_" & strNICguid

            ' Write back Export value, like GUI change does if no more NIC has IPv6 binding
            objRegistry.SetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPathToMod, "Export", Array("\Device\Tcpip6")

            ' Get NIC Indexes from system's supported NICs
            objRegistry.EnumKey HKEY_LOCAL_MACHINE, strLinksByNICPrefix, arrSubKeys
            For Each subKey in arrSubKeys
                objRegistry.GetStringValue HKEY_LOCAL_MACHINE, strLinksByNICPrefix & "\" & subKey, "NetCfgInstanceId", strValue


                If strValue = strNICguid Then
                    ModifyRegKey strLinksByNICPrefix & "\" & subKey & "\Linkage", "UpperBind", "TCPIP6"
                End if
            Next
        Next

        ' Disable IPv6 Socket address, which does lsass.exe after disabling IPv6 binding via GUI or nvspbind
        ' hmm, better not, that's lsass's job... objRegistry.SetBinaryValue HKEY_LOCAL_MACHINE, strLinkByProtoPrefix & "\Netlogon\Private", "IPV6SocketAddressList", Array()

        ' Finished, so delete LockHolder
        objRegistry.DeleteKey HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Control\Network\NetCfgLockHolder"

        Sub ModifyRegKey(strRegKeyPath, strRegKey, strValue)
            Dim arrValues, i, tmp
            objRegistry.GetMultiStringValue HKEY_LOCAL_MACHINE, strRegKeyPath, strRegKey, arrValues

            For i = 0 To UBound(arrValues)
                If(Instr(UCase(arrValues(i)), UCase(strValue)) <> 0) Then
                    bolFound = True
                    Exit For
                End if
            next
            If bolFound Then
                tmp = i
                For i = tmp To UBound(arrValues) - 1
                    arrValues(i) = arrValues(i + 1)
                Next
                On Error Resume Next
                ReDim Preserve arrValues(UBound(arrValues)-1)
                On Error Goto 0
                objRegistry.SetMultiStringValue HKEY_LOCAL_MACHINE, strRegKeyPath, strRegKey, arrValues
                wscript.echo "Removed GUID value for " & Quote & objNIC.description & Quote &_
                    " from Key " & Quote & strRegKey & Quote &_
                    " in " & strRegKeyPath
            else
                WScript.Echo "No match for " & strValue & " in " & Quote & strRegKey & Quote _
                & " under " & strRegKeyPath & ", IPv6 binding already disbaled?"
            End if
        End Sub


    Zwischenzeitlich kann man sich gut mit nvspbind.exe behelfen!

    Viele Grüße,

    Shmisy

                                                                                              
    Mittwoch, 5. August 2015 18:37
  • Am 05.08.2015 schrieb Shmisy:
    Nabend,

    Vermutlich will er das nicht. Wenn mak einen Sinn nicht erkennen kann heisst das noch lange nicht dass es keinen gibt.

    Stimmt, ist immer gut, sich sehenden Auges ein Loch ins Knie zu bohren und
    mit Marmelade wieder zuzuschmieren. Wird schon einen Sinn haben... :/

    Bye
    Norbert


    Frank, I never thought I'd say this again. I'm getting the pig!
    nntp-bridge Zugriff auf die MS Foren wieder möglich:
    https://communitybridge.codeplex.com/

    Mittwoch, 5. August 2015 19:42
  • Hi,
     
    Am 05.08.2015 20:37, schrieb Shmisy:
    > Vermutlich will er das nicht. Wenn mak einen Sinn nicht erkennen kann
    > heisst das noch lange nicht dass es keinen gibt.
     
    Du hast recht es gibt Sinn: Wenn man Fehler mag sollte man es auf diese
    Weise lösen.
     
    Was passiert bei "Uncheck-Bindung", statt "DisabledComponents":
    - dein localhost antwortet immer noch auf ::1, das verstehen div alte
    Webserver nicht, die dann bei "http:///localhost" die Webseite nicht
    öffnen, da sie den Localhost auf 127.0.0.1 erwarten. Das is schlecht
    programmiert, aber selbst ein altes Visual Studio gehört in die Liste
    - In der MMC wird der eigene DCs, auf dem man zB poer RDP sitzt als
    Offline angezeigt, da der Connnect präferiert über IPv6 hergestellt
    wird. Das System spricht IPv6, aber der DC antwortet nicht mit IPv6,
    ergo sagt die Console er ist offline.
    - Der Aufwand des Scriptes ist zu groß, wenn sich Neztzwerkkarten ändern
    (Lan Verbindung #2,#3,#4,#5 etc) gerne in virtuellen Systemem den Fall.
    In dem Fall muss das Script erneut laufen. Die Frage ist also, wann und
    wie oft läuft das Script auf regulärer Basis und was kostet es an Zeit?
    Da ist ein einzelner RegistryKey der für alle gilt die einachere Wahl
    - Totschlag Argument: Das "Uncheck-Bindung" ist lt. KB Artikel die
    schlechteste aller Lösungen, MS mag es nicht, wenn IPv6 abgeschaltet
    wird, aber wenn dann über DisabledComponents
     
    Tschö
    Mark
     --
    Mark Heitbrink - MVP Windows Server - Group Policy
     
    GPO Tool: http://www.reg2xml.com - Registry Export File Converter
     
    Donnerstag, 6. August 2015 07:28