DNS mit netsh und Autoit setzen

  • Ich habe nachstehendes Problem und brauche wieder einmal eure Unterstützung:

    Ich kann mit dem Tool "netsh" die ERSTE DNS-Adresse problemlos setzen (z.B.: netsh interface ip SET dns name =...)
    Ich muss aber auch den ZWEITEN DNS eintragen (normalerweise mit "netsh interface ip ADD dns...") kein Problem. Aus mir unerklärlichen Gründen wird mir aber der 2. DNS nicht eingetragen. Mache ich es über eine "gewöhnliche" Batchdatei, funktioniert es super (fange jedoch in einem Netzwerk mit Domäne nichts damit an....außer Abmelden und als Administrator wieder anmelden.....und das möchte(n) wir uns bei 300 Rechnern ersparen).

    Vielleicht kann mir jemand helfen......

    vielen Dank

    Einmal editiert, zuletzt von superpati (3. Mai 2009 um 19:14)

  • Hallo.

    Wenn es mit Batch-Dateien läift, dann poste diese bitte, damit wir Dir besser helfen können.

    Vielen Dank.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hi in der Hilfe zu netsh steht folgendes

    Spoiler anzeigen


    Syntax

    add dns [name=]Schnittstellenname [addr=] DNS-Adresse [[index=]DNS-Index]
    Parameter

    [ name =] Schnittstellenname
    Erforderlich. Gibt den Namen der Schnittstelle an, für die Sie DNS-Informationen hinzufügen möchten. Der Parameter Schnittstellenname muss dem im Dialogfeld zu Netzwerkverbindungen angegebenen Namen der Schnittstelle entsprechen. Wenn Schnittstellenname Leerzeichen enthält, setzen Sie den Text in Anführungszeichen (z. B. "Name der Schnittstelle").

    [ addr= ]DNS-Adresse
    Erforderlich. Gibt die IP-Adresse des DNS-Servers an, der hinzugefügt werden soll.

    [ index=]DNS-Index
    Gibt die Position des hinzugefügten DNS-Servers in der Liste der DNS-Server für die Schnittstelle an.

    /?
    Zeigt Hilfe an der Eingabeaufforderung an.

    und so sieht dann der fertige Eintrag aus

    Spoiler anzeigen


    netsh
    interface ip add dns name="Lanverbindung 1" addr=192.166.192.3 index=2

    Index=3 wäre dann der 3. DNS Server usw.

    MfG
    Der_Doc

  • :whistling: Danke für die Unterstützung....aber leider klappt es bei mir nicht so richtig
    Zeile 1 bei mir funktioniert.....Zeile 2 nicht.....ist mir schleierhaft....

    Spoiler anzeigen


    Zeile 1:
    run ("netsh"&' interface ip set dns name = "LAN-Verbindung" source=static addr="123.123.128.2"',"",@SW_SHOW)

    Zeile 2:
    run ("netsh"&" interface ip add dns name = 'LAN-Verbindung' source=static addr='123.123.128.3 index=2'","",@SW_SHOW)

  • Versuch mal statt run -> ShellExecute


    Ich kenn mich in deinem Problem zwar nicht aus.
    Und da du uns auch nicht die Fehlermeldung gegeben hast, denke ich mal, dass es an run liegt.


    Mfg

    Benne

  • Ich habe mich vielleicht falsch ausgedrückt......"netsh" wird ja aufgerufen....in beiden Fällen......die 1. Zeile wird mir eingetragen.......die 2. Zeile wird jedoch nicht eingetragen, obwohl "netsh" auch aufgerufen wird.......komisch....ändere ich "add" auf "set" funktionierts........... 8|

  • :!: Ach ja......ich sollte ja meine Batch-Datei posten....hole ich hiermit nach...vielleicht hilft es

    Spoiler anzeigen

    @ECHO OFF
    echo %1
    echo IP-Konfiguration wird durchgefuehrt...
    echo.

    rem netsh interface ip set dns name = "LAN-Verbindung" source = static addr = 123.123.128.2
    netsh interface ip add dns name = "LAN-Verbindung" addr = 195.202.128.3
    rem netsh interface ip set wins name = "LAN-Verbindung" source = static addr = none

    popd

    echo.
    echo +++ IP-KONFIGURATION BEENDET +++
    echo.

    • Offizieller Beitrag

    Versuche es mal mit WMI.
    Ich habe mal schnell eine Funktion dafür erstellt:

    _Set_DNS()
    [autoit]

    ;===============================================================================
    ; Function Name: _Set_DNS($Card_IP, $DNS_1=-1, $DNS_2=-1, $strComputer = ".")
    ; Description:: Eine od. beide DNS-Adressen für Netzwerkadapter mit übergebener IP setzen
    ; Parameter(s): $Card_IP IP des Netzwerkadapters
    ; $DNS_1 IP für DNS1 (-1 Adresse wird nicht gesetzt)
    ; $DNS_2 IP für DNS2 (-1 Adresse wird nicht gesetzt)
    ; $strComputer "." - der lokale PC
    ; Return Value(s): Erfolg Array mit [DNS1,DNS2]
    ; Fehler 0 @error 1 - keine DNS_IP übergeben
    ; @error 2 - Adapter_IP existiert nicht
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _Set_DNS($Card_IP, $DNS_1=-1, $DNS_2=-1, $strComputer = ".")
    If ($DNS_1 = -1) And ($DNS_2 = -1) Then Return SetError(1,0,0)
    Local $objWMIService = ObjGet("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
    Local $colNetCards = $objWMIService.ExecQuery _
    ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
    For $objNetCard In $colNetCards
    If $objNetCard.IPAddress(0) = $Card_IP Then
    If $DNS_1 <> -1 Then
    $objNetCard.DNSServerSearchOrder(0) = $DNS_1
    EndIf
    If $DNS_2 <> -1 Then
    $objNetCard.DNSServerSearchOrder(1) = $DNS_2
    EndIf
    Local $aReturn[$objNetCard.DNSServerSearchOrder(0),$objNetCard.DNSServerSearchOrder(1)]
    Return $aReturn
    EndIf
    Next
    Return SetError(2,0,0)
    EndFunc ;==>_Set_DNS

    [/autoit]
  • Wenn man Zeile 2 richtig schreibt, funktioniert sie auch:

    [autoit]

    Run('netsh interface ip add dns name="LAN-Verbindung" addr=123.123.128.3 index=2',"",@SW_SHOW)

    [/autoit]

    Funktioniert bei mir unter XP (wenn es als Admin ausgeführt wird) einwandfrei !

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Meine Herrschaften...ich erkläre mich zur --> :rofl:

    Ist ja niederschmetternd.......ich setze mich nie mehr so spät an den PC und stelle blöde Fragen......


    vielen Dank nochmals

  • Hi,

    ich grabe das Thema mal aus, weil ich dazu noch eine Frage habe und hoffe, dass ich diesmal eine Antwort bekomme :D

    Wie bekomme ich den Name der Netzwerkverbindung in einer Variablen gespeichert? Weder die SuFu, noch Google konnten mir bis jertzt weiter helfen. Ziel ist es, die Netzwerkverbindung meines PC´s zu Beginn des Scriptes zu deaktivieren, und nur wenn nötig kurz wieder zu aktiviern.

    mfg Michl

  • Hi,
    ich habe mir dafür folgendes Script geschrieben

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    Const $wbemFlagReturnImmediately=0x10, $wbemFlagForwardOnly=0x20, $wbemFlags=$wbemFlagReturnImmediately+$wbemFlagForwardOnly
    Global $aNetCfg[50][7]
    Global $Index=-1, $s='Computer:' &@Tab &@Computername
    Global $colItems='', $strComputer=@ComputerName, $objWMIService, $colItem, $colItems, $m, $n, $j
    $objWMISvc=ObjGet('winmgmts:\\' &$strComputer &'\root\CIMV2')
    $Items=$objWMISvc.ExecQuery('Select Index,IPAddress From Win32_NetworkAdapterConfiguration', 'wql', $wbemFlags)
    If IsObj($Items) Then
    For $Item In $Items
    $aNetCfg[$Item.Index][1]=$Item.IPAddress(0)
    If $Item.IPAddress(0)=@IPAddress1 Then $aNetCfg[$Item.Index][1] &= '*'
    Next
    EndIf
    $objWMISvc=ObjGet('winmgmts:\\' &$strComputer &'\root\CIMV2')
    $Items=$objWMISvc.ExecQuery('Select * From Win32_NetworkAdapter', 'wql', $wbemFlags)
    If IsObj($Items) Then
    For $Item In $Items
    With $Item
    $j=.index
    $aNetCfg[$j][0]=.MacAddress
    If $aNetCfg[$j][0]='' Then $aNetCfg[$j][0]=@Tab
    $aNetCfg[$j][2]=.NetConnectionId
    If $aNetCfg[$j][2]<>'' And StringInstr($aNetCfg[$j][1], '.')=0 Then $aNetCfg[$j][1]='deaktiviert'
    $aNetCfg[$j][3]=.Productname
    EndWith
    Next
    Else
    $s='Ooops, keine Objekte für Win32_NetworkAdapter..'
    EndIf
    $s &= StringFormat('\n%2s\t%-18s\t\t%s\t%-36s\t%s', 'Index', 'MAC-Adresse', 'IPAdresse', 'Verbindungsname', 'NetzAdapter')
    For $i=1 To $j
    If StringLeft($aNetCfg[$i][2], 1)>' ' Then $s &= StringFormat('\n%02i\t%-18s\t%-16s\t%-36s\t%s', $i, $aNetCfg[$i][0], $aNetCfg[$i][1], $aNetCfg[$i][2], $aNetCfg[$i][3])
    Next
    MsgBox(0, 'IP-Info, ©2012 by ytwinky, MD..', $s &@Lf &'* ist die aktive IPAdresse..')

    [/autoit]

    Es funktioniert unter XP SP3 primstens(für meine Zwecke jedenfalls..)
    ..ist vllt ein wenig großzügig dimensioniert, aber das kannste ja selber ändern..
    hth
    Gruß
    ytwinky

    (Ich) benutze stets die aktuelle (Beta) und SciTE..

  • Danke dir, aber ich hab wohl vergessen zu erwähnen, dass ich mit Win 7 64 Bit fahre.

    Gibt es evtl. auch andere Möglichkeiten, um den PC vom Netz zu ternnen, bei denen man den Namen nicht braucht?