我是编程的初学者。我写了一个脚本来使用VB设置DNS设置。我能够设置主要地址。
但是,我不知道如何设置辅助地址,因为它需要使用数组。
如何做到这一点?
Dim DNS As String() = {"192.168.1.1", "192.168.1.2"}
Dim objMC As ManagementClass = New ManagementClass("Win32_NetworkAdapterConfiguration")
Dim objMOC As ManagementObjectCollection = objMC.GetInstances()
For Each objMO As ManagementObject In objMOC
If (Not CBool(objMO("IPEnabled"))) Then
Continue For
End If
Try
Dim objSetIP As ManagementBaseObject = Nothing
Dim objNewDNS As ManagementBaseObject = Nothing
objNewDNS = objMO.GetMethodParameters("SetDNSServerSearchOrder")
'Set DNS to DHCP
objNewDNS("DNSServerSearchOrder") = New String() {DNS()}
objSetIP = objMO.InvokeMethod("SetDNSServerSearchOrder", objNewDNS, Nothing)
Console.WriteLine("Updated IPAddress, SubnetMask and Default Gateway!")
Catch ex As Exception
MessageBox.Show("Unable to Set IP : " & ex.Message)
End Try
Next objMO
答案 0 :(得分:6)
在VB.Net中,Dim
关键字实际上是Dimension的缩写,可用于声明数组。
只需将括号应用于变量或类型,并且您可以预先设置数组。
Dim arrayOfString As String()
或者
Dim arrayOfString() As String
当然,它比那复杂一点。您可能希望使用预定义数量的元素声明数组,例如5,假设为Option Base 0
。
Dim arrayOfInt(4) As Int
或者您可能希望为数组分配一些预定义的值。
Dim arrayofInt As Int() = {1, 2, 3, 4, 5}
您也可以使用此语法
Dim arrayOfStrings = New String() {"1.2.3.4", "5.6.7.8"}
例如。你的例子,
Dim DNS As String() = {"192.168.1.1", "192.168.1.2"}
似乎完全有效。
在您的示例中,您有错误使用WMI。我看到你想在"SetDNSServerSearchOrder"
类上调用"Win32_NetworkAdapterConfiguration"
方法。
objNewDNS = objMO.GetMethodParameters("SetDNSServerSearchOrder")
将objNewDNS设置为ManagementBaseObject
,它是"SetDNSServerSearchOrder"
方法的参数集合。
"SetDNSServerSearchOrder"
采用一个名为"DNSServerSearchOrder"
的参数,如here所述,恰好是一个字符串数组。
因此,除非我弄错了,假设字符串数组DNS
是您的搜索顺序,您的代码应为:
'Set DNS to DHCP
objNewDNS("DNSServerSearchOrder") = DNS
objMO.InvokeMethod("SetDNSServerSearchOrder", objNewDNS)
请注意,此代码会丢弃方法调用的返回值。
编辑:
根据您的评论,objMO.InvokeMehtod
调用返回的对象实际上是ManagementBaseObject
。这包装了被调用方法的“returnValue”。因此,如果有必要,下面的代码将帮助您获得返回值。
'Set DNS to DHCP
objNewDNS("DNSServerSearchOrder") = DNS
Dim oResult As ManagementBaseObject = _
objMO.InvokeMethod("SetDNSServerSearchOrder", objNewDNS)
Dim result As Integer = CType(oResult["returnValue"], Integer)
所以你的问题与你声明数组的能力无关,而是与WMI的繁琐接口有关。我猜你可能需要多一些调用来使你的控制台输出完全有效,但我希望这可以帮助你。