Versuche es mal mit WMI.
Ich habe mal schnell eine Funktion dafür erstellt:
_Set_DNS()
;===============================================================================
; 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