Mehrere DNS Server für bestimmten NW-Adapter per WMI setzen.

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von squax.

    Mehrere DNS Server für bestimmten NW-Adapter per WMI setzen.

    Moin Moin,
    erst wollte ich mal Hallo sagen, da dies mein 1. Post ist!
    Also ich hoffe auf ein gutes und nettes miteinander!

    So nun zu meinem kleinen Anliegen:

    Ich schreibe gerade ein Programm, welches mir einige Arbeit abnehmen soll. Es ist quasi ein Windows-Funktionssammlung mit Zusatzfunktionen.
    Jetzt zu meinem Problem. Ich bin gerade dabei, dass ich dem Programm beibringe, dass es mir die DNS-Server einträgt bzw. vorhandene ersetzt. Nun liegt das Problem aber da, dass mir immer nur der Primäre DNS-Server eingetragen wird und der Sekundäre einfach leer bleibt. Einen Fehler bekommen ich des Weiteren auch nicht, der Prozess wird mit dem Status "0" abgeschlossen.

    Hier der MSDN-Link <--

    LG
    squax

    P.S. Hier der Programmcode

    VB.NET-Quellcode

    1. Private Sub btn_SetDns_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_SetDns.Click
    2. Dim oAdapters
    3. Dim errDNS
    4. If (cmbbx_Adapter Is Nothing) Then
    5. MsgBox("Fehler: Sie haben keinen Netzwerkadapter ausgewählt!", MsgBoxStyle.Critical)
    6. Else
    7. ' alle verfügbaren Netzwerk-Adapter mit IP-Adresse
    8. oAdapters = GetObject("winmgmts:").execquery("SELECT * FROM Win32_NetworkAdapterConfiguration")
    9. ' Objekte durchlaufen
    10. For Each oAdapter In oAdapters
    11. If oAdapter.Description = Me.cmbbx_Adapter.Text Then
    12. ' Setzen der DNS Server für den aktuellen Netzwerkadapter
    13. errDNS = oAdapter.SetDNSServerSearchOrder({"10.177.146.129"}, {"10.177.146.130"})
    14. 'errDNS = oAdapter.SetDNSServerSearchOrder({"8.8.4.4"}, {"8.8.8.8"})
    15. If Not (errDNS = 0) Then
    16. MsgBox("Fehler: Die DNS-Server wurden nicht gesetzt!", MsgBoxStyle.Critical)
    17. Else
    18. MsgBox("Die DNS-Server wurde erfogreich eingetragen.", MsgBoxStyle.Information)
    19. Me.Close()
    20. frm_MainFrame.Show()
    21. End If
    22. End If
    23. Next
    24. End If
    25. End Sub
    Hi.

    Als erstes würde ich dir raten, den System.Management Verweis zu deinem Projekt hinzuzufügen.
    Damit hast du einen NET Wrapper für WMI.

    Folgendermassen sähe es dann aus:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Management
    2. Public Class Form1
    3. 'Liste für die Anzeige in der ComboBox
    4. Private nL As New List(Of NIC)
    5. 'Setzen des DNSServers anhand des Indexes, welcher in der CmbBox als ValueWert verfügbar ist.
    6. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    7. If cmbbx_Adapter.SelectedValue IsNot Nothing Then
    8. Try
    9. Dim classInstance As New ManagementObject( _
    10. "root\CIMV2", _
    11. "Win32_NetworkAdapterConfiguration.Index='" & Me.cmbbx_Adapter.SelectedValue & "'", _
    12. Nothing)
    13. 'Parameter auslesen und setzen
    14. Dim inParams As ManagementBaseObject = classInstance.GetMethodParameters("SetDNSServerSearchOrder")
    15. inParams("DNSServerSearchOrder") = New Object() {"8.8.8.8", "8.8.8.9"} 'Dies ist der Primäre und Sekundäre DNS Server!
    16. 'Methode ausführen
    17. Dim outParams As ManagementBaseObject = classInstance.InvokeMethod("SetDNSServerSearchOrder", inParams, Nothing)
    18. Catch err As ManagementException
    19. MessageBox.Show("An error occurred while trying to execute the WMI method: " & err.Message)
    20. End Try
    21. Else
    22. MsgBox("Fehler: Sie haben keinen Netzwerkadapter ausgewählt!", MsgBoxStyle.Critical)
    23. End If
    24. End Sub
    25. 'Liste aller Netzwerkadapter anzeigen
    26. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    27. nL.Clear()
    28. Try
    29. Dim searcher As New ManagementObjectSearcher("root\CIMV2", "SELECT Description, Index FROM Win32_NetworkAdapterConfiguration")
    30. For Each queryObj As ManagementObject In searcher.Get()
    31. Dim n As New NIC
    32. n.Description = queryObj("Description")
    33. n.Index = queryObj("Index")
    34. nL.Add(n)
    35. Next
    36. Button1.Enabled = True
    37. Catch err As ManagementException
    38. MessageBox.Show("An error occurred while querying for WMI data: " & err.Message)
    39. End Try
    40. 'Liste an comboBox binden und Display bzw Valuemember setzen
    41. cmbbx_Adapter.DataSource = nL
    42. cmbbx_Adapter.DisplayMember = "Description"
    43. cmbbx_Adapter.ValueMember = "Index"
    44. End Sub
    45. 'Hilfsklasse für die ComboBox
    46. Public Class NIC
    47. Private _desc As String
    48. Private _in As Int32
    49. Public Property Description() As String
    50. Get
    51. Return _desc
    52. End Get
    53. Set(ByVal value As String)
    54. _desc = value
    55. End Set
    56. End Property
    57. Public Property Index() As Int32
    58. Get
    59. Return _in
    60. End Get
    61. Set(ByVal value As Int32)
    62. _in = value
    63. End Set
    64. End Property
    65. End Class
    66. End Class



    Die Controlbezeichnung ist teilweise nicht günstig gewählt
    Das ist meine Signatur und sie wird wunderbar sein!