我是编程的初学者.我写了一个脚本来使用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
Run Code Online (Sandbox Code Playgroud)
在VB.Net中,Dim关键字实际上是Dimension的缩写,可用于声明数组.
只需将括号应用于变量或类型,并且您可以使用数组.
Dim arrayOfString As String()
Run Code Online (Sandbox Code Playgroud)
要么
Dim arrayOfString() As String
Run Code Online (Sandbox Code Playgroud)
当然,它比这复杂一点.您可能希望使用预定义数量的元素声明您的数组,例如5,假设Option Base 0.
Dim arrayOfInt(4) As Int
Run Code Online (Sandbox Code Playgroud)
或者您可能希望为阵列分配许多预定义值.
Dim arrayofInt As Int() = {1, 2, 3, 4, 5}
Run Code Online (Sandbox Code Playgroud)
您也可以使用此语法,
Dim arrayOfStrings = New String() {"1.2.3.4", "5.6.7.8"}
Run Code Online (Sandbox Code Playgroud)
例如.你的例子,
Dim DNS As String() = {"192.168.1.1", "192.168.1.2"}
Run Code Online (Sandbox Code Playgroud)
似乎完全有效.
在您的示例中,您有错误使用WMI.我看到你想"SetDNSServerSearchOrder"在"Win32_NetworkAdapterConfiguration"类上调用该方法.
该objNewDNS = objMO.GetMethodParameters("SetDNSServerSearchOrder")套objNewDNS的ManagementBaseObject是,为参数的收集"SetDNSServerSearchOrder"方法.
在"SetDNSServerSearchOrder"采用所谓的一个参数"DNSServerSearchOrder"所描述这里这恰好是一个字符串数组.
所以除非我弄错了,假设字符串数组DNS是你的搜索顺序,你的代码应该是:
'Set DNS to DHCP
objNewDNS("DNSServerSearchOrder") = DNS
objMO.InvokeMethod("SetDNSServerSearchOrder", objNewDNS)
Run Code Online (Sandbox Code Playgroud)
请注意,此代码会丢弃方法调用的返回值.
编辑:
从您的评论看来,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)
Run Code Online (Sandbox Code Playgroud)
所以你的问题与你声明数组的能力无关,而是与WMI的繁琐接口有关.我想你可能需要多一些调用来使你的控制台输出完全有效,但我希望这会帮助你.